gpt4 book ai didi

iphone - 调整 AudioUnit 缓冲区的长度

转载 作者:行者123 更新时间:2023-12-03 19:08:04 25 4
gpt4 key购买 nike

我的问题涉及音频单元。为了设计适用于 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”之外,还有其他可能调整缓冲持续时间吗?在这种情况下,文档不太有用......提前致谢,卢卡斯。

最佳答案

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

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

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

考虑到这一点,您是否考虑分配自己的缓冲区并累积它直到获得所需的样本数量?

编辑

用于初始化 Audio Session 的代码(应在初始化音频单元之前执行):

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);

您可以/应该在每次调用后检查结果,以查找可能的错误。您可以阅读 AudioSessionInitialize 的文档以获取更多信息,但为所有 4 个参数传递 NULL 仍然有效。例如,如果您需要建立中断监听器回调,则应该更改它。

关于iphone - 调整 AudioUnit 缓冲区的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4863330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com