增加音池持续时间

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。

【讨论】:

以上是关于增加音池持续时间的主要内容,如果未能解决你的问题,请参考以下文章

使用 VLC 流式传输时增加 fps 并减少持续时间

使用 Serverless Aurora 时 Sequelize 连接超时,寻找增加超时持续时间或重试连接的方法

重复删除和加载相同数据后,H2 db 大小持续增加

增加 UINavigationBar 的高度并添加在推送时持续存在的自定义视图

将电影时长增加 n 倍

两个音池音量控制