C++ 能否查询OpenAL设备的频率和格式?

C++ 能否查询OpenAL设备的频率和格式?,c++,c,audio,openal,C++,C,Audio,Openal,发件人: )) 在不需要对缓冲区重新采样的情况下,是否可以查询OpenAL设备喜欢使用的频率和格式?a好的,您只能获取频率,而不是格式。使用alcreatecontext创建函数时,指定混合缓冲区的属性。如果在那里传递NULL,则可以稍后使用algetintegerv查询这些属性: 使用ALC\u ATTRIBUTES\u SIZEenum首次查询属性计数 然后使用ALC\u ALL\u attributesenum分配足够大的缓冲区和查询属性 缓冲区将包含属性名称对及其值:[attrib1,v

发件人:

))


在不需要对缓冲区重新采样的情况下,是否可以查询OpenAL设备喜欢使用的频率和格式?

a好的,您只能获取频率,而不是格式。使用
alcreatecontext
创建函数时,指定混合缓冲区的属性。如果在那里传递
NULL
,则可以稍后使用
algetintegerv
查询这些属性:

  • 使用
    ALC\u ATTRIBUTES\u SIZE
    enum首次查询属性计数
  • 然后使用
    ALC\u ALL\u attributes
    enum分配足够大的缓冲区和查询属性
  • 缓冲区将包含属性名称对及其值:[attrib1,value1,attrib2,value2,…]
  • 频率枚举名称为
    ALC\u Frequency
    -循环遍历数组并搜索此枚举

  • 至于格式-立体声或单声道声音使用有符号的缩写。这应该在所有平台上都能提供足够好的性能(即使是那些使用浮点数进行混合的平台,从短到短转换为浮点数的操作也很快)。

    Afaik您只能获得频率,而不能获得格式。使用
    alcreatecontext
    创建函数时,指定混合缓冲区的属性。如果在那里传递
    NULL
    ,则可以稍后使用
    algetintegerv
    查询这些属性:

  • 使用
    ALC\u ATTRIBUTES\u SIZE
    enum首次查询属性计数
  • 然后使用
    ALC\u ALL\u attributes
    enum分配足够大的缓冲区和查询属性
  • 缓冲区将包含属性名称对及其值:[attrib1,value1,attrib2,value2,…]
  • 频率枚举名称为
    ALC\u Frequency
    -循环遍历数组并搜索此枚举
  • 至于格式-立体声或单声道声音使用有符号的缩写。这将在所有平台上提供足够好的性能(即使是那些使用浮点数进行混合的平台,将短点数转换为短点数是一种快速操作)

    void alBufferData(
        ALuint buffer,
        ALenum format,
        const ALvoid *data,
        ALsizei size,
        ALsizei freq