【发布时间】: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