Java 增加声池持续时间
所以我有6.5秒长的声音,当我用soundpool播放时,它只播放5秒…我试过使用mediaplayer,但对于这种应用程序来说太慢了。 声音池代码:Java 增加声池持续时间,java,android,soundpool,Java,Android,Soundpool,所以我有6.5秒长的声音,当我用soundpool播放时,它只播放5秒…我试过使用mediaplayer,但对于这种应用程序来说太慢了。 声音池代码: 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(d
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);
}
尝试使用以下加载函数
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);
迟做总比不做好,所以为了将来参考,每个磁道有1Mb缓冲区大小限制。但该限制不适用于文件大小,而是适用于解压缩的原始PCM数据 SoundPool将把加载的音频解压缩为PCM数据,这样它就可以立即播放,而无需解码延迟。如果您正在加载的音频被严重压缩,如MP3,则可能会被放大很多 您可以使用Soundpool播放超过5秒的声音(我已经播放了大约30秒的声音)。但您可能需要修改您的文件。您可以尝试将您的声音文件转换为ogg,它似乎可以在Soundpool中提供更好的效果 另外,进行以下更改:
- 将声音文件的采样率更改为16000 Hz
- 将音频频道更改为单声道,而不是立体声
- 确保这些处理后的文件大小小于1 mb
对于这些更改,您可以使用这样的在线转换器。如果我们传递的长度大于声音文件UHMM,该怎么办?我应该在FileDescriptor中输入什么?