ASIO SDK如何处理音频缓冲区
Posted
技术标签:
【中文标题】ASIO SDK如何处理音频缓冲区【英文标题】:ASIO SDK how to process audio buffers 【发布时间】:2015-03-29 15:51:17 【问题描述】:所以我正在开发一些音频处理软件,但我对一些 ASIO 音频处理有点困惑。从我正在阅读的内容来看,似乎在进行缓冲区切换回调时,我需要将“输入”处理为“输出”。但是如果我有不同数量的输入和输出通道怎么办?而且我猜如果我的输入和输出格式不匹配,我需要进行格式转换吗?
【问题讨论】:
你在开发什么样的插件?如果你有输入和输出,我猜是效果插件? 基本上是的。我只是对它希望我如何处理数据感到困惑。我知道什么时候需要完成,但我不知道我需要处理哪些缓冲区以及将其写回哪些缓冲区。 【参考方案1】:你要做的是访问 asioDriverInfo.inputsChannels 和 asioDriverInfo.inputBuffers。我使用此代码 sn-p 来计算我的设备输入/输出枚举。希望对你有帮助。
string cad;
if (ASiostart() == ASE_OK)
for (int i = 0; i < asioDriverInfo.inputChannels + asioDriverInfo.outputChannels; i++)
cad = asioDriverInfo.channelInfos[i].isInput? "input" : "output ";
cout<<"Chanel "<<i<<" : "<<asioDriverInfo.channelInfos[i].name<<" "<<cad<<endl;
for (int i = 0; i < asioDriverInfo.inputBuffers + asioDriverInfo.outputBuffers; i++)
cad = asioDriverInfo.bufferInfos[i].isInput? "input" : "output ";
cout<<"Buffer "<<i<<asioDriverInfo.bufferInfos[i].buffers<<" : " << cad <<" chanel "<<asioDriverInfo.bufferInfos[i].channelNum<<endl;
...and rest of stuff
【讨论】:
以上是关于ASIO SDK如何处理音频缓冲区的主要内容,如果未能解决你的问题,请参考以下文章
如何在 async_read_until 之后使用 asio 缓冲区进行连续读取
在 C++ 中处理音频缓冲区时,如何执行从 float -> double -> float 的转换
boost::asio::thread_pool - 如何在工作完成前取消工人?