我知道数据是非空的,并且缓冲区未在使用中。 但“尺寸参数无效”究竟意味着什么?例如,我想要缓冲的每个数据包是20ms,数据的大小是320.我的速率是8000khz。
由于
答案 0 :(得分:0)
我在Java JOAL和found this in another post中遇到了这个问题。我的代码如下:
ALut.alutLoadWAVFile(Sound.class.getResourceAsStream("/sound/sound.wav"), format, data, size, freq, loop);
if (al.alGetError() != AL.AL_NO_ERROR) {
System.err.println("Error in load.");
return AL.AL_FALSE;
}
al.alBufferData(buffer[0], format[0], data[0], size[0], freq[0]);
if (al.alGetError() != AL.AL_NO_ERROR) {
System.err.println("Error in alBufferData.");
System.err.println(buffer[0]);
System.err.println(format[0]);
System.err.println(data[0]);
System.err.println(size[0]);
System.err.println(freq[0]);
return AL.AL_FALSE;
}
return AL.AL_TRUE;
它打印了这个:
Error in alBufferData.
1
4355
java.nio.DirectByteBuffer[pos=0 lim=507538 cap=507904]
507538
44100
所以我尝试了以下操作:
return AL.AL_FALSE;
}
//Size needs to be adjusted to a multiple of 8
size[0] -= size[0]%8;
al.alBufferData(buffer[0], format[0], data[0], size[0], freq[0]);
这对我有用,但是在您的情况下,大小是4到8的倍数。缓冲数据的最小大小可能是有效的,因此制作更大的数据包并调整其大小是可行的。