通读了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,还是我必须使用其他方法获得更高的比特率?
答案 0 :(得分:1)
虽然stream
确实是指向8位整数的指针,但您可以将其强制转换为正确的类型。它只是一个指向字节流的通用指针,应该如何解释这些字节(比如将每两个字节组合成一个16位字)取决于你。
所以在回调函数中,只需要做例如。
Uint16 *stream16 = (Uint16 *) stream;