从资产文件夹中读取 mp3 元数据

Read mp3 metadata from assets folder

我有一个应用程序,其中一些 mp3 文件存储在资产文件夹的子文件夹中。 我通过这种方式获取文件列表

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

结果显示在列表视图中。 通过这样做,我看到的是一个 mp3 文件名列表。现在我不想显示文件名,而是每个文件的关联元数据。

给你。 首先获取文件路径如图

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

然后获取音频的元数据,如此处所示

How to extract metadata from mp3?

元数据意味着名称、标题、时间等数据,如果您需要,则需要使用 MediaMetadataRetriever class 来这样做..

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);

同样你也可以提取其他数据..
希望它能帮助你。

不需要将文件复制到磁盘。 MediaMetadataRetriever and FFmpegMediaMetadataRetriever both offer a 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();