#objective-c #mac-catalyst #avspeechsynthesizer
Вопрос:
У меня есть следующий код для произнесения простого текста. На iOS код работает хорошо, и текст произносится. Но в приложении Mac это не произносится.
//Setting up text to speech
synthesizer = [[AVSpeechSynthesizer alloc]init];
synthesizer.delegate = self;
if (synthesizer) {
if ([synthesizer isSpeaking]) {
[synthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];;
}
}
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:text];
[utterance setRate:0.5f];
utterance.postUtteranceDelay = 0;
//utterance.voice = [AVSpeechSynthesisVoice voiceWithIdentifier:AVSpeechSynthesisVoiceIdentifierAlex];
dispatch_async(dispatch_get_main_queue(), ^{
[self->synthesizer speakUtterance:utterance];
});
В iOS запускается следующий метод делегирования
-(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance{
}
но в приложении Mac он переходит прямо к didCancelSpeechUtterance
-(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance *)utterance{
}
И я не знаю, как найти ошибку, вызвавшую проблему. Любая помощь в этом будет признательна.
Ответ №1:
Эта проблема была исправлена после указания языка
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en"];
в iOS он отлично работает без указания языка. Но на Mac catalyst, я думаю, это необходимо.