I am trying to run two SFSpeechRecognizer simultaneously with different languages.
I'm aware of these links, but they want something different or the answer doesn't work:
So I tried the following:
var audioEngine = AVAudioEngine()
var speechRecognizer1: SFSpeechRecognizer? = SFSpeechRecognizer(locale: Locale(identifier: "en-GB"))
var speechRecognizer2: SFSpeechRecognizer? = SFSpeechRecognizer(locale: Locale(identifier: "it-IT"))
var speechAudioBufferRecognitionRequest = SFSpeechAudioBufferRecognitionRequest()
var speechRecognitionTask1: SFSpeechRecognitionTask!
var speechRecognitionTask2: SFSpeechRecognitionTask!
...
let node = self.audioEngine.inputNode
let recordingFormat = node.outputFormat(forBus: 0)
node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat, block: { (buffer, time) in
self.speechAudioBufferRecognitionRequest.append(buffer)
})
self.audioEngine.prepare()
do {
try audioEngine.start()
} catch {
print("Error")
return
}
guard let myRecognition = SFSpeechRecognizer() else {
print("Error")
return
}
if(!myRecognition.isAvailable) {
print("Error")
return
}
self.speechRecognitionTask1 = self.speechRecognizer1?.recognitionTask(with: self.speechAudioBufferRecognitionRequest, resultHandler: { (response, error) in
if(response != nil) {
guard let response = response else {
if let error = error {
print("Error")
return
} else {
print("Error")
return
}
}
var message = response.bestTranscription.formattedString
})
self.speechRecognitionTask2 = self.speechRecognizer2?.recognitionTask(with: self.speechAudioBufferRecognitionRequest, resultHandler: { (response, error) in
if(response != nil) {
guard let response = response else {
if let error = error {
print("Error")
return
} else {
print("Error")
return
}
}
var message = response.bestTranscription.formattedString
})
This gave me the error: SFSpeechAudioBufferRecognitionRequest cannot be re-used
So I tried to create two instances and initialized them by:
node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat, block: { (buffer, time) in
self.speechAudioBufferRecognitionRequest1.append(buffer)
self.speechAudioBufferRecognitionRequest2.append(buffer)
})
But this also didn't work. There was no error, but one speechRecognition just overwrote the other...
I tried some other stuff like changing the bus etc. but was not successful...