Integrated Linux Desktop Sound System - user experience
Sunday, February 17th, 2008Now that all the crucial components in the broadcasat chain are running smoothly, it’s time to work on the user experience. Here’s a recap of the programs to playout, broadcast, monitor and record:
Qjackctl to manage JACK connections between applications
Rhythmbox to play and organize sound files and playlists
Darkice to encode the stream and send it to an Icecast server for broadcast
Meterbridge to monitor the analog input from the DJ mixer
Ecasound to record archives in FLAC format
Three out of five of these programs are command line only. The user experience I’m looking for goes something like this:
- User boots up computer
- Gnome desktop logs default user in and starts JACK audio server
- Qjackctl starts up and docks in the Gnome panel
- Rhythmbox starts up in “full screen” mode
- Meterbridge starts up in “stay on top” mode
- Graphical panel starts and presents user with two buttons, “start broadcast” and “start archive”
- “start broadcast” button launches darkice in background and displays red, switching text to “stop broadcast”
- “start archive” button lanuches ecasound in background and displays red, switching text to “stop archive”
The two programs that actually provide a command line interface are darkice and ecasound. I want both of these to be controlled by a GUI. The actions are simple, so a big IDE/framework like QT isn’t necessary. Since I’m familliar with Perl and Gnome, I’m going with Gtk2-Perl.
I spent about 8 hours reading and modifying the introduction tutorial for getting windows and buttons up on the screen. I have a beta application that does nothing more than check if darkice is running and update some text in the window. There are also two buttons which can start and stop darkice. It works well, though starting and stopping darkice sometimes introduces latency into the JACK graph. At seemingly random intervals, stopping darkice will also stop other programs because “JACK gets clogged”, or so it seems. I don’t know where to start with this problem.
I’ll post my code once I’m happy with it.