Swift:试图迅速改变语音到iPhone的声音时,iPhone的音量很低

我正在尝试语音识别示例。 如果我开始通过麦克风来识别我的发言,那么我试图让iPhone识别文本的声音。 这是工作。 但是,声音太低了。 你能指导我吗?

而不是,如果我正在尝试简单的button操作,与AVSpeechUtterance代码,音量是正常的。

之后,如果我使用startRecognise()方法,则音量太低。

我的代码

 func startRecognise() { let audioSession = AVAudioSession.sharedInstance() //2 do { try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) try audioSession.setMode(AVAudioSessionModeDefault) try audioSession.setMode(AVAudioSessionModeMeasurement) try audioSession.setActive(true, with: .notifyOthersOnDeactivation) try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) } catch { print("audioSession properties weren't set because of an error.") } recognitionRequest = SFSpeechAudioBufferRecognitionRequest() guard let inputNode = audioEngine.inputNode else { fatalError("Audio engine has no input node") } guard let recognitionRequest = recognitionRequest else { fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object") } recognitionRequest.shouldReportPartialResults = true recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in if result != nil { let lastword = result?.bestTranscription.formattedString.components(separatedBy: " ").last if lastword == "repeat" || lastword == "Repeat"{ self.myUtterance2 = AVSpeechUtterance(string: "You have spoken repeat") self.myUtterance2.rate = 0.4 self.myUtterance2.volume = 1.0 self.myUtterance2.pitchMultiplier = 1.0 self.synth1.speak(self.myUtterance2) // HERE VOICE IS TOO LOW. } } }) let recordingFormat = inputNode.outputFormat(forBus: 0) //11 inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in self.recognitionRequest?.append(buffer) } audioEngine.prepare() do { try audioEngine.start() } catch { print("audioEngine couldn't start because of an error.") } } 

我的button动作

 func buttonAction() { self.myUtterance2 = AVSpeechUtterance(string: "You are in button action") self.myUtterance2.rate = 0.4 self.myUtterance2.volume = 1.0 self.myUtterance2.pitchMultiplier = 1.0 self.synth1.speak(self.myUtterance2) // Before going for startRecognise() method, //I tried with buttonAction(), //this time volume is normal. //After startRecognise() method call, volume is too low in both methods. } 

最后,我得到了解决scheme。

 func startRecognise() { let audioSession = AVAudioSession.sharedInstance() //2 do { try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) try audioSession.setMode(AVAudioSessionModeDefault) //try audioSession.setMode(AVAudioSessionModeMeasurement) try audioSession.setActive(true, with: .notifyOthersOnDeactivation) try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) } catch { print("audioSession properties weren't set because of an error.") } ... } 

一旦我评论这一行,请try audioSession.setMode(AVAudioSessionModeMeasurement) ,音量正常。