2015-01-25 4 views
1

У меня есть приложение с некоторыми mp3-файлами, хранящимися в папке с папкой «Вложенные папки». я получить список файлов таким образомПрочитать mp3 метаданные из папки с ресурсами

context.getAssets().list("audio"); 

и результаты показывают его в виде списка. Делая это, я вижу список mp3-файлов. Теперь я не хочу показывать имена файлов, но связанные метаданные для каждого файла.

ответ

0

Здесь вы идете. Сначала получите путь к файлу, как показано здесь

How to pass a file path which is in assets folder to File(String path)?

А затем получить метаданные аудио, как показано здесь

How to extract metadata from mp3?

+0

, но в этом случае я скопировать файл из папки активов в другую папку в память устройства, занимая двойное дисковое пространство. Так что, если у меня есть 20 МБ mp3 внутри активов, после копирования я занимаю еще 20 мб хранилища, и я бы избегал этого – giozh

+0

. После получения метаданных удалите файл и выберите следующий и так один ;-) –

+0

Это не лучший подход, см. мой ответ. –

0

метаданными означает имя, название, время и т.д. данные, если вы хотите, то вам нужно использовать MediaMetadataRetriever класс сделать так ..

MediaMetadataRetriever metaRetriver = new MediaMetadataRetriever(); 
metaRetriver.setDataSource("path of song"); 
String album = metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 

String artist = metaRetriver 
    .extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 
String gener=metaRetriver 
       .extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE); 

Аналогичным образом вы также можете извлечь другие данные.
Надеюсь, это вам поможет.

2

Копирование файла на диск не требуется. MediaMetadataRetriever и FFmpegMediaMetadataRetriever оба предлагают setDataSource method, который принимает FileDescriptor в качестве аргумента:

FFmpegMediaMetadataRetriever metaRetriver = new FFmpegMediaMetadataRetriever();\ 
// or MediaMetadataRetriever metaRetriver = new MediaMetadataRetriever(); 

String path = "audio"; 

String [] files = context.getAssets().list(path); 

for (int i = 0; i < files.length; i++) { 
    String file = path + "/" + files[i]; 

    AssetFileDescriptor afd = context.getAssets().openFd(file); 

    metaRetriver.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 

    String album = metaRetriver.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM); 
    String artist = metaRetriver.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ARTIST); 
    String gener = metaRetriver.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_GENRE); 

    afd.close(); 
} 

metaRetriver.release(); 
Смежные вопросы