2010-05-07 5 views
2

J'essaye de créer un programme simple qui boucle pour l'entrée de voix d'utilisateur en utilisant com.apple.speech.recognitionserver. Mon code est donc ce qui suit:Le serveur de reconnaissance vocale ne reste pas ouvert

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" 

Si l'est exécuté au-dessus sur mon système, il dit bonjour et il apparaît alors avec le système d'entrée de la parole et attend soit heure, la météo ou la sortie. Ils font tous ce qu'ils disent qu'ils vont faire, mais au lieu de boucler si je dis Temps et Météo et de demander à nouveau jusqu'à ce que je dis quitter le serveur de discours fois et ne ressuscite jamais. Y a-t-il un moyen de garder cette application ouverte jusqu'à la fin du programme ou est-ce que l'applescript n'est pas capable de faire une boucle pour l'entrée vocale de l'utilisateur?

Répondre

1

Si vous ne parvenez pas à garder la reconnaissance vocale ouverte, essayez d'ajouter un délai avant de l'appeler à nouveau. Je me souviens (il y a longtemps) de constater que les événements peuvent être simplement perdus si vous essayez d'envoyer un événement à une application qui est déjà en train de quitter (elle ne rouvre pas l'application).

+1

Un délai d'environ 5 secondes entre la première répétition et le tell a parfaitement fonctionné. Je vous remercie. – Waffle

0

Avant end repeat ajouter

tell application "SpeechRecognitionServer" quit end tell

Après environ 35 secondes, il le répète, il est lent que le miel un jour froid, mais cela fonctionne. Essaie.

Voici un exemple simple:

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