我有一个应用程序,其中一些mp3文件存储在assets文件夹的子文件夹中。 我以这种方式获得文件列表
context.getAssets().list("audio");
结果显示在listview中。 通过这样做,我看到的是一个mp3文件名列表。现在我不想要显示文件名,但需要关联每个文件的元数据。
答案 0 :(得分:3)
将文件复制到磁盘是不必要的。 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();
答案 1 :(得分:0)
你走了。 首先获取文件路径,如下所示
How to pass a file path which is in assets folder to File(String path)?
然后获取音频元数据,如下所示
答案 2 :(得分: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);
同样,您也可以提取其他数据。
希望它会对你有所帮助。