Вы не проверяете isFinal
свойство из SFSpeechRecognitionResult
. Из документации:
Логическое значение, которое указывает, завершено ли распознавание речи и являются ли транскрипции окончательными.
До тех пор, пока транскрипция не будет завершена, может прибыть тот же сегмент снова с отметкой времени обратно в 0. Если вы проверите свой результат, вы увидите, что у вас есть много повторяющихся сегментов.
Вам нужно изменить свой обработчик:
[speechRecognizer recognitionTaskWithRequest: urlRequest resultHandler: ^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error){
if (result.final && !error)
{
NSString *transcriptText = result.bestTranscription.formattedString;
NSLog(@"Transcript: %@", transcriptText);
}
if (error) { /* ... */ }
}];