【问题标题】:After interruption, delayed audio route change notifications when recording中断后,录制时延迟音频路由更改通知
【发布时间】:2010-01-28 13:34:37
【问题描述】:

我的 iPhone 应用程序要求我知道用户何时插入/未插入耳机。这很容易。带有监听 kAudioSessionProperty_AudioRouteChange 的回调的 AudioSessionAddPropertyListener。

当事情发生时,我用 NSLog 写日志。用户插入耳机?在 gdb 控制台中获取通知和一行。用户拔下耳机?同上。

同时,我通过启动录音队列来感知环境的噪音水平。这也很有效:我可以很好地获取麦克风噪音水平并监听音频路径的变化。

我发现在中断后,我重新激活了音频会话并将音频类别恢复为 kAudioSessionCategory_RecordAudio,音频路由通知有点混乱。

当我插入耳机时,我看不到任何通知。当我拔下耳机时,我会快速连续看到“已插入”通知和“已拔出”通知。

就像“插入”通知延迟了,当“未插入”通知到达时,待处理通知队列被刷新。

我做错了什么?如何正确恢复音频会话以获得及时通知?

编辑:iPhone OS 3.1.2,在 iPhone 3G 上运行。我正在运行一个使用 3.0 SDK 编译的程序(来自 XCode 3.1.2)。

【问题讨论】:

  • 抱歉:已编辑问题以添加操作系统/硬件版本。

标签: iphone audioqueueservices audiosessionservices


【解决方案1】:

我有同样的问题,但有更多信息,因此有问题要问你。 您是否使用 OpenAL 来获得像我一样的声音。 你是否也像我一样支持 iPod 音乐。 我在石英菜单屏幕上的耳机断开连接很好,但在 glView 游戏屏幕上它大多像你一样失败。有时第一次断开连接有效,然后失败。有时重新连接也无法触发,所以当我切换到石英屏幕时,我会遇到六个断开连接对话框,我必须点击。这是 OpenAL 声音。 使用 iPod 音乐,我切换到 NSNotificationCenter MPMusicPlayerControllerPlaybackStateDidChangeNotification 通知,这有效,但仅在播放 iPod 音乐时。 在 iPhone 和 iTouch 上构建到 OS 3.1.0 的 OS 3.1.3。 查看您从 AudioSessionInitialize() 返回的错误代码,这是我的问题,它没有被首先调用,并且失败了。 编辑:修复失败,这是一个间歇性/随机问题,似乎是由高 CPU 负载引起的。

【讨论】:

  • 我没有使用 OpenAL,只是直接的音频会话/音频队列调用。此外,没有 iPod 音乐!我记录失败,并且 AudioSessionInitialize() 肯定表示成功。 (它肯定会在任何其他音频会话/音频队列函数之前被调用。
猜你喜欢
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 2015-08-15
  • 2015-11-01
  • 2013-06-12
相关资源
最近更新 更多