0

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

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

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

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

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

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

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

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

4

1 回答 1

0

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

于 2010-02-17T23:32:56.100 回答