soundkid is software that can be used by kids for playing music from Spotify without using a complicated interface like a display. Instead it can be used with a RFID Reader (I'm currently using a Neuftech USB RFID Reader) to interact with the music box.
soundkid is inspired by Phoniebox and Toniebox and uses librespot to interact with Spotify. I started my own project instead of using Phoniebox to learn more about the Rust language.
soundkid does read a configuration file from ~/.soundkid.conf and waits for
input events from the input device (eg. the RFID Reader) and then starts
soundkid-player to play something.
The configuration must be located at ~/.soundkid.conf and should be YAML. Here's an example:
---
gpio: # GPIO config is optional
"/dev/gpiochip0": # this is the GPIO device path
5: "VOLUME_DECREASE" # this is a mapping between the GPIO pin (5 in this case) and the action
6: "VOLUME_INCREASE" # another mapping
input:
"HXGCoLtd Keyboard":
00000044886655661122: "spotify:playlist:43nVldajDhG1YVwZKxVh"
00000011559977882233: "https://open.spotify.com/album/7LQhG0xSDjFiKJnziyB3Zj?si=eFQbWbq0Q16q6Go8tjlCvw"
00000044772255668800: "https://open.spotify.com/album/5N73vwGXol4maS9U6HLp0o?si=oWBQKSpWReuOPnr50ayWSw"
00000044772255668800: "PAUSE"
00000011666611330099: "RESUME"
00000011666611330100: "VOLUME_INCREASE"
00000011666611330101: "VOLUME_DECREASE"
alsa:
control: "SoftMaster"
spotify:
username: "my-spotify-username"
password: "my-secret-spotify-password"
The gpio map is optional and can be used to map actions to GPIO pins. The gpio map contains another map
with the GPIO device name as key. The value is another key/value pair where the key (in the example 5 or 6)
is the GPIO pin and the value (in the example "VOLUME_DECREASE" and "VOLUME_INCREASE") is the action.
The input map is similar to the gpio map. "HXGCoLtd Keyboard" is the key (this could also be
eg. /dev/input/event15, try sudo evtest to get information about the available devices) and under
that key is another map that contains key/value pairs of tags (in this example the values starting with 00000)
and actions (in this example spotify uris or other actions like "PAUSE", "RESUME", ...)
The alsa map has currently only control key. That's the ALSA control (try amixer to get a list of
controls) to that is used to increase/decrease the volume.
The spotify map must contain username and password.
The following actions (beside the spotify URIs) are currently available:
PAUSE: pause the currentsoundkid-playerprocessRESUMEwhich resume the pausedsoundkid-playerprocessVOLUME_INCREASEincrease the volume by 5%VOLUME_DECREASEdecrease the volume by 5%
Build the project with:
cargo build
Running soundkid:
RUST_BACKTRACE=full RUST_LOG=debug cargo run --bin soundkid
Install cargo deb with cargo install cargo-deb and then build the package with cargo deb.
Please use github pull requests for code/doc changes and github issues to report problems or ask questions.
The code is licensed under the Apache-2.0 license.