0

我编写了一个库来读取旧游戏中的无符号 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 打开它,它就可以正常播放

4

1 回答 1

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 音频现在可以正确播放

于 2020-07-24T20:47:21.710 回答