Сервер распознавания речи не остается открытым - PullRequest
2 голосов
/ 07 мая 2010

Я пытаюсь создать простую программу, которая зацикливается на вводе речи пользователем, используя com.apple.speech.recognitionserver. Мой код на данный момент выглядит следующим образом:

set user_response to "start"

repeat while user_response is not equal to "Exit"
tell application id "com.apple.speech.recognitionserver"
    set user_response to listen for {"Time", "Weather", "Exit"} with prompt
            "Good Morning"
end tell


if user_response = "Time" then
    set curr_time to time string of (the current date)
    set curr_day to weekday of (the current date)
    say "It is"
    say curr_time
    say "on"
    say curr_day
    say "day"

else if user_response = "Weather" then
    say "It is hot outside. What do you expect?"
end if
end repeat

say "Have a good day"

Если вышеперечисленное выполняется в моей системе, то появляется «Доброе утро», а затем появляется система ввода речи и ожидает «Время», «Погода» или «Выход». Все они делают то, что, как они говорят, собираются сделать, но вместо того, чтобы повторять цикл, если я говорю «Время и погода», и спрашивать снова, пока я не скажу, что выход из речевого сервера истекает и больше не появляется. Есть ли способ сохранить это приложение открытым до тех пор, пока программа не закроется, или же appleScript не может зацикливаться для ввода речи пользователем?

Ответы [ 2 ]

1 голос
/ 08 мая 2010

Если вы не нашли способ сохранить распознавание речи открытым, попробуйте добавить задержку, прежде чем вызывать ее снова.Я вспоминаю (давно), что обнаружил, что события могут быть просто потеряны, если вы попытаетесь отправить событие в приложение, которое уже находится в процессе выхода (оно не открывает приложение).

0 голосов
/ 28 мая 2010

До вашего конца Повторите добавить

сообщить приложение "SpeechRecognitionServer" уволиться конец сказать

Примерно через 35 секунд он повторится, он медленный как мед в холодный день, но работает попробуй.

Вот простой пример:

repeat
    tell application "SpeechRecognitionServer"
        set theResponse to listen for {"yes", "no"} with prompt "open a finder?"
        set voice to (theResponse as text)
    end tell
    if voice contains "yes" then
        tell application "Finder"
            activate
        end tell
    else
        say "not understood"
    end if
    tell application "SpeechRecognitionServer"
        quit
    end tell
end repeat
...