Сервер распознавания речи не остается открытым

Я пытаюсь создать простую программу, которая зацикливает ввод речи пользователя с помощью 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 не может зацикливаться на вводе речи пользователя?


person Waffle    schedule 07.05.2010    source источник


Ответы (2)


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

person Kevin Reid    schedule 08.05.2010
comment
Задержка около 5 секунд между первым повтором и подсказкой работала ОТЛИЧНО. Спасибо. - person Waffle; 09.05.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
person Jonathan    schedule 27.05.2010