iOS录音问题

问题描述
AD的iPad版有一个鼓掌互动的应用。换了前后三套类库,如下:
SCListener:https://gist.github.com/72914
AVAudioRecorder:http://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html
SpeakHere:http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html

问题分析
首先使用SCListener,发现模拟器上正常使用,但是真机不能监听声音。再使用AVAudioRecorder,发现还是有以上真机不能监听的问题。
最后使用SpeakHere,可以监听,但是有一个bug。就是:真机上,声音监听过就不能播放video,而模拟器上一切正常。

问题解决
原来录音和播放使用的是一个通道,需要手动设置当前通道的状态。而模拟器上就可以忽略这种限制。
修改通道为录音的代码如下:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryRecord error:nil];

修改通道为播放的代码如下:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];

播放前修改为播放,录音前修改为录音,一切OK了。

PS:后来发现只要修改对应的通道,AVAudioRecorder在真机上也可以用了。