音频队列服务和iPhone系统声音的时间安排

时间:2012-02-22 20:34:24

标签: ios audio audioqueueservices audioqueue

我正在使用音频队列服务分析iPhone / iPod Touch上的传入音频。分析仪所需的行为归结为:当应用程序变为活动状态时,开始分析;当应用程序发送到后台时,停止分析。

我正在使用一种直接的方法,每当App状态发生变化时,使用AppDelegate启动和停止分析器。

以下是一些代码:

- (void)applicationWillResignActive:(UIApplication *)application {

    AudioQueueFlush(_aqRef);
    AudioQueueStop(_aqRef, true);
    AudioQueueDispose(_aqRef, true);
}


- (void)applicationDidBecomeActive:(UIApplication *)application {

    AudioQueueNewInput(&_formatDescription, _renderCallback, NULL, NULL, NULL, 0, &_aqRef);
    AudioQueueAllocateBuffer(_aqRef, _aqBufferSize, &_aqBufferRef);
    AudioQueueEnqueueBuffer(_aqRef, _aqBufferRef, 0, NULL);
    AudioQueueStart(_aqRef, NULL);
}

所有变量都已初始化并正在运行 - 将其视为给定和测试。我知道,每次都不应该处理和分配队列和缓冲区,但是现在它没有区别,而且这种方式更完整。

以下是发生的事情:

步骤1)启动应用程序,音频队列启动,Bob是你的叔叔。

步骤2)按下电源按钮,应用程序暂停。但是你没有听到锁定声音,因为音频队列似乎仍然阻止系统声音。但是,有时它确实会出现,主要是在应用程序首次启动之后,但这并不可靠。第一次小故障。

步骤3)按住主屏幕按钮并解锁手机。同样,您将听不到解锁手机的系统声音,因为音频队列已经接管。但是,您可能会听到一小段解锁声。有时。也不可靠。第二次故障。

步骤4)按下主页按钮并将应用程序发送到后台。应用程序消失后大约一秒钟,系统会记住它在步骤3中无法播放解锁声音并立即播放。全量。那真是太糟糕了。

这引出了两个问题:

问题1):当按下电源按钮时,我没有看到任何其他方法来阻止音频队列,而不是在applicationWillResignActive:中。我在这里缺少什么?我对锁定声音丢失感到满意,但我很高兴能够了解任何其他方法使声音可靠(或不合理)。

问题2):第4步中的延迟解锁声音令我头疼。一种防止这种情况的简单方法是延迟音频队列的启动,以便可以不受阻碍地播放解锁声音。但这似乎是一个黑客,如果有人能指出我更好的方向,我会成为一个更快乐的编码器。

谢谢/ Andreas

0 个答案:

没有答案