Aha, I got some success.
There are some issues with the way the Picroft image is set up with two distinct users. The mycroft internals are all installed under a Linux user called mycroft
, and the Raspberry Pi specific stuff (the so called “picroft enclosure”) is installed under the Raspbian user called pi
. This distinction makes for some complex interactions with shared resources like skills and hardware access. The picroft enclosure user pi
has commands like mycroft-cli-client but the rest of the system is really running as a daemon/service running as the mycroft speech client user mycroft
.
I found that the mycroft user directory on Raspbian Jessie has almost no configuration but it does have a .config/pulse folder with some information about the default source and sink used for PulseAudio. However, it seems to be written or overwritten regularly, so this is more like a cache or cookie than a user-configurable item. Not sure what populates this folder with any files.
Instead, I went to the PulseAudio system-wide configuration file, /etc/pulse/default.pa
and hardcoded my particular USB audio source and the headphone audio sink into the system-wide defaults. The names for the desired devices I used come from the pactl
command, and then I un-commented two lines at the bottom of the default.pa
file and inserted the names.
My names may differ from your system, but once set, you shouldn’t need to touch them again until you change audio hardware.
pi@picroft:~ $ pactl list short sources
0 alsa_input.usb-046d_080a_918E0EA3-02-U0x46d0x80a.analog-mono module-alsa-card.c s16le 1ch 48000Hz SUSPENDED
1 alsa_output.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
pi@picroft:~ $ pactl list short sinks
0 alsa_output.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
pi@picroft:~ $ grep set-default /etc/pulse/default.pa
set-default-sink alsa_output.0.analog-stereo
set-default-source alsa_card.usb-046d_080a_918E0EA3-02-U0x46d0x80a
After I rebooted, the wake word was immediately recognized with a tone confirmation. Anything else was rejected as “I didn’t catch that, please rephrase” by Mycroft until the system eventually loaded the training data. Now it responds as expected.
I hope this helps others get Picroft working correctly. I’ve delved quite a bit into the internals and decided to ignore all the other Linux and Python webpages which recommend “just delete PulseAudio, it is broken.” It may be a bad design, it may have bugs, but I did find a surgical workaround in this case.