使用SDL2录制麦克风会延迟2秒

时间:2017-03-24 01:52:45

标签: c linux sdl sdl-2 pulseaudio

我正在使用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.freqwant.samples更改为较小的数字,但没有效果。

0 个答案:

没有答案