내 코드는 한 언어로 된 텍스트를 말하고 다른 언어로 전환합니다 (필요한 경우). 문제는 첫 번째 문장 만 사용된다는 것입니다. 하나 이상의 언어로 더 많은 문장을 말할 필요가 있습니다. 다른 언어가 필요하며 새로운 초기화가 필요합니다. 첫 번째 문장이 매우 짧은 경우 두 번째 문장을 읽는 경우가 있습니다. 세 번째는 결코 말하지 않는다. 제안 사항?AVSpeechSynthesizer를 사용하여 다른 언어로 문장 추가
- (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
}
}
동일한 문제가있었습니다. 이 질문에서 논의 된 해결 방법 (비어있는 말투를 먼저 말하십시오)이 저에게 효과적이었습니다. http://stackoverflow.com/questions/24197952/avspeechsynthesizer-with-ios8 – chr
Tnx, 좋은 생각, 시도해 볼게요! –