【问题标题】:Port Audio causing Loud Buzzing 50% of Tests端口音频导致 50% 的测试发出响亮的嗡嗡声
【发布时间】:2016-05-28 12:40:58
【问题描述】:

我正在将端口音频与现有的 MacOSX 应用程序集成。到目前为止,这是我的代码:

static int coreAudioCallback( const void *inputBuffer, void *outputBuffer,
                             unsigned long framesPerBuffer,
                             const PaStreamCallbackTimeInfo* timeInfo,
                             PaStreamCallbackFlags statusFlags,
                             void *userData ){
    /*(V3dAudioListener * pCallingListener = (V3dAudioListener*)userData;
    Aquila::SampleType *out = (Aquila::SampleType*)outputBuffer;
    pCallingListener->updateEQVals(out, framesPerBuffer);*/

    if (statusFlags & paInputOverflow) {
        printf("Input underflow");
    }

    if(statusFlags & paInputOverflow){
        printf("Input overflow");
    }
    if (statusFlags & paOutputUnderflowed) {
        printf("Output underflowed");
    }
    if (statusFlags & paOutputOverflow) {
        printf("Output overflow");
    }
    return 0;
}

void V3dAudioListener::start(){
    PaError error = Pa_Initialize();
    if(error != paNoError){
        throw std::invalid_argument("Failed to initialize port audio.");
    };

    PaStream *stream;
    /* Open an audio I/O stream. */
    error = Pa_OpenDefaultStream( &stream,
                                 0,          /* no input channels */
                                 2,          /* stereo output */
                                 paFloat32,  /* 32 bit floating point output */
                                 _sampleRate,
                                 _framesPerBuffer,        /* frames per buffer, i.e. the number
                                                           of sample frames that PortAudio will
                                                           request from the callback. Many apps
                                                           may want to use
                                                           paFramesPerBufferUnspecified, which
                                                           tells PortAudio to pick the best,
                                                           possibly changing, buffer size.*/
                                 coreAudioCallback, /* this is your callback function */
                                 this); /*This is a pointer that will be passed to
                                         your callback*/
    if( error != paNoError ){
        throw std::invalid_argument("Failed to set up port audio stream.");
    }

    error = Pa_StartStream(stream);
    if( error != paNoError ){
        throw std::invalid_argument("Failed to start port audio stream.");
    }

}

void V3dAudioListener::stop(){
    int error = Pa_Terminate();
    if(error != paNoError){
        throw std::invalid_argument("Failed to terminate port audio.");
    };
}

在代码运行的大约一半时间里,它会从输出音频设备产生响亮的嗡嗡声。嗡嗡声不会在每次运行期间开始或结束,但在初始启动时存在或不存在。这是什么原因造成的?是否有避免溢出缓冲区所需的最小延迟?除非在回调中完成额外的工作,否则在回调中放置 sleep(1) 似乎可以解决问题。

其他信息: OSX 版本:10.11.3 _sampleRate:44100 _framesPerBuffer: 256

【问题讨论】:

    标签: c++ macos signal-processing portaudio


    【解决方案1】:

    解决方案是增加我们传递给输出流的 _framesPerBuffer 值。值 1024 允许回调中更大的延迟,从而防止嗡嗡声。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多