【问题标题】:iOS: Bug in the simulator using AudioUnitRenderiOS:使用 AudioUnitRender 的模拟器中的错误
【发布时间】:2011-07-09 07:31:05
【问题描述】:

我遇到了另一个 iOS 模拟器错误。我的问题是,有什么解决方法吗?

错误是这样的:

加载苹果的 AurioTouch 示例项目。

并简单地打印出 render 回调(在 aurioTouchAppDelegate.mm 中)接收到的帧数

static OSStatus PerformThru(
                            void                        *inRefCon, 
                            AudioUnitRenderActionFlags  *ioActionFlags, 
                            const AudioTimeStamp        *inTimeStamp, 
                            UInt32                      inBusNumber, 
                            UInt32                      inNumberFrames, 
                            AudioBufferList             *ioData)
{
    printf( "%u, ", (unsigned int)inNumberFrames );

我得到以下输出:

471, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, ...

但是,如果您在下一行注释掉对 AudioUnitRender 的调用:

{
    printf( "%u, ", (unsigned int)inNumberFrames );

    aurioTouchAppDelegate *THIS = (aurioTouchAppDelegate *)inRefCon;
    OSStatus err = 0; // AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);

它现在每次发送适当数量的浮点数。

471, 470, 471, 470, 470, 471, 470, 471, 470, 470, 471, 470, 471, 470, 470, 471, 470,

我的另一个问题是:为什么会有 470、471 这样的随机数?我在某处读到,您通过指定其持续时间来隐式指定缓冲区长度,并将缓冲区长度设置为 2 的幂,从而产生此持续时间的最佳近似值。但经验证据表明事实并非如此。

无论如何,很确定这是一个错误。我要去存档了。如果有人能解释一下,请做!

【问题讨论】:

  • 我无法为您提供具体的答案,但如果我从 iOS 音频中了解到一件事,那就是模拟器使用了完全不同的堆栈,这会导致各种怪异。如果我是你,我会在设备上进行所有测试。

标签: ios core-audio simulator


【解决方案1】:

一般来说,模拟器错误的解决方法是在设备上测试应用程序。 iOS Simulators 只是一个模拟器,而不是模拟器。

iOS 模拟器有一些奇怪的错误。根据 Christopher Penrose 的这篇文章,这可能与缓冲区大小有关:

模拟器的设置与设置完全不同,因为它依赖于您的主机音频设备,在您的情况下可能是第三方接口。我已经看到模拟器因为设备而拒绝了 2 大小的合理功率。我无法在模拟器中可靠地使用音频。
James 告诉我我很愚蠢,但实际上我已经能够依赖原始配置的缓冲区大小而无需更改它。

链接可能更有用的信息:http://osdir.com/ml/coreaudio-api/2010-04/msg00150.html

【讨论】:

    【解决方案2】:

    如果您想让音频与您的模拟器一起工作,您需要确保在 OS X 的音频/midi 设置工具中将您的采样率设置为 44.1k。 AVAudioSession/Audio Services 将在使用模拟器时将您的采样率报告为 44.1k,无论它实际上是什么。

    通过将您的 mac 的采样率设置为 44.1k,您将在每次回调中获得一致的 inNumberFrames(默认为 1024),尽管据称这仍然可以由系统更改(例如,应用程序进入后台)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2022-01-06
      • 1970-01-01
      • 2011-05-18
      • 2015-01-21
      相关资源
      最近更新 更多