android - SoundPool - 声音文件中的什么位置
问题描述
我在 Android 中使用 Soundpool 加载了声音。
我已经使用该play
功能播放声音。
我如何知道一个文件有多长以及我当前在该文件中的哪个位置播放?
解决方案
声音文件时长
MediaPlayer
可能是你最好的选择,在这里:
MediaPlayer player = MediaPlayer.create(ctxt, R.raw.mysound);
int duration = player.getDuration();
player.release(); //(If not using this player later on)
当前播放位置
SoundPool
不支持此功能。您的三个主要选择:
- 用于
MediaPlayer
播放。MediaPlayer
提供一种getCurrentPosition()
方法。 - 使用
AudioTrack
-- 手动将未压缩的音频逐字节发送到流中。AudioTrack
具有确定播放位置的一些基本功能(在大多数设备上通常精确到几十毫秒内),除此之外,您还可以确切地知道有多少音频被添加到播放缓冲区。 - 坚持使用
SoundPool
,但要自己计时。也就是说,花一点时间 hack (SystemClock.UptimeMillis()
) 或设置 aCountDownTimer
,并通过假设播放一play()
返回就开始来估计您的播放位置。这种方法充满了问题和不准确之处,但具有不涉及AudioTrack's
复杂性的好处。
推荐阅读
- java - 无法从从自定义 maven nexus 存储库下载的 jar 导入类
- c++ - 带有擦除元素的 C++ 嵌套 for 循环
- php - 在 MySQL db 中搜索数据的 PHP 表单
- .htaccess - 如何防止在 Firefox 中使用 .htaccess 文件提示允许的子文件夹的密码提示
- c++ - 当我们有一个数字和字符串时,>> 运算符如何工作
- c# - 如何将转换器用于日历的texblock?
- amazon-web-services - 用于获取具有最短距离的所有相关顶点的最佳 Neptune 查询
- c# - 如何更高效地在 C# 中创建 300 个秒表?
- ruby-on-rails - Rails 在数据库中存储逗号后 2 位小数的数字
- c# - 如何修复“写入输出文件时发生错误:CSC 文件,第 1 行”