ios10から追加されたSpeech frameworkの音声認識を用いて、英語のリスニング教材の認識を試みています。文と文の間にしばらく空白の時間があっても、文末に「.」(ピリオド)や「,」(カンマ)は出力されない仕様になっているようです。短文の認識なら良いですが、長文の認識ですと文末が分からないと読みづらくなってしまいます。文末を識別する方法はないでしょうか?
CoreAudioで音声波形のポインタ配列を参照して波形として0が続いたら、一文の終わりとして音声を分割するという方法はあると思うのですが、他にはないでしょうか?
以下のコードは与えられたurlの音声データを認識が終わったら、プリントするものになっています。
siwft
1import Speech 2let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en_US"))! 3 4func recognizeFile(url:URL) { 5 guard SFSpeechRecognizer() != nil else { 6 // A recognizer is not supported for the current locale 7 return 8 } 9 if !speechRecognizer.isAvailable { 10 // The recognizer is not available right now 11 return 12 } 13 let request = SFSpeechURLRecognitionRequest(url: url) 14 speechRecognizer.recognitionTask(with: request, delegate: self) 15} 16func speechRecognitionTask(_ task: SFSpeechRecognitionTask, 17 didFinishRecognition recognitionResult: SFSpeechRecognitionResult) { 18 print(recognitionResult.bestTranscription.formattedString) 19 }
あなたの回答
tips
プレビュー