将音频呼叫扬声器转换为麦克风



我正在开发一个应用程序,其中我正在使用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)
}

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

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

目前,如果overrideOutputAudioPort是扬声器,则输入是扬声器,反之亦然

您还可以参考最受欢迎的应用程序,例如WhatsApp,Google Duo,不存在此类选项。

希望对你有帮助

Swift 5 - 使用以下代码片段

连接到房间后更改音频路由。

func moveToMic(( {

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

最新更新