# Make a bot just echo what you say import paho.mqtt.client as mqtt import json from time import sleep HOST = 'localhost' PORT = 1883 # To play wave files from subprocess import call # Mary server informations mary_host = "localhost" mary_port = "59125" # HTTP + URL packages import httplib2 from urllib.parse import urlencode, quote # For URL creation def on_connect(client, userdata, flags, rc): print("Connected to {0} with result code {1}".format(HOST, rc)) # Subscribe to the hotword detected topic client.subscribe("hermes/hotword/default/detected") client.subscribe("hermes/asr/textCaptured") def on_message(client, userdata, msg): if msg.topic == 'hermes/hotword/default/detected': print("Wakeword detected!") elif msg.topic == 'hermes/asr/textCaptured': print("Text caught") txt = json.loads(msg.payload) #print(txt) print(txt['text']) return tts("dfki-prudence",txt['text'],'default'); def onIntentNotRecognized(client, userdata, msg): print("null") def tts(voice, input_text, speaker): # Build the query query_hash = {"INPUT_TEXT": input_text, "INPUT_TYPE":"TEXT", # Input text "LOCALE":"en_GB", "VOICE": voice, # Voice informations (need to be compatible) "OUTPUT_TYPE":"AUDIO", "AUDIO":"WAVE", # Audio informations (need both) } query = urlencode(query_hash) print("query = \"http://%s:%s/process?%s\"" % (mary_host, mary_port, query)) # Run the query to mary http server h_mary = httplib2.Http() resp, content = h_mary.request("http://%s:%s/process?" % (mary_host, mary_port), "POST", query) # Decode the wav file or raise an exception if no wav files if (resp["content-type"] == "audio/x-wav"): # Write the wav file f = open("/tmp/output_wav.wav", "wb") f.write(content) f.close() # Play the wav file # output = sc.get_speaker('Scarlett') # a = read("/tmp/output_wav.wav") # data = numpy.array(a[1],dtype=float) # print(data) # with sc.get_speaker('Scarlett').player(a[0], channels=[0]) as speaker: # speaker.play(data) # aplay -D mono3 /tmp/output_wav.wav sleep(0.2) call(["aplay", "-D", speaker, "/tmp/output_wav.wav"]) #pygame.mixer.init(frequency=16000) # Initialise the mixer #s = pygame.mixer.Sound("/tmp/output_wav.wav") #s.play() #pygame.time.wait(int(math.ceil(s.get_length() * 1000))) else: raise Exception(content) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.message_callback_add("hermes/nlu/intentNotRecognized", onIntentNotRecognized) client.connect(HOST, PORT, 60) client.loop_forever()