AVSpeechSynthesizer не работает в приложении Mac catalyst

#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, я думаю, это необходимо.