我正在使用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);
}
我的输出是
21岁开始
2001年回调
2001年回调
2001年回调
等等。
我还将want.freq
和want.samples
更改为较小的数字,但没有效果。