[英]Get duration of audio file Android
我有一个包含多个音频文件的 ListView。 对于每一个,我都必须获得持续时间才能将其显示在列表中。
这是我尝试过的:
MediaPlayer getDuration()
-> 13 个项目需要大约 1 秒
MediaStore
和Cursor
-> 13 个项目大约需要 2 秒
这对于显示ListView.
来说太过分了ListView.
所以我想到了这个:
在录制音频文件时创建一个包含文件名和持续时间的数据库
-> 这会导致数据不一致,因为文件可能已被删除
有没有替代方法来实现这一目标?
提前致谢
MediaMetaDataRetriever
是我用来收集音频或视频文件的元数据的工具,包括视频预览帧,请查看https://developer.android.com/reference/android/media/MediaMetadataRetriever以查看您可以从中检索什么类型的元数据一个媒体文件。 你应该可以使用
提取元数据(MediaMetadataRetriever.METADATA_KEY_DURATION)
获取音频/视频文件的持续时间。
MediaMetadataRetriever
可用于获取与媒体文件相关的元数据
MediaMetadataRetriever mediaMetadataRetriever= new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(filePath);
String duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
extractMetadata(int) 方法可以在 Android API 级别 10 以上使用。
持续时间将以毫秒为单位。
我遇到了同样的问题(2020 年),在我的案例中,音频文件的数量约为 4000-5000 个文件(每个文件 5-10 分钟)。 所以就我而言,它花了太长时间。 所以我创建了一个 SQLite 数据库,在过滤之后,文件是几毫秒的工作。 这里多线程无济于事,因为它是一项磁盘任务,而不是一项计算。 我和@N-JOY 说的一样,但需要很长时间(以分钟为单位)。 尽管如此,我还是想让它快点。
我的解决方案 -录制音频文件后,在 AudioFile 名称中添加长度并从其名称中提取文件的长度是一项非常简单的任务。 这样,我的回收站视图更快。 希望它可以帮助某人。
但是如果你已经创建了很多文件,那么数据库是最好的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.