SDL2音频回拨限制为8位?

时间:2016-01-20 10:14:10

标签: c audio sdl sdl-2

通读了SDL2音频文档(这有点可悲),我可以看到有各种音频格式可用 - 包括unsigned&签名8bit,16bit,32bitfloat。到现在为止还挺好。 我在这个项目中坚持使用SDL,我想在16bit中做一些简单的音频合成。因此,我已根据此页面将SDL_AudioSpec结构中的格式设置为AUDIO_U16SYS https://wiki.libsdl.org/SDL_AudioSpec

但是,当我查看同一页面上的回调文档时(实际上我在网上看到的其他地方),回调中的音频缓冲区是* Uint8:

void SDL_AudioCallback(void*  userdata,
                       Uint8* stream,
                       int    len)

在这种情况下,我无法看到我如何将16位音频传递给SDL。看起来它总是以8位接收音频,并且库只是上采样到所需的比特率。但这听起来很疯狂。这是正确的,还是我错过了什么。例如,是否(某种程度上)对应于例如的替代回调原型。 AUDIO_U16SYS,还是我必须使用其他方法获得更高的比特率?

1 个答案:

答案 0 :(得分:1)

虽然stream确实是指向8位整数的指针,但您可以将其强制转换为正确的类型。它只是一个指向字节流的通用指针,应该如何解释这些字节(比如将每两个字节组合成一个16位字)取决于你。

所以在回调函数中,只需要做例如。

Uint16 *stream16 = (Uint16 *) stream;