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)
,音量正常。