我的问题与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);现在我的具体问题是:上面的代码不适合上面提到的audioUnit,因为AudioSession没有被使用,从未初始化过,因此会产生一个错误。除了"kAudioSessionProperty_PreferredHardwareIOBufferDuration"?之外,是否还有其他方法可以调整缓冲区持续时间在这种情况下,文档不是很有用。提前谢谢你,卢卡斯。
发布于 2011-02-01 22:37:47
使用RemoteIO音频单元定义和初始化AudioSession没有问题,这是设置所需缓冲区长度的方法。我有一些代码可以做到这一点,但这将花费我几个小时,直到我回家并可以发布它。你可以看看苹果的AurioTouch code-sample,或者等我稍后把它贴出来。
无论如何,请记住两件事:
PreferredHardwareIOBufferDuration。缓冲区大小始终是2的幂。考虑到这一点,您是否考虑过分配自己的缓冲区并将其累积,直到拥有所需数量的样本?
编辑
初始化音频会话的代码(应该在音频单元初始化之前):
OSStatus result;
result = AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
result = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);
// set preferred buffer size
Float32 preferredBufferSize = .04; // in seconds
result = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize);
// get actuall buffer size
Float32 audioBufferSize;
UInt32 size = sizeof (audioBufferSize);
result = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration, &size, &audioBufferSize);
result = AudioSessionSetActive(true);您可以/应该在每次调用后检查result,以便查找可能的错误。您可以阅读AudioSessionInitialize的文档以了解更多信息,但是为所有4个参数传递NULL仍然有效。例如,如果需要建立中断侦听器回调,则应该更改它。
https://stackoverflow.com/questions/4863330
复制相似问题