端口音频导致 50% 的测试发出响亮的嗡嗡声
Port Audio causing Loud Buzzing 50% of Tests
我正在将端口音频与现有的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
解决方案是增加我们传递给输出流的_framesPerBuffer值。值 1024 允许回调中出现更大的延迟,从而防止发出嗡嗡声。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- 用于交叉编译和CMake的预处理器宏的单元测试
- 谷歌测试中的期望值存储在哪里
- 如何在for循环中包含两个索引值的测试条件
- 在cygwin中测试新的boost安装时出现cpp错误
- 使用rdtsc进行基准测试的缺点是什么
- 端口音频导致 50% 的测试发出响亮的嗡嗡声