SDL2 pcm音频播放太快

时间:2020-07-24 15:06:23

标签: c++ sdl pcm sdl-mixer

我写了一个库来读取旧游戏中未签名的8位pcm音频,然后使用以下代码将原始数据填充到Mix_Chunk中:

Mix_Chunk sfx;
sfx.allocated = 1;
sfx.abuf = (Uint8*)data;
sfx.alen = length;
sfx.volume = 32;

我知道采样率是10989HZ,但是当我使用Mix_OpenAudio(10989, AUDIO_U8, 2, 2048设置采样率时 它播放声音的速度太快了,我是将采样率设置错误还是SDL2不喜欢PCM?

如果我将其转储到文件中并使用Audacity打开它,则效果很好

1 个答案:

答案 0 :(得分:1)

解决了该问题,在调用Mix_OpenAudio之前,请运行以下命令:

SDL_AudioSpec wavSpec;
SDL_memset(&wavSpec, 0, sizeof(wavSpec)); /* or SDL_zero(want) */

wavSpec.callback = audioCallback;
wavSpec.userdata = nullptr;
wavSpec.format = AUDIO_S16;
wavSpec.channels = 2;
wavSpec.samples = 2048;

if (SDL_OpenAudio(&wavSpec, NULL) < 0)
{
    fprintf(stderr, "Could not open audio: %s\n", SDL_GetError());
}

pcm音频现在可以正确播放