使用 SDL2 录音麦克风延迟 2 秒

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为较小的数字,但没有效果。