【发布时间】:2013-01-06 22:52:49
【问题描述】:
我正在尝试使用以下方法播放存储为字节数组的声音:
byte[] clickSamples = getAudioFileData("sound.wav");
ByteBuffer buffer = ByteBuffer.allocate(bufferSize*2);
int tick = 0;
for (int i = 0; i < clickSamples.length; i++) {
buffer.putShort((short) clickSamples[i]);
tick++;
if (tick >= bufferSize/SAMPLE_SIZE) {
line.write(buffer.array(), 0, buffer.position());
buffer.clear();
tick = 0;
}
}
很难解释出了什么问题。我听到了声音,但这只是一种“嗖嗖”的声音。
我想将此方法与字节缓冲区等一起使用,因为我的整个应用程序都是围绕它构建的。使用 Clip 或 AudioInputStream 并不是一个真正的选择。
所以我想我的问题是:
如何使用字节缓冲区直接从我的字节数组播放声音?
感谢您的帮助!
【问题讨论】:
-
万一:如果您将 ByteBuffer 顺序设置为小端序会发生什么?
-
我还注意到,我得到的声音听起来有点像我的声音文件倒放,但失真并带有很多白噪声。通过将缓冲区顺序转换为小端,一切都会变得更响亮。
-
我获取音频数据的方法是这样的:snippi.com/s/ndi3f4x
-
1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) “我想将此方法与字节缓冲区等一起使用,因为我的整个应用程序都是围绕它构建的。” 有时需要对不起作用的核心功能采取严厉措施。
-
嘿安德鲁。谢谢你的评论。 1)当然,我尽力了。如果您指出缺少哪些信息,我将很高兴添加它。 2)我同意。但是使用我尝试使用 (^^) 接缝的方法非常适合我的应用程序,所以我很乐意让它发挥作用。
标签: java audio io bytearray wav