iphone6 *模拟器上的AVAudioSession缓冲持续时间

时间:2016-02-17 21:51:59

标签: buffer avfoundation core-audio avaudiosession

我使用0.0001设置了AVAudioSession秒的首选缓冲持续时间,并且未使用模拟器获取逻辑结果。

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

问题在于,在我的Audio Unit渲染回调中,我总是将512个帧作为inNumberFrames参数进行处理。

在我的设备上,设置首选缓冲区持续时间会导致不同的缓冲区速率。例如,如果我设置self.bufferDuration然后将AVAudioSession设置为0.1,那么我的渲染回调将获得4096inNumberFrames个参数。在模拟器上,它将是512。

我想检查这是否是正常行为(我知道许多事情在模拟器和设备上的工作方式不同),或者这是我假设的问题。

1 个答案:

答案 0 :(得分:2)

请注意,setPreferredIOBufferDuration设置只是首选建议而非硬设置。操作系统在运行时可以自由选择要发送到音频回调的多个帧(实际数据的持续时间乘以采样率),甚至在应用程序在前台运行音频时更改该数字。实际持续时间可能因iOS设备和Mac系统而异。持续时间还可能取决于采样率或格式,音频路由,是否存在当前活动的任何其他后台应用程序音频会话,前一个应用程序使用的音频设置,和/或OSX或iOS版本和版本iOS模拟器。

对于请求的缓冲持续时间0.0053,我似乎在iOS 9.2模拟器上获得512帧,在iPhone 6s上获得256帧(只有后者符合请求,但这将是在所有常见抽样率下都是如此)。某些较旧的iOS设备不会返回低于256的帧数。

假设inNumberFrames将对应于应用程序的首选缓冲持续时间设置,则无效。