1

我的代码用一种语言讲文本并切换到另一种语言(如有必要)。问题是,只说第一句话。我需要有可能用一种以上的语言说更多的句子。我需要不同的语言,这需要新的初始化。如果第一句话很短,它有时也会说第二句话。第三个从来没有说过。一个建议?

- (void) StartMyProgramm {
SpeakTextPrefix = @"This is the first Line";
SpeakTextTitle = @"De Titel van het boek is";
SpeakTextSuffix = @"Wie komme ich hier wieder raus";
if (![SpeakTextPrefix isEqual: @""]) {
    [self speakText:SpeakTextPrefix];

} else if (![SpeakTextTitle  isEqual: @""]) {
    [self speakText:SpeakTextTitle];

} else if (![SpeakTextSuffix  isEqual: @""]) {
    [self speakText:SpeakTextSuffix];

}
}
- (void) speakText:(NSString *)textToSpeak {
if (![textToSpeak  isEqual: @""]) {
    //Recognize Language
    NSArray *tagschemes = [NSArray arrayWithObjects:NSLinguisticTagSchemeLanguage, nil];
    NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagschemes options:0];
    [tagger setString:textToSpeak];
    NSString *language = [tagger tagAtIndex:0 scheme:NSLinguisticTagSchemeLanguage tokenRange:NULL sentenceRange:NULL];        
    //Speak
    AVSpeechSynthesisVoice *voice = nil;
    AVSpeechUtterance *utterance = nil;
    voice = [AVSpeechSynthesisVoice voiceWithLanguage:language];
    utterance = [[AVSpeechUtterance alloc] initWithString:textToSpeak];
    utterance.voice = voice;
    utterance.rate = 0.3;
    utterance.pitchMultiplier = 0.8;
    [self.synthesizer speakUtterance:utterance];
}
}
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance {
if (![SpeakTextTitle  isEqual: @""]) {
    [self speakText:SpeakTextTitle];
    SpeakTextTitle = @"";
} else if (![SpeakTextSuffix  isEqual: @""]) {
    [self speakText:SpeakTextSuffix];
    SpeakTextSuffix = @"";
} else {
    //do something else
}
}
4

1 回答 1

1

同样的事情也发生在我身上。我猜这是 iOS 8 SDK 上的一个错误。

我实际上通过设置preUtteranceDelay为 0.05(或更多)属性找到了解决方法AVSpeechUtterance

于 2014-10-28T14:16:37.647 回答