增加音池持续时间
Posted
技术标签:
【中文标题】增加音池持续时间【英文标题】:Increase soundpool duration 【发布时间】:2012-11-30 18:01:49 【问题描述】:所以我有 6.5 秒长的声音,当我用 soundpool 播放它时,它只播放 5 秒...我尝试使用媒体播放器,但对于这种应用程序来说太慢了。 声池代码:
SoundPool sp;
OnCreate
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
dub1s = sp.load(this, R.raw.dub1, 1);
Button
if (dub1s != 0)
sp.play(dub1s, 1, 1, 0, 0, 1);
【问题讨论】:
【参考方案1】:尝试使用以下加载函数。
public int load (FileDescriptor fd, long offset, long length, int priority)
第三个参数是声音的长度。 说,你正在阅读一个文件
FileInputStream in = new FileInputStream(new File(soundFile));
load() 应该是这样的
sp.load(in.getFD(), start, length, 0);
【讨论】:
如果我们传递的长度大于声音文件怎么办 uhmm..我应该在 FileDescriptor 中输入什么?【参考方案2】:迟到总比没有好,所以为了将来参考,Soundpool 对每个轨道有 1Mb 的缓冲区大小限制。但此限制不适用于文件大小,而是适用于解压缩的原始 PCM 数据。
SoundPool 会将加载的音频解压缩为 PCM 数据,以便立即播放,无需解码延迟。如果您正在加载的音频被大量压缩,例如 MP3,那么它可能会被放大很多。
您可以使用 Soundpool 播放超过 5 秒的声音(我播放了大约 30 秒的声音)。但是您可能需要修改文件。您可以尝试将您的声音文件转换为 ogg,使用 Soundpool 似乎可以提供更好的效果。
另外,进行以下更改:
将声音文件的采样率更改为 16000 Hz 将您的音频通道更改为单声道,而不是立体声。 确保在这些过程之后您的文件小于 1 mb。对于这些更改,您可以使用在线转换器,例如 one。
【讨论】:
以上是关于增加音池持续时间的主要内容,如果未能解决你的问题,请参考以下文章
使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法