对于iphone语音更改应用程序(目标c),我试图从录制音频队列缓冲区中取样采样的整数值,在函数中处理它们并将修改后的值写回回放缓冲区.目前我使用这样的东西
AudioBuffer audioBuffer = bufferList->mBuffers[0];
int bufferSize = audioBuffer.mDataByteSize / sizeof(SInt32);
SInt32 *frame = audioBuffer.mData;
SInt32 signalInput[22050];
for( int i=0; i<bufferSize; i++ ) {
SInt32 currentSample = frame[i];
*(signalInput +i) = currentSample;
}
Run Code Online (Sandbox Code Playgroud)
提取采样值并且似乎工作得非常好(signalinput应该是用于写入整数样本的目标向量).但是把它们写回缓冲区仍然是一个问题......我搜索了文档和很多论坛以找到解决方案,但还没有成功.
所以我非常感谢任何建议,感谢提前,卢卡斯
我的问题涉及AudioUnits.为了设计iPhone的语音交换应用程序(使用Objective-C xCode),我使用本网站的RemoteIO audioUnit示例:
http://atastypixel.com/blog/using-remoteio-audio-unit/
audioUnit缓冲区的长度设置为256个样本.对于我的项目,我需要更多(约22050).引用的页面说明audioUnit缓冲区的长度可以像这样调整:
float aBufferLength = 0.005; // In seconds
AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration,
sizeof(aBufferLength), &aBufferLength);
Run Code Online (Sandbox Code Playgroud)
现在我的具体问题:上面的代码不适合上面提到的audioUnit,因为没有使用AudioSession,从未初始化,因此产生错误.除了"kAudioSessionProperty_PreferredHardwareIOBufferDuration"之外,还有其他可能的调整缓冲区持续时间吗?在这种情况下,文档并不十分有用......提前感谢Lukas.