2013-07-26 3 views
7

Я только что начал проверять возможности Windows Speech to Text в C# .Net. В настоящее время я работаю над основами (IE - Скажи что-нибудь, и он будет обеспечивать вывод на основе того, что вы говорите). Тем не менее, я изо всех сил пытаюсь понять, как реально получить пользовательский ввод в качестве переменной.Получить пользовательский ввод от речи?

Что я имею в виду под этим, это, например. Если пользователь говорит:

"Call me John" 

Тогда я хочу, чтобы иметь возможность взять слово John как переменные, а затем сохранить, что, как говорят, имя пользователя людей.

Мой текущий SpeechRecognized событие следующим образом:

void zeusSpeechRecognised(object sender, SpeechRecognizedEventArgs e) 
    { 
     writeConsolas(e.Result.Text, username); 
     switch (e.Result.Grammar.RuleName) 
     { 
      case "settingsRules": 
       switch (e.Result.Text) 
       { 
        case "test": 
         writeConsolas("What do you want me to test?", me); 
         break; 
        case "change username": 
         writeConsolas("What do you want to be called?", me); 
         break; 
        case "exit": 
         writeConsolas("Do you wish me to exit?", me); 
         break; 
       } 
       break; 
     } 
    } 

NB:writeConsolas просто прославил Append линии к RichTextBox.

Я хотел бы добавить еще один case, который делает следующее:

case "call me" 
    username = e.Result.GetWordFollowingCallMe() //Obv not a method, but thats the general idea. 
    break; 

Очевидно, что нет такого метода, но это общая идея, что я хотел бы реализовать. Есть ли способ поиска конкретных фраз (IE: Call me) и взять следующее слово?

EDIT: Следует отметить, что e.Result.Text возвращает только слова, которые могут соответствовать Text в словаре.

+0

+1 для интеллектуально интересного вопроса программирования, но только мои 2 цента: если компьютер спросит меня о моем имени, моим первым инстинктом будет отвечать только мое имя, громкое и ясное. Не «Назовите меня Ishmael» или «Мое имя - это грязь» или что-то в этом роде ... которое вы, возможно, захотите проверить, если вы спуститесь по этому пути «Позвоните мне» :) –

+1

@MiklosAubert Спасибо за совет. Тем не менее, я планирую реализовать его так, чтобы пользователь начинал произносить «Call me blah» вместо того, чтобы его запрашивали – JosephGarrone

ответ

4

Это не похоже на вашу ситуацию. e.Result.Text представляет собой нечто, что вы можете перечислить: вы проверяете слова, которые начинают текст, а не текст целиком. В подобных случаях, вы не должны использовать switch, и идти на цепи if - then - else с вместо:

var text = e.Result.Text; 
if (text.StartsWith("test")) { 
    writeConsolas("What do you want me to test?", me); 
} else if (text.StartsWith("change username")) { 
    writeConsolas("What do you want to be called?", me); 
} else if (text.StartsWith("exit")) { 
    writeConsolas("Do you wish me to exit?", me); 
} else if (text.StartsWith("call me")) { 
    // Here you have the whole text. Chop off the "call me" part, 
    // using Substring(), and do whatever you need to do with the rest of it 
} else 
    ... 
4

Ну не может быть использован в switch на e.Result.Text, как он будет проверять по всему значению: Call Me John.

Вы должны иметь состояние в default случае, или за пределами вашего switch

Но я бы на самом деле реорганизовать все, что, пытаясь избежать switch или массивное if..else if...else

const string Callme = "call me"; 
var text = e.Result.Text; 

switch (text) 
    { 
    case "test": 
     writeConsolas("What do you want me to test?", me); 
    break; 
    case "change username": 
     writeConsolas("What do you want to be called?", me); 
    break; 
    case "exit": 
     writeConsolas("Do you wish me to exit?", me); 
    break; 

    } 
    if (text.StartsWith(CallMe) 
     userName = text.Replace(CallMe, string.Empty).Trim(); 
2

Я бы смотреть на обновления вашей грамматике использовать SemanticValues, чтобы вы могли напрямую извлекать результаты, а не анализировать результаты распознавания. Есть быстрый пример here, который демонстрирует SemanticValues, SemanticResultKeys и SemanticResultValues.

Смежные вопросы