4
迅速

にiPhoneの声にスピーチを変更しようとすると、iPhoneの音量が低いです。私がマイクで私のスピーチを認識し始めたなら、私はその認識されたテキストのiPhoneの声を聞こうとしました。それは働いている。しかし、声は低すぎます。これで私を導くことができますか?スウィフト:私は音声認識サンプルをしようとしています

よりもむしろ私は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.") 
    } 
} 

マイボタンアクション

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. 
} 
+0

AVAudioSessionCategoryOptionDefaultToSpeaker - これを追加 – YaBoiSandeep

答えて

9

は最後に、私は解決策を得ました。

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)はボリュームが正常に機能しています。