首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时更改setPreferredIOBufferDuration会导致核心音频错误-50

在运行时更改setPreferredIOBufferDuration会导致核心音频错误-50
EN

Stack Overflow用户
提问于 2016-02-16 07:45:11
回答 1查看 1.2K关注 0票数 0

我正在编写一个基于音频单元(远程IO)的应用程序,显示给定缓冲区大小的波形。这个应用程序最初的首选缓冲区大小是0.0001,这导致了非常小的缓冲区帧大小(我认为它是14帧)。在运行时,我有一个UI元素,它允许通过AVAudioSessionsetPreferredIOBufferDuration:Error:方法切换缓冲区帧大小。

下面的代码将前两种情况从较小的缓冲区更改为较大的缓冲区。3-5尚未指定。但该应用程序在AudioUnitRender上崩溃,错误代码为-50。

代码语言:javascript
复制
- (void)setBufferSizeFromMode:(int)mode {

   NSTimeInterval bufferDuration;

   switch (mode) {
      case 1:
         bufferDuration = 0.0001;
         break;
      case 2:
         bufferDuration = 0.001;
         break;
      case 3:
         bufferDuration = 0.0; // reserved
         break;
      case 4:
         bufferDuration = 0.0; // reserved
         break;
      case 5:
         bufferDuration = 0.0; // reserved
         break;
      default:
         break;
   }

   AVAudioSession *session = [AVAudioSession sharedInstance];
   NSError * audioSessionError = nil;

   [session setPreferredIOBufferDuration:bufferDuration error:&audioSessionError];
   if (audioSessionError) {
      NSLog(@"Error %ld, %@",
            (long)audioSessionError.code, audioSessionError.localizedDescription);
   }

}

通过阅读CoreAudio和AVFoundation文档,我相信可以在运行时更改音频硬件配置。可能会有一些音频或失真的差距,但我现在很好。这种崩溃有明显的原因吗?或者我必须重新初始化所有东西(我的音频会话、音频单元、音频缓冲区等)。对于缓冲区持续时间的每一次更改?

编辑:我尝试过在更改会话缓冲区持续时间之前调用AudioOutputUnitStop(self.myRemoteIO);,然后在设置它之后再次启动。我还尝试将会话设置为非活动,然后将其重新激活,但两者都会在AU输入回调中使用来自AudioUnitRender()的-50 OSStatus。

EN

回答 1

Stack Overflow用户

发布于 2016-02-16 11:13:24

-50错误通常表示音频单元代码试图设置或使用无效参数值。

某些iOS设备不支持实际缓冲持续时间低于5.3 mS (或在较旧的设备上为0.0058秒)。而且iOS设备似乎可以自由地切换到比这个时间长4倍的实际缓冲时间,甚至可以切换到略有不同的值,有时不在应用程序的控制之下。

inNumberFrames被作为参数提供给音频单元回调,您的应用程序不能任意指定该值。

如果你想处理给定的缓冲区大小,可以把它们从一个中间的无锁循环FIFO中提取出来,音频单元回调可以将它们输入到这个循环FIFO中。

另外:尝试在调用audio stop之后等待一秒钟左右,然后再更改参数或重新启动。在调用stop时和硬件实际停止时之间似乎存在延迟。

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

https://stackoverflow.com/questions/35421190

复制
相关文章

相似问题

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