【问题标题】:openAL - alBufferData and AL_INVALID_VALUEopenAL - alBufferData 和 AL_INVALID_VALUE
【发布时间】:2011-08-20 02:46:21
【问题描述】:

我有问题。当我缓冲数据时,我得到了 40963 错误,意思是 AL_INVALID_VALUE。程序员指南 (http://connect.creativelabs.com/openal/Documentation/OpenAL_Programmers_Guide.pdf) 说数据为空,缓冲区正在使用或大小参数无效。

我知道数据不为空,并且缓冲区未在使用中。 但是“尺寸参数无效”的真正含义是什么?比如我要缓冲的每个数据包是20ms,数据大小是320,我的速率是8000khz。

谢谢

【问题讨论】:

  • 你在什么平台上开发?

标签: c++ c visual-studio openal


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2014-10-09
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多