J'ai une application de musique Android dans le Play Store depuis mai 2016. Actuellement, je demande à l'utilisateur de spécifier un dossier contenant toute sa musique.

J'utilise le code suivant pour filtrer leur dossier pour les fichiers musicaux:

private boolean isAudioFile(String songTitleLowerCase) {
    return songTitleLowerCase.endsWith(".mp3") || songTitleLowerCase.endsWith(".wma") || songTitleLowerCase.endsWith(".wav") || songTitleLowerCase.endsWith(".m4a") || songTitleLowerCase.endsWith("" +
            ".flac");
    }

J'ai du code supplémentaire qui recherche également dans tous les sous-dossiers.

Cela fonctionne bien, mais a quelques limitations:

  1. La plupart des utilisateurs ont probablement des difficultés à localiser le dossier dans lequel la musique est stockée. J'ai quelques astuces dans l'application concernant les emplacements où les téléphones conservent leurs dossiers musicaux, mais entre tous les modèles de téléphones, et toutes les versions d'Android, sont assez nombreux possibilités.

  2. Si l'utilisateur a deux dossiers ou plus avec de la musique, il doit soit consolider sa musique, soit accéder uniquement à une partie de sa collection musicale avec mon application. Je n'ai pas encore implémenté de code pour la sélection de plusieurs dossiers musicaux.

Je pense que la plupart des applications trouvent automatiquement tous les fichiers musicaux sur l'appareil, et j'aimerais le faire. Auparavant, j'avais implémenté cette fonctionnalité, et le problème était que je me retrouvais avec tous les fichiers audio (c'est-à-dire de Google Maps), ainsi que des podcasts et des livres audio mélangés.

Alors, comment puis-je exclure des clips audio, des podcasts et des livres audio? Est-ce que je fais juste cela avec les extensions que je choisis d'inclure dans le code extrait ci-dessus? Je ne sais vraiment pas quels formats de fichiers sont importants pour les auditeurs de musique de nos jours, et quels formats de fichiers sont juste pour les sons et les podcasts, ou s'il y a un chevauchement dans les utilisations. C'EST À DIRE. Les fichiers .wav sont-ils utilisés pour les fichiers musicaux ou uniquement pour les clips audio?

Merci pour votre patience et votre compréhension avec mes questions. J'apprécie vraiment vos commentaires, car cela aidera à rendre mon application beaucoup plus conviviale une fois qu'elle pourra trouver automatiquement toute la musique avec précision.

3
joshgoldeneagle 27 janv. 2017 à 10:05

4 réponses

Meilleure réponse

Il n'y a pas de réponse définitive en raison de la nature de la question: je peux enregistrer un discours pendant à peu près la même durée qu'une chanson typique en utilisant un équipement de haute qualité avec de la musique de fond et il n'y a aucun moyen de déterminer le type de fichier audio ( tu es sûr que je ne chantais pas?). Si vous filtrez des fichiers uniquement en fonction de la durée ou de la taille, gardez à l'esprit que de nombreux fans de Dream Theater seront vraiment en colère.

Donc, avant tout, les extensions ne sont pas fiables. Utilisez quelque chose comme mime-util pour extraire le format à l'aide de l'extension et / ou nombre magique (puisque le site Web est hors ligne et que la bibliothèque ne semble plus être activement développée, reportez-vous à cette question SO pour les instructions d'utilisation). Je ne sais pas quel est le bilan de MediaMetadataRetriever à cet égard , mais je suppose que vous pouvez l'essayer. Vous pouvez également obtenir quelque chose comme Apache Tika mais cela semble assez lourd pour vos besoins.

Ensuite, filtrez les fichiers corrects. Tout ce qui contient MIME audio/* est une valeur sûre. Vous devrez peut-être ajouter des types application/* spécifiques à la liste blanche, mais le seul que je connaisse est application/ogg et même dans ce cas, audio/ogg est préférable. Afin d'éviter les formats non musicaux courants, liste noire audio/audible, audio/vnd.audible.aax, audio/x-pn-audibleaudio (ce serait .aa, .aax et les formats de livres audio similaires), audio/aac, audio/3gp. Pour plus d'idées, consultez Wikipedia.

Voici les pièces les moins fiables. Vous pouvez supposer que tout ce qui est en dessous de 30s ne devrait pas être de la musique (cela semble trop court même pour le metalcore). On pourrait supposer la même chose pour les fichiers trop longs: assurez-vous simplement de choisir une valeur raisonnable comme 90 minutes environ (non, 15 minutes, ce n'est pas sain. Et je n'écoute même pas Dream Theater).

Il y a plus: vous pouvez espérer que votre utilisateur bien-aimé a eu la gentillesse de définir des métadonnées pour ses fichiers. Utilisez MediaMetadataRetriever pour vérifier l'existence de valeurs telles que Album, AlbumArtist, Genre et autres. Vérifiez également le débit binaire - tout ce qui est 80+ est qualifié de musique.

Et le plus peu fiable de tous: vérifiez le rapport taille / durée. Encore une fois, MediaMetadataRetriever est votre ami. Cela nécessiterait des tests approfondis, mais je peux vous dire d'après ma collection qu'une chanson moyenne de 4-4,5 minutes est un peu moins de 4 Mo lorsqu'elle est stockée en tant que fichier 4 ogg de qualité, mais peut atteindre 15 Mo lorsqu'elle est en mp3 320 kbps. Assurez-vous de vérifier le type - les formats sans perte tels que flac ou wav sont beaucoup plus volumineux, donc une chanson flac de 5 minutes prend ~ 40 Mo. Cependant, la limite supérieure ne vous intéresserait pas, car les enregistrements audio sont généralement de qualité inférieure, donc, disons, si la taille (en Mo) / durée (en min) <0,5 (0,7 pourrait également fonctionner), c'est définitivement pas de la musique.

C'est tout ce à quoi je pouvais penser pour le moment. J'ai une collection de formats de chansons et de durées de fichiers différents sur mon PC (mais pas de livres audio ou d'enregistrements), donc je suppose que je pourrais vous saisir des chiffres plus spécifiques si c'est ce dont vous avez besoin.

Remarque: j'ai supposé que vous deviez filtrer les chansons des non-chansons en général. Si vous avez l'intention de les lire à l'aide du lecteur multimédia d'Android, vous n'avez pas à vous soucier de tous les formats audio obsolètes: vérifiez quels types Android prend en charge et filtrez en fonction de cela.

P.S. si vous cherchez des exemples qui briseront définitivement la manière sensée que vous utilisez pour filtrer, juste look dans prog genres (ambient fonctionne aussi).

1
Community 23 mai 2017 à 12:33

Android effectue toutes les recherches pour vous et stocke les résultats dans une base de données accessible à l'aide de l 'API MediaStore.

Voici un exemple très basique qui vous permettra de démarrer.

-1
Community 23 mai 2017 à 12:08

Votre logique ressemble plus à la liste blanche des fichiers audio et devrait être le contraire, il y a plus d'extensions de fichiers audio-musique que les guides audio

Donc au lieu d'essayer de trouver une extension de musique valide, essayez de trouver un livre audio-guide

Il s'agit uniquement de: .aa , .aax et .m4b

private boolean isUnwantedAudioFile(String songTitleLowerCase) {
    return songTitleLowerCase.endsWith(".aa") || songTitleLowerCase.endsWith(".aax") || songTitleLowerCase.endsWith(".m4b")  ;
    }

Tous les autres fichiers qui peuvent passer ce proxy sont valides!

Vous pouvez même penser à faire une liste à l'aide de collections

ici est une liste assez mise à jour de tous les fichiers possibles.

0
ΦXocę 웃 Пepeúpa ツ 2 févr. 2017 à 13:04

Vous ne pouvez pas savoir avec certitude si un fichier audio correspond à ce que vous attendez. Un livre audio ou un enregistrement peut aussi bien être au format MP3, FLAC, OGG, WAV ou tout autre format sonore, selon le programme utilisé par l'éditeur / enregistreur.

Les fichiers WAV sont (généralement) des fichiers audio non compressés et peuvent tout contenir. Cela peut être un fichier de musique (les audiophiles seulement «écoutent» les fichiers WAV parce qu’ils n’apprécient pas le son des MP3 compressés), mais aussi un enregistrement (mon enregistreur audio par exemple) propose d'écrire la sortie dans un fichier WAV).

Le seul format "enregistrement uniquement" que je connaisse est AMR (Adaptive Multi-Rate audio codec, format de compression audio optimisé pour le codage de la parole). Comme Chetan Joshi l'a déjà souligné, vous pouvez utiliser des vérifications de la taille du fichier. Mais sachez que ceux-ci ne sont pas toujours fiables, car (par exemple) les fichiers WAV (= audio brut) sont généralement très volumineux, même pour de courtes durées.

0
Aenadon 2 févr. 2017 à 10:18