我在 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 的倍数。缓冲数据可能有一个最小大小,因此可以制作更大的数据包并调整它们的大小。