Синтезирование речи
При помощи объекта NSSpeechSynthesizer можно подать заявку, произносят слово, фразу или предложение пользователю. Эта синтезированная речь является существенным средством тем пользователям с вниманием или ограниченными возможностями зрения. Также полезно, когда Вы хотите привлечь внимание пользователя к чему-то важному, когда он или она мог бы быть отвлечен чем-то еще на экране.
Используя объект NSSpeechSynthesizer «объявить» текст просто. Вы инициализируете объект с речью и отправляете a startSpeakingString:
обменивайтесь сообщениями к нему, передающий в объекте NSString представление текста для разговора. Дополнительно, когда разговор заканчивается, можно реализовать один из нескольких методов делегации или чтобы сопровождать слова, произнесенные некоторым интерактивным способом или сделать что-то специализированное.
Речь и инициализация
Существенный атрибут объекта NSSpeechSynthesizer является речью. Синтез речи определяет много речи для OS X, каждого с его собственными распознаваемыми речевыми характеристиками (такими как род и возраст). Можно просмотреть список системной речи и установить речь по умолчанию в области Default Voice Речевых установок системы.
Если Вы инициализируете экземпляр NSSpeechSynthesizer с помощью init
метод, речь по умолчанию используется. Если по некоторым причинам Вы хотите другую речь, инициализируете экземпляр с методом NSSpeechSynthesizer initWithVoice:
. Можно изменить речь в любое время с setVoice:
метод.
Путем вызова методов класса availableVoices
и defaultVoice
, можно получить список системной речи и текущей речи по умолчанию, соответственно. Каждая речь имеет многократные атрибуты, включая имя, возраст, род и язык. Путем вызова метода класса attributesForVoice:
, можно получить объект NSDictionary для определенной речи, содержащей эти атрибуты. (Параметром этого метода является речевой идентификатор, строка формы com.apple.speech.synthesis.voice.
voiceName.) См. справочную документацию для NSSpeechSynthesizer для допустимых ключей словаря.
Говорящий текст
Как только Вы инициализировали объект NSSpeechSynthesizer, отправьте startSpeakingString:
обменивайтесь сообщениями к нему, передавая его текст для разговора. Перечисление 1 иллюстрирует инициализацию объекта с речью по умолчанию и затем до разговора строки, выбранной от текстового поля (phraseField
), устанавливая речь в соответствии с требованиями пользователем в раскрывающемся списке (voiceList
).
Перечисление 1 Используя объект NSSpeechSynthesizer
- (id)init { |
self = [super init]; |
if (self) { |
synth = [[NSSpeechSynthesizer alloc] init]; //start with default voice |
//synth is an ivar |
[synth setDelegate:self]; |
} |
return self; |
} |
- (IBAction)speak:(id)sender |
{ |
NSString *text = [phraseField stringValue]; |
NSString *voiceID =[[NSSpeechSynthesizer availableVoices] objectAtIndex:[voiceList indexOfSelectedItem]]; |
[synth setVoice:voiceID]; |
[synth startSpeakingString:text]; |
} |
Обратите внимание на то, что этот пример кода устанавливает делегата к объекту NSSpeechSynthesizer в init
метод. NSSpeechSynthesizer определяет три метода, чтобы позволить его делегату оказываться замешанным во время разговора о строке текста и после разговора о строке:
speechSynthesizer:willSpeakWord:ofString:
, вызванный, прежде чем каждое слово строки произнесено, позволяет делегату (например), визуально выделять каждое слово, поскольку на этом говорят.speechSynthesizer:WillSpeakPhoneme:
, вызванный, прежде чем каждая фонема объявлена, позволяет делегату (например), анимировать рот, объявляя фонему.speechSynthesizer:didFinishSpeaking:
когда разговор о строке заканчивается, вызывается. Второй параметр этого метода указывает, говорили ли на тексте полностью или разрушили (как это могло бы произойти, если пользователь отклоняет разговорное предупреждение).Когда разговор прекращается, Вы могли бы реализовать этот метод для корректировки пользовательского интерфейса соответственно. Перечисление 2 иллюстрирует одну такую реализацию.
Перечисление 2 реализация speechSynthesizer:didFinishSpeaking:
- (void)speechSynthesizer:(NSSpeechSynthesizer *)sender didFinishSpeaking:(BOOL)finishedSpeaking |
{ |
[_textToSpeechExampleTextView setSelectedRange:_orgSelectionRange]; // Set selection length to zero. |
[_textToSpeechExampleSpeakButton setTitle:@"Start Speaking"]; |
[_saveButton setTitle:@"Save As File..."]; |
[_textToSpeechExampleSpeakButton setEnabled:YES]; |
[_saveButton setEnabled:YES]; |
[_voicePop setEnabled:YES]; |
} |