我有一个包含多个音频文件的ListView。对于每一个,我必须得到持续时间,以便在列表中显示它。
这是我尝试过的:
MediaPlayer getDuration()
- > 13件物品大约需要1秒
MediaStore
和Cursor
- > 13项需要大约2秒
这对于显示ListView.
所以我想到了这个:
在录制音频文件时创建包含文件名和持续时间的数据库
- >这会导致数据不一致,因为文件可能已被删除
有没有其他方法可以实现这一目标?
提前致谢
答案 0 :(得分:1)
MediaMetaDataRetriever
是我用来收集音频或视频文件的元数据(包括视频预览帧)的方法,请查看https://developer.android.com/reference/android/media/MediaMetadataRetriever以查看可以从媒体文件中检索的元数据类型。
您应该可以使用
extractMetaData(MediaMetadataRetriever.METADATA_KEY_DURATION)
获取音频/视频文件的持续时间。
答案 1 :(得分:0)
MediaMetadataRetriever
可用于获取与媒体文件相关的元数据
MediaMetadataRetriever mediaMetadataRetriever= new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(filePath);
String duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
extractMetadata(int)方法可以在Android API级别10以上使用。
持续时间以毫秒为单位。
答案 2 :(得分:0)
我遇到了同样的问题(在2020年),我的音频文件数量约为4000-5000个文件(每个5-10分钟)。因此,就我而言,这花费了太长时间。因此,我创建了一个SQLite数据库,经过过滤,文件耗时数毫秒。这里多线程无济于事,因为它是磁盘任务,而不是计算任务。我按照@ N-JOY的指示进行了操作,但是花了很长时间(几分钟)。尽管如此,我还是想使其更快。
我的解决方案- 录制音频文件后,在AudioFile名称中添加长度,然后从其名称中提取文件的长度是一项非常容易的任务。这样,我的回收站视图就更快了。希望对别人有帮助。
但是如果您已经创建了很多文件,那么数据库是最佳选择。