The Internet DJ Console (commonly shortened to IDJC) is a streaming audio console that can allow you to DJ over any shoutcast or icecast server, and even record your shows for inclusion into a podcast later. While not quite as feature-rich by itself as better-known programs like Sam Broadcaster, the fact that it uses Jack for most of its connections can provide a surprising amount of flexibility for the would-be streaming DJ and podcaster.
Before reading this article, it will help a lot if you first review the articles on Jamin and Alsa-to-Jack bridges, as they both will greatly assist in the setup and use of this program. If you want to
To practice this program, it also helps to have an available shoutcast or icecast server, it can either be an account with an actual *cast provider or a copy of the server downloaded using your system’s software center or package manager. Either way, you’ll want to have the login location and credentials ready for this program to connect to them.
Keep in mind that this software is for streaming broadcasts; if you don’t want to stream your broadcast, then I recommend recording the production using Ardour instead.
Setting the Options
Before we can begin broadcasting, first, we need to make sure that IDJC has all the appropriate connections. Several will be made automatically by default.
To begin setting up the IDJC, you need to click the “Prefs” button, which you’ll find on the lower-left corner of the main window.
You will need to go over the preferences to make sure that everything is to your liking. If you hold the mouse over most of the options, you’ll see a tooltip that explains the option; some of them can be downright enlightening. Changes made in this window will be immediately performed; user interface changes included.
There are seven tabs at the top, General, Microphones, XChat, Jack Ports, Bindings, Event, and About:
General covers the main options for the IDJC. These options include the user interface (basic streamer for a simple playlist, fully-featured for advanced broadcasting purposes), replay gain (for adjusting loudness on the identified tracks), and other miscellaneous interface, audio, and recording features. This options panel has a scrollbar, so make sure you scroll down to see the rest of the options.
The Microphones tab covers the signal processing controls for the microphone(s) used with the program; the idea is that the DJ and all of his guests should sound their best. The program can support 4 microphones, and each one can have different settings.
XChat is a chat program that is used to connect to the Internet Relay Chat, a global chat system that predates even America Online’s instant messenger by nearly 10 years. A similarly-named tab in the IDJC settings includes a track announcer that can announce in chat what current track is playing, and a message timer that will send a message to the chat channel over a specified period.
The Jack Ports options are important for setting the automatic connections created by IDJC when it is started. The settings will set the four available microphones, auxiliary inputs (for any other Jack-aware program that can play some form of audio for your show; useful for DJ mixing software or SFX Triggers), midi control (for a MIDI-based control surface), DJ headphone outputs, Stream outputs (for broadcasting options other than shoutcast or Icecast), and a DSP route (for mastering the broadcast before it’s sent). The last has a checkbox, in case you don’t want to master the broadcast more than the built-in options make available. If you select this, you’ll benefit from using Jamin to perform the mastering.
The Bindings tab is where you can customize the interface to your liking. IN here, you can assign keys or controls (knobs, sliders, buttons and switches on a control surface, for example) to control the interface. The defaults are decent, but if you have a control surface, trust me, it makes things so much easier!
The Event tab allows you to create commands that will occur if one of several events happen, including the opening and closing of IDJC, the activation and deactivation of microphones, and the activation and deactivation of the auxiliary connection.
The About tab is just about what you’d expect: It tells you the program’s name and version, who has the copyrights, who contributed to the program, and the license terms. As a GPL application, you can use this program with complete abandon; the only limitations are on people who develop using the programming code found in the program (they must share their changes under the same terms).
The second article in this series will cover the options in more detail, but right now, we’ll assume the defaults are good enough for use.
Preparing the VoIP Connection
If you created the Alsa-Jack bridges, then you have another option: you can connect Skype (or another VoIP softphone) to the to this program; in essence, you can set up the IDJC to allow incoming calls! For all those who dreamed of being radio DJs, the only way you can get closer is with a license and a 200-watt tower (and advertisers, you can’t forget those!)
At this point, I’ll assume the Alsa Dedicated ports are present in the system, and you have Skype snugly connected to one of them… say, dedicated device 1. At this point, the Jack connection graph should look something like this:
You’ll notice that the voip_in and voip_out ports are not connected to anything; by default, the program does not connect them. So, we’ll do that now be connecting the “Alsa Dedicated Output 1” ports with the “voip_in_l” and “voip_in_r” ports, while connecting the “voip_out_l” and “voip_out_r” ports to the two “Alsa Dedicated Input 1” ports.
The graph should now look like this:
At this point, everything should be ready to go.
Preparing the Streams
Before we can stream, we have to get connected, right? This is where the source client come in. Now, if you have alternate streaming software, whether it is an FM radio encoder or an alternate encoder that ultimately streams sound elsewhere, you’ll want to redirect the above “str_out_*” to connect to something other than the “str_in_*” entries in “idjc-sc“.
Otherwise, we’re good, and can move onto connecting the stream controller to the appropriate streaming server. To begin this process, press the “Output” button next to the “prefs” button, and the IDJC Output window will appear.
At the top of the window are the group controls. IDJC is capable of streaming out to 6 servers at once, and the group controls allow you to perform certain tasks to multiple streams at once. The actual servers’ names will be set up below.
The Connect button will connect to all the servers checked in the box above. The disconnect will disconnect from the server. “Kick Encumbents” disconnects whoever’s currently broadcasting on those servers, so you can begin your broadcasts. For the latter two commands, you will need to check the box to use them; this prevents you from accidentally kicking or disconnecting.
The “Metadata” line is what the stream will be identified as. You should have “%s” somewhere in the line to indicate the currently-playing track, as well as the name of your streamed broadcast.
The next box with the six tabs allows you to configure each of the 6 streams individually. Sometimes, the details are hidden; if this is the case, clicking on “Individual Controls” and “Configuration” will expand the areas, allowing you to begin the setup.
You’ll first notice a button labeled “Server not Configured.” Once the streaming server has been set up, it’s address will show up in the button; clicking it will press the button, connecting to the server, and clicking it again will de-press the button, disconnecting from the server. Next to it is the familiar “Kick Incumbent” button, and a couple lines lower, you’ll see a familiar metadata line. Unlike the previous section, where the controls can be applied to multiple streams, this can only be applied to the one stream selected from the numbered tabs.
The timer controls under the server button allows you to set a specific time (in 24-hour format) in which you can begin and end a pre-recorded show the stream.The kick before start button will cause the program to send the kick signal to the server, to ensure that the broadcast will begin on time.
On the next line, you will have two features, each with two options. On the main window, you have two playlists that you should have set up (more on that later), and at the bottom, you have two record options (more on those later). The “start player” option will automatically start the selected playlist when the connection is established. The “start recorder” will start the selected recorder when the connection is established.
Now we reach the configuration. In here is where you will assign your servers, determine the output formats, provide the stream stats and additional information for shoutcast servers.
Finally, at the very bottom are the recording controls. While broadcasting, the software can be set to download and store the completed broadcast feed, depending on which stream it’s collecting the feed from. Optionally, you can instead select “FLAC+CUE” in order to locally store the stream in a 24-bit FLAC audio file for maximum quality when preparing the file to be saved in a podcast feed for late listeners. Two tabs exist for the recording controls, in case you want to do both, or collect recordings from two different streams.
However, we don’t yet have ANY servers assigned yet. To add our first server, let’s click “New”.
The “Server Type” is a dropdown box that lets you select from the four available streaming server types, including the master and relay servers for both Shoutcast and Icecast 2. Since I intend to use a private Icecast 2 server for this example, I’ll go ahead and select “Icecast 2 Master.”
The next options are the hostname and port number. These determine the connection route for the server in question. Following these is the mount point, which is specific to Icecast 2 (selecting Shoutcast options will grey it out).
Next, we have the login credentials. Icecast will require a login name, while Shoutcast will not. Both will need the appropriate password. At the bottom is a checkbox; when you connect to the server, IDJC can scan the server to see how many people are listening at that point if you have this option selected.
The next step is to select the format of the audio this program will be outputting, including the sample rate and quality of the audio, and the file format that will be streamed to the server to be played.
The sample rate has three options. Either you can leave the sample rate at the rate being used by Jack in general (for example, mine is using 48KHz, but others may be using 96KHz or even 44.1KHz), select a standard rate from the list below that, or type in a custom rate in the following box. Make certain you select the appropriate radio box for your chosen option.
The quality option underneath the rate options are to determine the method of resampling (changing the original sample rate of the recordings being played) for transmission. The options are Highest, Good, Fast, and Fastest; by default, Fastest is used.
On the right-hand side, you can see the file type selection; a streaming provider will generally advise you as to what formats and requirements the stream should have, and you should endeavor to meet them, and this will help you meet them automatically. You have two file format options, either MP3, or Ogg (which consists of Vorbis, FLAC, and Speex).
For MP3, you can choose a bitrate, compression quality, and whether the file is mono, stereo, or joint stereo. For Ogg Vorbis, you can choose bitrate, whether the file is mono or stereo, and the upper and lower relative bitrates (Vorbis is variable-bitrate). FLAC has a checkbox for stereo, one for metadata, and a third option for 16, 20, and 24-bit. Speex has a band mode, stereo and metadata checkboxes, a quality option, and the encoder complexity setting, which can require more CPU, but increase the quality of the audio beyond what the quality setting has.
We then switch over to the stream info tab. In here, you can put up the information for this show that will appear in a listener’s info settings for the show. I would say more, but let’s face it, the selections are pretty obvious, and it’s not like you can’t see the picture, right? The last one is also pretty easy to guess.
Before beginning the transmission, you need to prepare your playlists, not just the music you may be playing if you’re a music DJ, but also intros, bumpers, adverts, and outtros that all DJs include in their shows, collectively referred to as “Jingles.”
To start with, we will populate the two playlists on the main window, including what jingles we want to include. To add media files, right click on the first of the playlists and go to “Playlist” -> “Add Music.” Then you browse, either to the individual music files, or to pre-made playlists. It is recommended that you only add as much as one segment permits, including any intros, bumpers, ads, and outtros needed.
Once that’s done, go ahead and do the same for playlist 2, making sure it also has all the miscellaneous elements included.
Now, it’s possible that the commercial spots will be handled by the streaming host; if so, they can be blank files (like these are, in fact) that can function as placeholders. A bumper can then be played to indicate that the music will continue.
In this layout, we see Intro 1 introducing the show to the listener. Once it has played, the player will then move to the next item in line, and start playing the music. Then it will play the commercial spots, followed by another bumper, following which more music is played until the first outtro (such as a situation where the show will stop for a minute for network commercials, news, what-have-you). When the playlist nearly reaches the end, you will hear a beeping sound in the headset alerting you that the playlist is finishing up.
Once the network has returned control to you, you can then begin the second playlist. If there are more than 2 segments, you can spend the time the second playlist is running to load or create a third playlist (in playlist 1) in preparation with whatever else you need.
The the bottom of each playlist, there are notifications for the block size in minutes, and a finish notification showing at what exact time the playlist will finish playing if started at that mmoment. At the top is the play time meter for the current song. You can drag it if you want to skip to a specific location in the song. To the left of the bar is the time the song’s been playing so far; clicking that will show the time remaining.
Above the meter are the controls for this playlist; previous, play, pause, stop, skip, and add to playlist. Most of these are pretty obvious, but I would like to point out that the last one is like the above method of loading music to the playlist; you can either do it one song at a time, or a whole playlist at a time.
Below the playlists, what you see depends on whether you’ve enabled the speed/pitch controls. If the controls are enabled, then you see a slider that can adjust the playback speed anywhere from 1/4 to 4x. If you’re doing some kind of beatmixing, this can help keep the beat appropriate, although for beatmixing, I tend to recommend Mixxx instead, since it does have the appropriate tools for determining beats per minute, and setting cues and loops in the tracks.
If the speed/pitch controls are not enabled, then you can see some drop-down menus and a couple buttons; these are the playlist advancement and output controls.
The “Playlist Mode” determines in what order the current playlist will play. The options are “Play All,” “Loop All,”, “Random,” “Manual” (stops playing after each track), “Cue Up” (Like “Manual,” except the next track in the list is highlighted), “External” (Plays a specific playlist file or folder of audio files), and “Alternate” (Goes back and forth between both playlists).
In any mode other than “Alternate,” the “Fade” dropdown will be available. This determines the crossfade time between tracks; you can keep it off, or you can set it to crossfade over the span of 5 or 10 seconds.
The “Audio Feed” buttons are important. These determine where the audio goes. The “Stream” button means that this playlist is live; the audience is listening to what is playing here. DJ means that you’re the one listening. This is very important, as this feature allows you to work on one playlist while your audience is listening to the other one. Be careful, though; if the playlist you’re working on is stream-enabled, then everyone can hear what you’re doing.
Between the two playlists is the main volume slider; this determines the volume of both playlists at once, unless you’ve set the option to have one per playlist.
Below the playlists, you can see the “Tracks Played” list. If you’re performing a manual or queued playlist mode, this will help you avoid repeating the same song in the same show.
After the Tracks Played list, we enter into the monitor and inter-playlist controls. The “Monitor Mix” selection is an extension of the audio feed controls; when set to Stream, you’ll hear the live stream, regardless of the DJ buttons above. When set to DJ mode, however, you can stop listening to the feeds when you choose by unselecting the “DJ” buttons. This can be useful when working with VoIP, which we will cover later in the article.
The metadata source determines where the stream will get the currently-playing tune’s metadata. The choices are “Left Player,” “Right Player,” “Last Played,” “Crossfader,” (meaning the playlist currently indicated by the position of the crossfader) and “None.”
Next, the crossfader controls can be seen. They consist of a slider and multiple buttons. The slide essentially adjusts the volume between the left and right playlists; it will increase the volume of the side it is advancing to, and decrease the volume of the side it’s leaving.
The “L,” “R,” and both “Middle” buttons will cause the slider to immediately travel to their respective locations; the two middle buttons simply cause the slider to move slightly to their side of dead-center.
The “Response” drop-down determines if the crossfade curve is smooth, or if it is hard; hard means that moving the slider will cause one side to adjust at the same rate, until both sides are the same volume, and then adjust down the other side at the same rate. Smooth, on the other hand, will decrease the adjustment as it reaches peak loudness, while increasing the opposite adjustment. This usually makes for a better-sounding transition.
The Pass button causes the crossfader to travel across at a steady rate of speed. The Time box next to it determines how long it will take the crossfader to travel all the way.
The buttons along the bottom are the DJ controls. These allow the DJ to manipulate connections, settings, and impromptu bumpers, ads, and calls. We’ve already covered the “Prefs” and “Output” buttons, so we can continue from there.
The “Jingles” control brings up the jingles list which should contain a list of the intros, outtros, and bumpers you use on the show; this can include sound effects that are commonly used as part of any monologues or dialogues you have.
The two phone buttons are the ways you can interact with VoIP. The green phone is a live conversation; when talking to the caller, the conversation is broadcast to the listening audience. In this setting, the DJ and guest hosts can all converse with the caller.
The red phone is a private call with the DJ only; this one will not be broadcast. This is the reason why you’d want to be able to switch off the DJ audio feeds; in this case, it helps not to have the music distracting the conversation with the caller.
The picture of the green jack is the auxiliary control; this allows an external Jack-aware program to broadcast through the IDJC. An example of such a program would be the previously-mentioned “Mixxx” software, a beatmixing program that can allow more party-style mixes to be broadcast over the streaming audio. Something to keep in mind, however, is that the auxiliary-connected application, while audible in the stream, will not be mixed into the DJ monitoring.
Another possible example would be Mumble or Teamspeak, where a panel of people could talk to one another over long distances, and the audience can hear. Combine this with the VoIP features, and you can have a long-distance team taking calls from listeners. Between this feature and Jack itself, you have a lot of flexibility in your broadcasting options.
Following the Aux control, you can have up to 4 microphone buttons, the first of which will be labeled “DJ” by default. The number available will be determined in the “Microphones” settings in the prefs window; checking microphones 2 through 4 can add additional buttons for additional guests to join in the conversation if they’re local. When these buttons are pressed, the audience can hear the person at the associated microphone. These will also “duck” the music playing in the playlist, meaning that the music becomes softer to avoid overpowering the DJ’s voice. Needless to say, you want this to be off when you’re not actually speaking to the audience.
The final button is simply a “next” button; when you press it, it will either start playing the currently-highlighted track or stops it and plays the track after this one, depending on whether it’s playing or not.
Playlist Context Menu
Using the playlists will include some right-clicking, which means you’ll need to be familiar with the menus. These will either perform some action, or queue an action to be performed in the playlist after a specific song is finished playing.
The first context option is “Insert Control.” This will inject a command into the playlist to be performed automatically. Several options are available for use from this control.
If you have adjusted the speed of the playback for the current song, and want to return to normal immediately after it is finished, “Normal Speed” is for you. If, after a specific song, you want the playback to stop, either for a monologue, or for network advertising, you can insert “Player Stop.”
“Jump to Top” causes the highlight to be shifted to the first item in the playlist, essentially causing the playlist to start over. “Transfer” basically causes the playback to jump over to the second playlist without taking the time to crossfade. “Crossfade, on the other hand, does exactly that. “Switch to Aux” will cause the Auxiliary connection to engage when the song is complete.
“Announcement” means exactly that. When inserting this control, you will be presented with a box to enter the announcement you wish to make, and the time you estimate the announcement will take to say. One item of note however, if you are using the default keyboard shortcuts in the program, then I recommend you make the actual announcement in a text editor, and then copy and paste it into this box; if you type, the shortcuts will take action, even though you’re in a text box.
The “Fade” options determine how the playlist will fade at that point; it overrides the overall fade option. The final two options can be used at the end of the playlist to end the recording and streaming of the playback. Note, however, this does not stop the playback, just its streaming.
The “Meta Tag” option can allow you to edit the file’s metadata, such as the ID3 information in an MP3.
“Duplicate” will simply add another copy of the selected song immediately after it; you can then move it to another location in the playlist. “Remove” does just what you expect, but note the submenu: “This” means that just this item will be removed, “All” means everything is removed, “From Here” means this and all following items are removed, and “To Here” means this and all previous items are removed.
Finally, “Add to Jingles,” which simply adds this item into the Jingles list. This is the only way entries are added to the Jingles list, so when you make a new jingle, you just load it in the normal playlist, and then use this option to move it to your list of jingles.
The “Playlist” options has commands specific to editing the playlist in its entirety.
“Add Music” is another way of adding songs or playlists to the playlist. “Save” then allows you to save the playlist in m3u format.
Copy will create a copy of the playlist in the other playlist. In the submenu, “Append” places this copy after what is already in that playlist, while Prepend places the playlist before the existing playlist. “Append Cursor” inserts the copied playlist just after the item highlighted in the other playlist, while “Prepend Cursor” option places them before the highlighted item.
Transfer is identical to copy, except that instead of making copies, it just moves the items to the identified location. Exchange simply switches the playlists; playlist 2 becomes playlist 1, and vice versa. Empty just clears all items out of the playlist window.
The Jingles Window
The Jingle player (a form of SFX trigger) allows you to play one or more specified jingles when you press one of the play buttons; the black one will play the jingle over the currently-playing song, whose volume will drop while the jingle is playing. The red play button will completely silence the currently-playing song when it starts. On the right, the jingle player’s volume meter is the one on the right, with the triangular volume symbol on it.
The other part of this window is the interlude player; this will constantly play a specified song in the background, completely inaudible while the normal playlists or the jingle player is active, but it will become audible when nothing else is playing. The interlude player plays its tune in a continuous loop for as long as its button (the one with the microphone and musical notes) is pressed. The volume meter with the musical notes controls the interlude player’s volume (at least, when it becomes
audible in-between tracks).
An example of the usage of the interlude player would
be for “technical difficulties” messages; they can inform the listener that the system is experiencing technical difficulties, and will return as soon as possible, or this player could just run a repeat of the station identification or show identification pending the next playback.
At this time, there does not seem to be a way to remove items from the Jingles window without deleting the files from ~/.idjc/jingles (or ~/.idjc/profiles/<profile>/jingles) manually. I’m pretty sure this will eventually be resolved, but for now, just using a file manager to go to the above locations should allow you to remove jingles you don’t want.
The Status Panel
On the right of the window is a panel that has a large number of volume meters and other status information. Starting at the upper-left is the peak hold meter, indicating the strength of the stream signal. This allows you to determine if there may be problems with your connection to the streaming server
The center of the left is the stream listing; for each connected server, its numbered box will be colored green. The colors determine if the server is connected, connecting, failed to connect, or is not connected. Underneath the stream listing is the listener count; this will show you the combined number of listeners for your show. Under the listener count is the volume meter for your audio; this is the audio being sent to the streaming server.
Then, to the right of that column is another, entirely dedicated to the microphones connected; the number of volume meters are determined by the number of microphones you have connected to the program. Each meter actually has two measurement bars; on the left is the actual volume meter, while the bar on the right shows the amount of noise filtering (in green), de-essing (in yellow), and limiting (in red).
Well, that’s the Internet DJ Console, all out for display. As was previously mentioned, this does not need to have a streaming server connected; if you send the stream signal to something else, whether it’s a radio transmitter or an intercom system, the principles will still apply. And with the aux feature, you can add other features to this program to make it even more flexible.
Keep an eye out for the second article on this series, which will cover the configuration options in more detail; they were glossed over in this article in order to focus on the program’s use itself.
Have fun, and make something good!