My earlier post, about a function that could send things to the Google AIY Raspberry Pi Assistant, and supposedly prevent more than one message being spoken at a time, was errmmm, wrong. That's a technical term, that we programmers use.
I wrote a test program for my Pi cluster, whereby each of the sixteen cores would announce its hostname and rank. It's not all that often you get the opportunity to use the word cacophony, but...
Basically, several processes could all think the Assistant was not busy, and they all sent messages in the time it took for the first message to start being spoken.
I spent a while looking at how to program mutual exclusivity for a resource, and was impressed by how complex such an apparently simple thing can get.
I decided that what was needed was a simple program, running on the Assistant, that would watch a directory, notice when a file to be spoken arrived, and speak the text in that file. Python makes it easy to deal with more than one file in the directory. Here's what I wrote...
# Program to run on PiAssistant, to watch for newly arrived text files in
# /home/pi/Messages that it should speak, and delete them once it has.
path = "/home/pi/Messages/"
with os.scandir(path) as entries:
for entry in entries:
f = open(entry, "r")
content = f.read()
command = "python ~/AIY-projects-python/src/aiy/voice/tts.py \"" + \
content + "\" --lang en-GB --volume 10 --pitch 60 --speed 90"
When it spots one of more files in the Messages directory, it reads the text, and sends it out to be spoken. It can supposedly only do one file at a time, but... Still the cacophony!
#RaspberryPi #GoogleAIY #Python