gpt4 book ai didi

c++ - 端口音频导致 50% 的测试发出响亮的嗡嗡声

转载 作者:行者123 更新时间:2023-11-28 02:11:45 24 4
gpt4 key购买 nike

我正在将端口音频与现有的 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) 似乎可以解决问题,除非在回调中完成额外的工作。

其他信息:操作系统版本:10.11.3_sampleRate:44100_framesPerBuffer:256

最佳答案

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

关于c++ - 端口音频导致 50% 的测试发出响亮的嗡嗡声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35446049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com