将音频通话扬声器转换为麦克风

时间:2018-09-27 13:34:13

标签: swift avaudioplayer

我正在开发一个应用,其中我正在使用twilio进行视频通话。现在,当我进行视频通话时,它可以正常运行。但是双方的声音都在扬声器上,我想给用户提供它可以使用扬声器或麦克风讲话的灵活性,我该如何使用Swift做到这一点?我已经搜索过了,它向我显示了此功能,该功能在扬声器中启用和禁用,但不转换为麦克风。我如何将扬声器声音转换为麦克风或将麦克风转换为扬声器?

 @IBAction func speakerBtnTapped(_ sender: Any) {
    if (self.localAudioTrack != nil) {
        //MARK:- Usage  for Enable
        self.setAudioOutputSpeaker(enabled: true)
    }
    else
    {
        //MARK:- Usage  for Disable
        self.setAudioOutputSpeaker(enabled: false)
    }
}
//MARK:- Manual Speaker Enagle and Disable
func setAudioOutputSpeaker(enabled: Bool)
{
    let session = AVAudioSession.sharedInstance()
    var _: Error?
    try? session.setCategory(AVAudioSessionCategoryPlayAndRecord)
    try? session.setMode(AVAudioSessionModeVoiceChat)
    if enabled {
        try? session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } else {
        try? session.overrideOutputAudioPort(AVAudioSessionPortOverride.none)
    }
    try? session.setActive(true)
}

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您想提供一个功能,用户可以选择语音输入方式,扬声器或麦克风,那么该功能在现有的iOS技术中不可用

没有方法overrideIutputAudioPort,只有您可以overrideOutputAudioPort,然后根据您的选择将传入的语音发送到扬声器或麦克风。

  

现在,如果overrideOutputAudioPort是扬声器,那么输入是扬声器,反之亦然

您还可以引用最受欢迎的应用,例如WhatsAppGoogle Duo,但不存在此类选项。

希望有帮助

答案 1 :(得分:0)

Swift 5-使用以下代码段

///在连接到会议室后更改音频路由。

func moveToMic(){

    audioDevice.block = {
        DefaultAudioDevice.DefaultAVAudioSessionConfigurationBlock()
        do {
            try AVAudioSession.sharedInstance().setMode(.voiceChat)
            try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
        } catch {
            print(error)
        }
    }

    audioDevice.block();

}