Saturday, July 9, 2016
PiDP8 streaming radio controller
Over the long weekend I put together Oscar Vermeulen's neat PiDP-8 kit, a PDP-8 emulator that runs on a Raspberry Pi. I have no particular attachment to the PDP-8 (though an Altair 8800 would be a different matter) but I love the 70s aesthetic, the glorious switches, and the banks of blinkenlights.
My one contribution was using these spiffy threaded angle brackets (Keystone 621) instead of the kit's wooden spacers for a neater construction and more room in the back of the case. They fit perfectly and I would recommend them to anyone building the kit (I will guess that being 4-40 thread that they aren't available in Europe). Future plans are to put a USB hub back there with a decent audio interface and maybe a USB serial port to drive a VFD display with "now playing" information. I'm also using a RPi 3 which has built-in wifi so I need one less interface. In fact this works so far without needing to cut any case holes except for power in and audio out. My final contribution was to mount the box on a spare iPad desk mount so I could put it up at an angle for that retro Star Trek look.
I had my eye on the kit as a retro streaming music controller. Fortunately Steve Mansfield-Devine did the heavy lifting to make the switches and LEDs accessible from Python. This is not as trivial as it might seem: the GPIO pins of the RPi are charliplexed to drive so many switches and LEDs.
My first impulse was to use the two vertical rows of LEDs as a seriously dope stereo level bargraph. But after a day of fighting with ALSA, PulseAudio and various Linux audio incantations and libraries, I utterly failed to get at the actual signal data coming out the headphone jack. So I'm going to kick that can down the road a bit.
So no bitchin' bargraph, but I could still use the LEDs to show status and volume, and the switches to control mpd (Music PLayer Daemon), So I wrote a little daemon to do that, github link forked from Steve's work above. Momentary switches control playlist selection (next and prev), volume (+5 and -5), pause and play. The top row of LEDs shows playback volume in a bargraph, and changes delightfully synchronously when changing playback volume using a slider on another client. (You can also use two momentary switches on the PiDP-8 as well).
More on this as it progresses...