增加音池持续时间

时间:2012-11-30 18:01:50

标签: java android soundpool

所以我的声音长达6.5秒,当我用soundpool播放时,它只播放5秒......我尝试使用媒体播放器,但对于这种应用来说速度太慢了。 SoundPool代码:

    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);
    }

2 个答案:

答案 0 :(得分:2)

尝试使用以下加载功能。

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);

答案 1 :(得分:0)

迟到总比不到好,因此为了将来参考,Soundpool 每个轨道的缓冲区大小限制为 1Mb。但此限制不适用于文件大小,而是适用于解压缩的原始 PCM 数据。

SoundPool 会将加载的音频解压缩为 PCM 数据,因此它可以立即播放而没有解码延迟。如果您加载的音频被大量压缩,例如 MP3,那么它可能会被放大很多。

您可以使用 Soundpool 播放超过 5 秒的声音(我播放了大约 30 秒的声音)。但是您可能需要修改您的文件。您可以尝试将您的声音文件转换为 ogg,使用 Soundpool 似乎可以提供更好的效果。

另外,进行以下更改:

  • 将声音文件的采样率更改为 16000 Hz
  • 将您的音频通道改为单声道,而不是立体声。
  • 确保经过这些过程后您的文件小于 1 mb。

对于这些更改,您可以使用在线转换器,例如 one