获取 Android 音频文件的时长

3
我有一个ListView,其中包含多个音频文件。我需要获取每个音频文件的持续时间以在列表中显示它。
这是我已经尝试过的: MediaPlayer getDuration() -> 对于13个项目需要约1秒钟 MediaStoreCursor -> 对于13个项目需要约2秒钟
这对于显示ListView来说太长了。
所以我想到了这个:
在录制音频文件时创建一个包含文件名和持续时间的数据库
-> 这会导致数据不一致,因为文件可能已被删除
是否有其他方法可以实现这一点?
提前感谢。

请查看此答案 https://dev59.com/IGUp5IYBdhLWcg3wRF-c - Agustin Pazos
3个回答

3
MediaMetadataRetriever 可以用于获取与媒体文件相关的元数据。
MediaMetadataRetriever mediaMetadataRetriever= new MediaMetadataRetriever();
 mediaMetadataRetriever.setDataSource(filePath);

String duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));

extractMetadata(int)方法可用于Android API 10及以上版本。

持续时间将以毫秒为单位。


"METADATA_KEY_DURATION" - Padma Kumar

2
MediaMetaDataRetriever 是我用来收集音频或视频文件的元数据,包括视频预览帧。你可以查看 https://developer.android.com/reference/android/media/MediaMetadataRetriever 以了解从媒体文件中可以检索到哪些类型的元数据。使用

extractMetaData(MediaMetadataRetriever.METADATA_KEY_DURATION)

可以获取音频/视频文件的持续时间。

注: "Original Answer" 翻译成 "最初的回答"

0

我曾经遇到过同样的问题(在2020年),我的情况下音频文件数量大约有4000-5000个文件(每个文件长达5-10分钟)。因此,在我的情况下,它需要太长时间。所以我创建了一个SQLite数据库,之后过滤文件只需要毫秒级的工作。这里多线程无法帮助,因为它是一个磁盘任务,而不是计算任务。我做了和@N-JOY一样的事情,但是它需要很长时间(几分钟)。尽管如此,我仍然想让它变得更快。

我的解决方案 - 录制音频文件后,在AudioFile名称中添加长度,并从其名称中提取文件长度非常容易。通过这种方式,我的回收站视图速度更快。希望能对某些人有所帮助。

但是,如果您已经创建了大量文件,则数据库是最佳选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接