Как я могу использовать событие «ALTextToSpeech/Status», чтобы получить значение в naoqi?

Я хочу получить значение "value"? Как мне использовать событие в Python?

    a = self.memoryProxy.subscribeToEvent("ALTextToSpeech/Status", "value",str)
    print "value"
    self.tts.setParameter("pitchShift", 1.1)        
    self.tts.post.say(str) 

person Pink    schedule 01.12.2014    source источник


Ответы (1)


В зависимости от вашей версии наоци вы можете использовать один из следующих шаблонов.

Старый способ выглядит следующим образом (см. Наоци документ):

from naoqi import ALProxy, ALBroker, ALModule
import argparse

# Global variable to store the TTSEventWatcher module instance
tts_event_watcher = None
memory = None

class TTSEventWatcher(ALModule):
    """ An ALModule to react to the ALTextToSpeech/Status event """

    def __init__(self, ip_robot, port_robot):
        super(TTSEventWatcher, self).__init__("tts_event_watcher")
        global memory
        memory = ALProxy("ALMemory", ip_robot, port_robot)
        self.tts = ALProxy("ALTextToSpeech", ip_robot, port_robot)
        memory.subscribeToEvent("ALTextToSpeech/Status",
                                "tts_event_watcher",  # module instance
                                "on_tts_status")  # callback name

    def on_tts_status(self, key, value, message):
        """ callback for event ALTextToSpeech/Status """
        print "TTS Status value:", value


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", type=str, default="127.0.0.1",
                        help="Robot IP address. On robot or Local Naoqi: use '127.0.0.1'.")
    parser.add_argument("--port", type=int, default=9559,
                        help="Naoqi port number")
    args = parser.parse_args()

    event_broker = ALBroker("event_broker", "0.0.0.0", 0,
                            args.ip, args.port)
    global tts_event_watcher
    tts_event_watcher = TTSEventWatcher(args.ip, args.port)
    while True:
        raw_input("Watch events be triggered...")
        tts_event_watcher.tts.say("Hello!")

Осторожно, там есть несколько скрытых трюков, которые, например, заставляют вас помещать код управления событиями в ваш основной файл.

В более новых версиях вы можете использовать этот более удобный шаблон:

import qi
import argparse

class HumanTrackedEventWatcher(object):
    """ A class to react to the ALTextToSpeech/Status event """

    def __init__(self, app):
        super(HumanTrackedEventWatcher, self).__init__()
        app.start()
        session = app.session
        self.memory = session.service("ALMemory")
        self.tts = session.service("ALTextToSpeech")
        self.subscriber = self.memory.subscriber("ALTextToSpeech/Status")
        self.subscriber.signal.connect(self.on_tts_status)
        # keep this variable in memory, else the callback will be disconnected

    def on_tts_status(self, value):
        """ callback for event ALTextToSpeech/Status """
        print "TTS Status value:", value


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", type=str, default="127.0.0.1",
                        help="Robot IP address. On robot or Local Naoqi: use '127.0.0.1'.")
    parser.add_argument("--port", type=int, default=9559,
                        help="Naoqi port number")
    args = parser.parse_args()

    # Initialize qi framework
    connection_url = "tcp://" + args.ip + ":" + str(args.port)
    app = qi.Application(["HumanTrackedEventWatcher", "--qi-url=" + connection_url])
    tts_event_watcher = HumanTrackedEventWatcher(app)   

    while True:
        raw_input("Watch TTS events be triggered...")
        tts_event_watcher.tts.say("Hello!")
person LeBorgne    schedule 18.09.2015