gpt4 book ai didi

iOS:使用 AudioUnitRender 的模拟器中存在错误

转载 作者:行者123 更新时间:2023-11-29 11:21:55 24 4
gpt4 key购买 nike

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

错误是这样的:

加载苹果的 AurioTouch 示例项目。

并简单地打印出渲染回调(在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);

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

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

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

无论如何,很确定这是一个错误。我要继续归档。如果有人可以阐明一些问题,请这样做!

最佳答案

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

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

The simulator will act wildly different setup to setup as it relies on your host audio gear, which may in your case be a third-party interface. I have seen the simulator refuse a reasonable power of 2 size because of the device. I have not been able to use audio in the simulator reliably.
James is telling me that I am being foolish but in practice I have been able to rely on the original configured buffer size without having it change on me.

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

关于iOS:使用 AudioUnitRender 的模拟器中存在错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6633412/

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