iOS Reset Reset с другим языком
У меня есть текущая запись распознавания речи, которая работает хорошо - вы говорите, что хотели бы, и все получилось. Достаточно точный тоже для чего стоит...
У меня проблема такая:
Если я пытаюсь изменить язык после остановки и запуска, происходит сбой со следующими ошибками
2018-05-23 00:51:51.878921-0400 APP[1237:332833] Speech error: The operation couldn’t be completed. (kAFAssistantErrorDomain error 209.) 2018-05-23 00:51:51.922965-0400 APP[1237:332833] Speech error: Corrupt
Однако, если я остановлю запись и произвожу сброс на исходном языке, все будет работать нормально. Например, даже начиная с корейского, каждый раз, когда я останавливаюсь, переключаюсь на... корейский... затем снова нажимаю старт, все работает. Независимо от того, сколько раз я делаю этот процесс.
Проблема заключается в том, что, продолжая мой пример, если я переключаюсь на другой язык, ДАЖЕ английский, после запуска с корейского, это дает мне эту ошибку (которая содержится в моем recognitionTaskWithRequest
FYI).
Похоже, что начальный язык не имеет отношения к тому, будет ли он работать, если я выберу другой язык, он потерпит неудачу, и когда я выберу тот же начальный язык, он будет работать.
// Note: self.inputLanguageIdentifier is changed when you select a new language.
// I have tested to ensure this ID is correct each time.
// I.E. Korean prints ko-KR, English of course en-US, etc.
NSLocale *locale = [NSLocale alloc] initWithLocaleIdentifier:self.inputLanguageIdentifier]
speechRecognizer = [[SFSpeechRecognizer alloc] initWithLocale:locale];
speechRecognizer.delegate = self;
recognitionRequest = [[SFSpeechAudioBufferRecognitionRequest alloc] init];
AVAudioInputNode *inputNode = audioEngine.inputNode;
recognitionRequest.shouldReportPartialResults = YES;
recognitionTask = [speechRecognizer recognitionTaskWithRequest:recognitionRequest resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {
BOOL isFinal = NO;
if (result && !userDidTapCancel) {
// in the console.
NSLog(@"RESULT:%@", result.bestTranscription.formattedString);
[self updateTextForResult:result.bestTranscription.formattedString];
isFinal = !result.isFinal;
}
if (error) {
NSLog(@"Speech error: %@", error.localizedDescription);
[self stopListening];
}
}];
мой stopListening
это так:
- (void)stopListening {
isListening = NO;
[audioEngine stop];
[recognitionRequest endAudio];
[recognitionTask cancel];
}
ОБНОВИТЬ:
Я обнаружил, что после двухкратного сброса (с сохранением вновь выбранного языка) запись работает, как и ожидалось.
Но в его нынешнем виде я не могу найти решение, которое позволит ему работать сразу после смены языка... странно.