AVSpeechSynthesizer代理在iOS 11中无法呼叫

dgenwo3n  于 2023-02-17  发布在  iOS
关注(0)|答案(2)|浏览(181)

这是我的文本语音转换代码。在iOS 11下一切都很好。但是在iOS 11中,委托方法没有被调用。
AVSpeechSynthesizerDelegate设置准确。(因为它在iOS 11下工作)
按下按钮

AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc]init];
synthesizer.delegate = self;

AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:stringToSpeech];
[utterance setRate:AVSpeechUtteranceDefaultSpeechRate];
[utterance setPitchMultiplier:1];
[utterance setVolume:1];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
[synthesizer speakUtterance:utterance];

这些是我实现的委托方法。

-(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance {
    NSLog(@"finished");
}

-(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didStartSpeechUtterance:(AVSpeechUtterance *)utterance{
    NSLog(@"Started");
}

有人遇到过这个问题吗?任何帮助都将不胜感激。
我在iOS 11.0.3上测试,使用Xcode 9.0

db2dz4w8

db2dz4w81#

您的synthesizer对象必须是一个属性才能工作:)。
或者创建AVSpeechSynthesizer示例,即synthesizer,如下所示:

@property (strong, nonatomic) AVSpeechSynthesizer *synthesizer;

或者像这样的读写。

@property (readwrite, strong, nonatomic) AVSpeechSynthesizer *synthesizer;

如果管用就告诉我。

omqzjyyz

omqzjyyz2#

在我的例子中,我是用Swift写的。最后我发现委托方法必须标记为公共的,然后我得到了回调。

相关问题