首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整AudioUnit缓冲区的长度

调整AudioUnit缓冲区的长度
EN

Stack Overflow用户
提问于 2011-02-01 21:46:28
回答 1查看 8.2K关注 0票数 4

我的问题与AudioUnits有关。为了设计一个用于iPhone (使用Objective-C xCode)的语音转换应用程序,我使用了这个网站上的RemoteIO audioUnit示例:

http://atastypixel.com/blog/using-remoteio-audio-unit/

audioUnit缓冲器被设置为256个样本的长度。对于我的项目,我需要更多(大约22050)。引用的页面显示audioUnit缓冲区的长度可以像这样调整:

代码语言:javascript
复制
float aBufferLength = 0.005; // In seconds
AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, 
                        sizeof(aBufferLength), &aBufferLength);

现在我的具体问题是:上面的代码不适合上面提到的audioUnit,因为AudioSession没有被使用,从未初始化过,因此会产生一个错误。除了"kAudioSessionProperty_PreferredHardwareIOBufferDuration"?之外,是否还有其他方法可以调整缓冲区持续时间在这种情况下,文档不是很有用。提前谢谢你,卢卡斯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-01 22:37:47

使用RemoteIO音频单元定义和初始化AudioSession没有问题,这是设置所需缓冲区长度的方法。我有一些代码可以做到这一点,但这将花费我几个小时,直到我回家并可以发布它。你可以看看苹果的AurioTouch code-sample,或者等我稍后把它贴出来。

无论如何,请记住两件事:

  1. 缓冲区长度将只在设备上更改,所以如果您更改了它,并且在模拟器上看不到任何差异,请不要感到惊讶。
  2. 您无法获得任何您想要的缓冲区长度-这就是为什么该属性被称为PreferredHardwareIOBufferDuration。缓冲区大小始终是2的幂。

考虑到这一点,您是否考虑过分配自己的缓冲区并将其累积,直到拥有所需数量的样本?

编辑

初始化音频会话的代码(应该在音频单元初始化之前):

代码语言:javascript
复制
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仍然有效。例如,如果需要建立中断侦听器回调,则应该更改它。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4863330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档