小编WSW*_*WSW的帖子

使用AVAudioEngine进行音频录制,并设置输出音频端口

为了同时进行可用的播放和录制,我们使用这些方法来设置AVAudioSession类别:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:NULL];
Run Code Online (Sandbox Code Playgroud)

通过这样做,输出音频端口从线路输出扬声器切换到内置扬声器.在循环录制窗口中,我们需要同时从线路输出扬声器和麦克风录音进行播放.要在设置AVAudioSession类别后从线路输出扬声器播放声音,我们使用一种设置输出音频端口的方法:

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];

我们尝试使用AVAudio Engine安排录制和播放.AVAudioEngine连接结构:

//     input->inputMixer->mainEqualizer ->tap
//         0  0                  |0
//                               |
//                               |  
//                               |0             0  0
//     recordPlayerNode?recordMixer?meteringMixer?|
//                   0  1         0  0            | 
//                                                |->mainMixer->out
//                                                |
//                                   volumePlayer?|
//                                             0  1
Run Code Online (Sandbox Code Playgroud)

执行overrideOutputAudioPort后,录制功能将停止在iPhone 6S及更高版本上运行.我们以这种方式进行录制:

if(self.isHeadsetPluggedIn)
{
  volumePlayer.volume = 1;
}
else
{
    volumePlayer.volume = 0.000001;
}

[volumePlayer play];



[mainEqualizer installTapOnBus:0 bufferSize:0 format:tempAudioFile.processingFormat block:^(AVAudioPCMBuffer *buf, AVAudioTime *when)
{ …
Run Code Online (Sandbox Code Playgroud)

objective-c avfoundation ios avaudiosession avaudioengine

7
推荐指数
0
解决办法
764
查看次数