Распознавание речи
С устройством аудиовхода (таким как микрофон) и NSSpeechRecognizer возражают, что приложение может прислушаться к речевым командам и реагировать на те команды. Распознавание речи является существенным средством для пользователей с физической нетрудоспособностью, ограничивающей их использование клавиатуры и мыши. Это может также быть удобство для всех пользователей, позволив им управлять приложением, не вынуждая их отвлечь внимание от того, что они в настоящее время продолжают работать.
Служба Speech Recognition централизованной системы активируется в системе каждый раз, когда приложение (включая перечисленных в области Speech Recognition Установок системы) начинает слушать посредством любого Распознавания речи API, включая те из NSSpeechRecognizer. Когда распознавание речи активируется, экранный микрофон, и (дополнительно) окно Speech Commands появляется. Окно Speech Commands перечисляет текущие команды, которые могут быть даны, а также подтверждения из приложений, реагировавших на недавние команды. Рисунок 1 показывает то, на что микрофон и окно Speech Commands похожи (в контексте Почтового приложения).
Интеграция распознавания речи в приложение Какао проста. Важные шаги включают указание команд для прислушиваний и затем слушание и ответ на те команды. Остаток от этой статьи входит в каждый из этих шагов подробно.
Подготовка объекта NSSpeechRecognizer
Для подготовки NSSpeechRecognizer к использованию Вы должны:
Выделите и инициализируйте экземпляр NSSpeechRecognizer.
Установите команды, что объект должен прислушаться к использованию
setCommands:
метод.Установите делегата к объекту NSSpeechRecognizer.
Перечисление 1 показывает, как Вы могли бы инициализировать объект NSSpeechRecognizer.
Перечисление 1 , Подготавливающее объект NSSpeechRecognizer
- (id)init { |
self = [super init]; |
if (self) { |
NSArray *cmds = [NSArray arrayWithObjects:@"Sing", @"Jump", @"Roll over", nil]; |
recog = [[NSSpeechRecognizer alloc] init]; // recog is an ivar |
[recog setCommands:cmds]; |
[recog setDelegate:self]; |
} |
return self; |
} |
Команды являются словами или короткими фразами, инкапсулировавшими как объекты NSString, которые являются определенными для приложения. Рекомендуемая длина фразы является тремя - шестью словами. Если Ваше приложение имеет много команд, можно использовать setDisplayedCommandsTitle:
метод для группировки их в окне Speech Commands под подзаголовками.
Прислушивание и ответ на команды
Прежде чем Ваше приложение может обработать речевые команды, необходимо активировать механизм распознавания речи путем отправки a startListening
обменивайтесь сообщениями к объекту NSspeechRecognizer. Механизм тогда пытается различить команды в потоке слов и формулирует пользователя, говорит в микрофон. Если это идентифицирует команду, объект NSSpeechRecognizer вызывает speechRecognizer:didRecognizeCommand:
метод делегации, передающий в команде во втором параметре. Для приостановки механизма распознавания речи отправьте, NSSpeechRecognizer возражают a stopListening
сообщение.
Можно мгновенно обновить список команд, для которых объект NSSpeechRecognizer слушает путем отправки ему a setCommands:
сообщение. Обновление команды происходит, даже когда активно слушает объект.
Делегат должен реализовать speechRecognizer:didRecognizeCommand:
метод делегации для ответа на каждую речевую команду. Перечисление 2 показывает реализацию в качестве примера этого метода. Это также показывает метод действия, переключающийся между запуском и остановкой механизма распознавания.
Перечисление 2 , Запускающее двигатель распознавания и отвечающее на команды
- (IBAction)listen:(id)sender |
{ |
if ([sender state] == NSOnState) { // listen |
[recog startListening]; |
} else { |
[recog stopListening]; |
} |
} |
- (void)speechRecognizer:(NSSpeechRecognizer *)sender didRecognizeCommand:(id)aCmd { |
if ([(NSString *)aCmd isEqualToString:@"Sing"]) { |
NSSound *snd = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"HappyBirthday" ofType:@"aif"] byReference:NO]; |
[snd play]; |
[snd release]; |
return; |
} |
if ([(NSString *)aCmd isEqualToString:@"Jump"]) { |
NSRect frm = [[phraseField window] frame]; |
[[phraseField window] setFrameOrigin:NSMakePoint(frm.origin.x+20, frm.origin.y+20)]; |
return; |
} |
if ([(NSString *)aCmd isEqualToString:@"Roll over"]) { |
// .... some response here... |
} |
} |