Pet*_*ter 5 c linux sdl pulseaudio sdl-2
我正在使用 SDL2 录制我的麦克风。不知何故,大约 2 秒后会调用回调。我预计它会立即被调用。
如果我为我的扬声器创建回调,它将立即被调用。
这是我得到延迟的 MWE:
#include <SDL2/SDL.h>
void cb(void *userdata, Uint8 *stream, int len) {
printf("Callback at %u\n", SDL_GetTicks());
}
int main() {
SDL_Init(SDL_INIT_AUDIO);
SDL_AudioDeviceID dev;
SDL_AudioSpec want, have;
SDL_zero(want);
want.freq = 44100;
want.format = AUDIO_S16SYS;
want.channels = 1;
want.samples = 1024;
want.callback = cb;
dev = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(0, 1), 1, &want, &have, 0);
if (have.format != want.format) {
SDL_Log("We didn't get the wanted format.");
return 1;
}
SDL_PauseAudioDevice(dev, 0);
if (dev == 0) {
SDL_Log("Failed to open audio: %s", SDL_GetError());
return 1;
}
printf("Started at %u\n", SDL_GetTicks());
SDL_Delay(5000);
SDL_CloseAudioDevice(dev);
}
Run Code Online (Sandbox Code Playgroud)
我的输出是
21岁开始
2001年回调
2001年回调
2001年回调
等等。
我也将want.freq和更改want.samples为较小的数字,但没有效果。