Studio State and Wishlist

Alright, I'm officially calling the studio “feature complete” and in production quality. Only took me a damn year. Which means, I have to stop screwing around with the studio and focus on other things. Thing is, I've got a list of things in my head I would very much like to do, because I'm a weird perfectionist.

So, here's the list, in order of importance. Anything I do with the studio must be on this list. If it's not, I need to work on something more important.

  • Complete live radio system – It works, I would just like it to be a bit more bulletproof.
  • Make CallScreamer UI system sane to other people – Apple has made people hate and fear the “Apply” button.
  • Complete drivers for analog mic meters for guests 2 & 3 – The hardware side is done, I just need something to feed level date out the serial port.
  • Physical mixer knobs and buttons, simple version – simple arduino LEDs, switches, and knobs to speak OSC to non-mixer. Nothing fancy, I've already got all the parts, just need to make it.
  • Replace headphone amp with passive volume control – The “real time monitoring” function of the Delta 1010 isn't a full internal mixer, so we would occasionally have delay in our microphone monitoring, which was annoying. I've since pulled mic monitoring out into an external mixer which should drive four sets of headphones fine, even with passive volume control.
  • SpotMonger bugfixes and soundbard mode – SpotMonger works great for what it is, but mplayer does occasionally forget how to talk to JACK, and I could use a mode that works better for playing sound clips.
  • Document for other people, and potential talk – Seriously, other people need to know how to use this.
  • Finish phase – This is not strictly a studio thing. It's an HD radio I'm modifying to be controlled by computer and to remotely stream audio to the studio. Since we can't get KKNW via AM here in Tacoma, we're pulling in the HD radio simulcast.
  • Make toggler multicolumn – No reason it needs to stack the way it does, other than that's what I wanted it to do originally.

The Things I'm Working on

It occurs to me that I should probably document the parts that I'm actually building, on the software side anyway, to make the studio go. I'm trying to use as much software off the shelf as possible, one because I'm lazy and two because there's a lot of it out there that's good, but there are some things that don't fit very well. Here's the stuff I'm working on.

One of the design ideas I had is that the stuff I write should be easily modifiable by someone who has the tools to generally produce a podcast. I thought I would use HTML5 as much as possible, figuring that a lot of podcasters would have experience with it. Discovered node-webkit, now called nw.js, and decided to give that a shot.

Also, because I'm spending a ridiculous amount of time using HTML5 in other contexts, the context switch penalty would be less. Also, prototyping time. Also, lazy.

You'll also note that almost all of this is designed with touchscreens in mind.


If any part of this project gets picked up by people, I imagine this will be. This is a web-based call screening and phone patch system– real radio station versions of these can run in the thousands of bucks. It's basically an interface into Asterisk's REST API to direct calls into a predefined conference room. I'm also using WebDis to save caller information to pass to and from the studio.

The nice thing about this is that other than webdis and asterisk, there's no server side component. It's entirely in javascript1) and HTML5. I'm having to do some backend magic with proxying to webdis and asterisk with apache, but I hope to get rid of that requirement in time.


SpotMonger is a very specific audio player. It can play standard audio files, but it will also play a cheap hack I came up with called a “cart file.” A cart file is a tarball with FLAC files and a JSON file explaining order and context. It's nothing more complex than an archived playlist, but it lets me package entire commercial breaks simply and quickly.

You can set cue times for audio files, and it'll fire off a script at cue time so the levels can be set properly.

Anyway, in the Ask an Atheist backend, there's something called “breakmaker” that lets me create commercials breaks in a quick drag and drop manner. It originally made FLAC files, but I added the option to make carts. It's kind of a companion thing to SpotMonger.

It talks to mplayer on the back end, but it occasionally gets confused about JACK. MPlayer is my second backend, I originally used mocp in a version I called Cart-a-MOC, but that ended up being a bit to buggy for production.

I think I'm going to have to break down and implement this in GTK or the like.


Toggler is probably the most basic component, but it serves some of the most important functions. It executes scripts to watch system state, and will attempt to change system state when a button is pressed.

Believe it or not, Linux purists, but this is essentially a front end to systemd. The new (and sort-of-insane) init system does number of key things well enough that I've worked it into the core of the studio. Between it and aj-snapshot, audio chain, servers, and clients are nearly self-healing. If something crashes, it'll restart it and let me know if it can't. I used to have to do a lot of stupid work to get similar functionality.

As a result of this design, a lot of problems that presented themselves in the early days of the studio managed themselves well enough that guests didn't notice and I could let it go until after airtime. At least until the the event.


StalePI is a studio-to-transmitter2) link to get our audio to the radio stations we're on. I wasn't the first guy with this idea, but the idea for me was that this was a box I could send to radio stations. All the tech would have to do is give it power, a connection to the board, and ethernet. Data would come in one end, and broadcast-quality audio out the other. The only interface is a character LED panel to get state.

It's presently one way, but it provides a web interface with a chat. I'd like it to be 2-way at some point, but it would then need to become something other than the ffmpeg-based hack it is now. Might get away with using LiquidSoap, actually.


The most pedestrian of projects, systemjack is a bunch of glue scripts and systemd service files to let studio components be launched and managed out of systemd. Not particularly interesting.

Software I'm Using

Not fully comprehensive, and still evolving.


jquery, to be exact
radio station, if I'm being honest
yes, I can use LADSPA or LV2 plugins, and I have in the past, but these have a better UI for not-me users, and have utility the current plugin library doesn't.
I have to use ALSA loopback to get this into JACK. Might have to revive that Mumble patch.
In fact, I had to take this package over in AUR.
not in daily use, but I'd really rather do the patch bay this way.
via ALSA loopback. Honestly, I'll replace this with SFLPhone when SFLPhone's JACK support is robust. It's on their bug list.