Flite non dispone di un modo per legare per vedere quale parola che viene detto quando. Quello che fa è usare il testo per generare un file audio e semplicemente riprodurlo. È possibile creare una classe personalizzata per gestire le informazioni trasmesse a TextToSpeech. La classe separerebbe la stringa in parole separate e poi le passerebbe al flite.
Se si guarda in fliteTTS.m, nel metodo speakText: si può vedere che crea un file wav e quindi un AVPlayer riproduce il file wav. quello che potresti fare è cambiare quel metodo in modo che invece di riprodurre il file, restituirà l'URL al file wav alla tua classe personalizzata (che potrebbe salvarli in un array).
Quindi fare in modo che la classe personalizzata suoni i suoni in ordine e ogni volta che si riproduce il clip successivo, evidenziare la nuova sezione di testo.
Così, invece di SpeakText:
-(NSString *)urlForSpeech:(NSString *)text
{
NSMutableString *cleanString;
cleanString = [NSMutableString stringWithString:@""];
if([text length] > 1)
{
int x = 0;
while (x < [text length])
{
unichar ch = [text characterAtIndex:x];
[cleanString appendFormat:@"%c", ch];
x++;
}
}
if(cleanString == nil)
{ // string is empty
cleanString = [NSMutableString stringWithString:@""];
}
sound = flite_text_to_wave([cleanString UTF8String], voice);
NSArray *filePaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *recordingDirectory = [filePaths objectAtIndex: 0];
// Pick a file name
NSString *tempFilePath = [NSString stringWithFormat: @"%@/%s", recordingDirectory, "temp.wav"];
// save wave to disk
char *path;
path = (char*)[tempFilePath UTF8String];
cst_wave_save_riff(sound, path);
return tempFilePath;
}
per evidenziare il testo, come AVPlayer riproduce attraverso i file, utilizzare:
[textView select:self];
textView.selectedRange = aSelectedRange;
Dove aSelectedRange è la gamma della stringa che si desidera evidenziare.
Non ho familiarità con AVPlayer, quindi non posso davvero aiutarti a configurarlo, ma ci sono alcuni esempi molto buoni sul sito degli sviluppatori di Apple. Ecco cosa dovresti guardare: link
Basta non dimenticare di cancellare i file audio quando hai finito con loro.