iOS无法在两个蓝牙设备之间切换

时间:2020-02-29 10:40:32

标签: ios swift avaudiosession

当用户输入特定字符时,我想在两个连接的蓝牙设备/扬声器之间切换。但是,当我调用“ changeToSecondBleSpeaker()”时,以下代码不会切换。

在我的情况下,第一个是Beats耳机,第二个是UE BOOM 2。 它仅通过UE BOOM 2(secondBle)播放声音,但不切换到Beats耳机(firstBle)。

有人知道为什么吗?预先感谢!

    @IBOutlet weak var textField: UITextField!
    private let synthesizer = AVSpeechSynthesizer()
    let audioSession = AVAudioSession.sharedInstance()
    var firstBle:AVAudioSessionPortDescription?
    var secondBle:AVAudioSessionPortDescription?

    var currentSpeaker: speaker = .firstBle

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.textField.delegate = self
        do {
            try audioSession.setCategory(AVAudioSession.Category.playAndRecord, mode: .default, options: .allowBluetooth)
        } catch let error as NSError {
            print("setCategory error: \(error.localizedDescription)")
        }
        firstBle = audioSession.availableInputs?.first(where: {return $0.portType == .bluetoothHFP && $0.portName.contains("Beats")})
        secondBle = audioSession.availableInputs?.first(where: {return $0.portType == .bluetoothHFP && $0.portName.contains("BOOM")})
        changeToFirstBleSpeaker()
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        if string == "w" {
            changeToSecondBleSpeaker()
            speak(text: textField.text!)
        } else {
            if currentSpeaker != .firstBle {
                changeToFirstBleSpeaker()
            }
            speak(text: string)
        }

        return true
    }

    func changeToFirstBleSpeaker() {
        do {
            if let firstBleSpeaker = firstBle {
                try audioSession.setActive(false)
                try audioSession.setPreferredInput(firstBleSpeaker)
                try audioSession.setActive(true)
                currentSpeaker = .firstBle
                print("switched to \(firstBleSpeaker.portName)")
            } else {
                print("Error connecting to firstBleDevice")
                currentSpeaker = .firstBle
            }
        } catch {
            print("Error connecting to firstBleDevice")
            currentSpeaker = .firstBle
        }
    }


    func changeToSecondBleSpeaker() {
       do {
           if let secondBleSpeaker = secondBle {
               try audioSession.setActive(false)
               try audioSession.setPreferredInput(secondBleSpeaker)
               try audioSession.setActive(true)
               currentSpeaker = .secondBle
            print("switched to \(secondBleSpeaker.portName)")
           } else {
               print("Error connecting to secondBleSpeaker")
               currentSpeaker = .firstBle
           }
       } catch {
            print("Error connecting to secondBleSpeaker")
            currentSpeaker = .firstBle
       }
    }

    func speak(text: String) {
        let utterance = AVSpeechUtterance(string: text)
        utterance.rate = 0.5
        utterance.voice = AVSpeechSynthesisVoice(identifier: "com.apple.ttsbundle.Markus-premium")
        print(utterance.description)

        synthesizer.speak(utterance);
    }


编辑: 最后连接的扬声器播放声音。但是我不能在它们之间切换。有可能吗?

0 个答案:

没有答案
相关问题