【问题标题】: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);
    }

【问题讨论】:

    标签: java android soundpool


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2015-06-14
      • 1970-01-01
      • 2011-01-28
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多