[Rhythmbox-devel] Adding features for automated DJing


I've been DJing on a community radio station and will be doing some live events also. When I say DJing, I'm talking about simply playing tracks, NOT mixing or any of that beat matching stuff. For this purpose I haven't found a good application in Linux, which simply does all of the following:

- Has good music library support
- Auto cross fading (skip silence at end of songs), auto DJ basically
- Use separate sound cards for previewing and live playback

There seem to be a handful of record deck style DJ programs, which don't really do what I want. I was using Amarok 1.4 for some time, but I don't think it is in development anymore (I very much dislike 2.0) and doesn't quite have all those features. A lot of the other media players seem too bloated for my purposes and still lack some of the features I want.

So I decided it was about time I picked an existing media player and added the features that I need. Rhythmbox is the one I settled on, since its library support seems really good and is pretty fast, already has cross fading support and is written using GObject which I'm very familiar with.

One of the first things I just added was support for the Comment TAG, since I use this to note profanity or audio issues, patch attached to the following bug:

I wanted to post my other thoughts of what changes I'd like to make, to get feedback and determine what features make sense to be put in the official Rhythmbox and how to go about implementing them properly.

Changes I'm working on

Auto cross fading:
I just wrote some GStreamer code to seek 20 seconds from the end of a song and using the level plugin, determine at what point the audio drops below a certain level. The next step is to integrate this with the rb-shell-player.c, so that the cross fade begins at the point where the song is determined to be silent. I could see this being a stock Rhythmbox feature with preferences to Enable it, set the end segment scan Duration and the silence Level in dB. Any information on the cleanest way of integrating this would be appreciated. It seems like Rhythmbox is designed for multiple backends, though I only see GStreamer currently. But perhaps a simple object type like RbSongEndFinder or something with a couple properties to set the scan duration and silence level, an asynchronous method to do the scan, progress and a way to cancel it would be the proper way to do this? A GStreamer implementation could then be added.

Separate preview and live sound cards:
For this feature I was thinking that previewing a song would occur when double clicking on a track (default GStreamer audio device), but anything played in the play queue would be on a separate sound card (with preferences for enabling this feature and setting the GStreamer device name). Previewing a track would need to have its own controls for seeing the playback progress and stopping it, perhaps a small control at the bottom of the window (to the right of the status bar for example).

Turn off removal of tracks from play queue:
The play queue in the side pane seems useful when browsing the library (compared to a playlist) and also makes the most sense for the 2 sound card case, for it to be the live playback. One issue though is that each track is removed as it is played, but I like to keep the playlist around so that I know what I have played (for posting the playlist later or announcing on the radio). I think it would therefore be nice to have another preference option for turning off the removal of tracks from the queue.

Song looping:
I'd like to add a song loop button to the controls which will continuously loop the same song. Useful for background music.

I would appreciate any feedback on which features might be candidates for inclusion in official Rhythmbox and any other comments/ideas.

Josh Green

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]