So far, I’ve done a lot of talking about specific programs individually. This is important, because you need to know how to use the tools before you can use them effectively. However, at this point, we can start making full-scale workflows for larger projects… after all, nobody uses just one tool, and for complex tasks, you need to have multiple tools on hand to do the work.
For this project, I will show the workflow using the flowcanvas views of Gladish and Claudia. I have a 2-channel audio interface with an XLR microphone hooked up to one, and a port with a TRS jack (the audio interface dedicates this to an electric guitar, but it should be usable with a dynamic mic if need be).
I have heard on podcast podcasts how these podcasters use two computers and a hardware mixer to allow the recording of Skype calls in their podcast. In this example, I will show the workflow for a podcast that uses Skype through the Alsa-Jack Bridge, the Ardour DAW for multitrack recording, Hydrogen as a SFX trigger, Mixxx for playing the intros and stingers, and the Internet DJ Console is used to do the streaming, while two instances of Jamin will be used to master the stream and the mixed master recording.
The end result of this setup is that anyone with Linux can use this layout to create a podcast that includes skype calls, all in one system, with no hardware beyond an audio interface for their microphone. This includes the ability to stream the podcast to live listeners using shoutcast or icecast, and keeps all audio sources on separate DAW tracks, in case postprocessing is needed for any reason.
Most of these steps can be performed using the Claudia application, but one step would need the “Raw Jack” display that Gladish has available. If you’re using Claudia, in order to make including the applications easier, then you will want to also have Patchage or the QT Jack Control handy for that one step. Just a fair warning.
If the system has PulseAudio as part of it, you won’t be able to use Skype with the Jack-Alsa bridge; it will detect the presence of PulseAudio and will only use that system for audio output. So if you have PulseAudio, it helps to remove it so that Skype will work with this tutorial. If you don’t plan to use Skype, or if you plan to perform a double-ender, then you can leave Pulse where it is.
Due to different designs, some of the programs we will be using here will need to be manually set up; unfortunately, not all programs will use the designated folder by default, and until version 1 of Ladish is available from the repositories, the LASH and Jack Session protocols will not be available.
One more thing: Remember, this is a setup. You will only need to perform this list of steps once… once the session has been created, all applications have been added, and all connections have been made, all you need to do to return to this workflow is just load the project and move forward.
Now, Jamin, IDJC, and Ardour will attempt to make their own connections, so we want to make sure that Jack ignores all self-connection attempts in order to shut down this behavior. So, in Gladish or Claudia, you’ll need to go to “Tools” and “Configure Jack.” For gladish, then you click on “Jack Engine Parameters.” Once you see the Self-Connect Mode, select “Ignore Self-Connect Requests.”
Once Jack is ready, we will want to create a studio, if we don’t already have one. If you already have one, then you can skip to the next step.
The creation of a studio is identical between Gladish and Claudia. Select “Studio” and then “New Studio.” The studio name box will appear. Simply enter the desired name of your studio and accept it.
Now, you don’t need to put too much thought into the studio name; the bulk of the work will be encapsulated into the room we’ll create in the studio. The only reason to even make more than one studio is because you may want to have multiple rooms consisting of multiple projects as part of a larger overreaching project. Unless you plan to be using replaceable synths or encapsulated, savable filtration consisting of multiple filters with complex wiring (one of which I will show you in a future article), you won’t need more than one single room.
The name of the room doesn’t require much more thought, really. It is simply, like the studio, simply a generic container. This is even more the case as the room will be the only one in this studio, so I just like to call it “Room.” Not very creative, am I?
However, the type of room is a bit more important. You need to have as many inputs as you have microphone channels. If you only have one or two mics, then “Basic” will do. If you have up to 4, then the “4x4x2x2”. Up to 10… well, you get the pattern. For clarification, the pattern is “audio input ports”x”audio output ports”x”midi input ports”x”midi output ports”. Basic will name the two channels left and right, but if you’re using two mono mics, you can just name one “left” and one “right,” and you’ll do okay.
Since the IDJC can support up to 4 microphones, I’ve selected the 4x4x2x2 option, so we can provide a full demonstration. Then, I connect my audio interface to the available capture interfaces. For the output, I treated playbacks 1 and 2 as one stereo output, and 3 and 4 for the second stereo output… and just mixed them together into my stereo interface.
Making the Project
This is where the name becomes important. The project is what actually saves the applications to launch and the connections to make. In addition, once Ladish 1 is available for the repositories, it will be the project that sends the signal to the different apps to save their status, thereby allowing the DAW to save its session, as well as the Jamin apps to save their adjustment settings.
There are two pieces of information we’ll need here. The first is the location that you’ll want to save the combined configuration and audio files generated by the various tools; they are all saved together, so that you can zip the package up and move it to a different system without needing to re-setup the applications (aside from ensuring that they’re installed on the target system). So you are simply selecting a folder, not a file.
The other part is the name of the project. This will appear in parentheses following the room name in the studio manifest. It will also show up in the list of names when selecting the project again later. I simply chose the name “Skype Streaming Podcast,” because I’m a boring putz who can’t be original to save his life. You can choose to use the name of your podcast if you want.
Setting up the DAW
Now, the IDJC contains its own recording feature, and that can be good enough for our needs. However, if you intend to do any post-production work, this will limit your options, since all the audio will be merged into one single file; there is no unmixing multiple audio sources once they’re mixed. So, we want to have a multitrack recorder as part of this chain, and I have always been a big fan of the Ardour DAW, so that is what we will be setting up here.
So, right-click on the room and select either “Add New” (For Claudia, which will launch the Klaudia menu) or “Add Application,” which opens the following window. For the command, you use “ardour2” followed by what you want to name the project in Ardour 2 (I just chose “Podcast,” to continue a rather boring trend). For the level, we’ll use 0 until Level 2 (Jack Session) is available; 1 will crash Ardour if you try to save the session.
Now, if you chose the latter (Klaudia autogenerates a session name for Ardour so you don’t need to), you will be presented with a session window. It will already be in “New Session,” and the session name you decided on will be displayed. Go ahead and just click “New.” You will now see Ardour appear with just the master bus available.
Creating the Track Buses
Now, we want to create one track for each input we intend to have, plus a track for a final recording.
The first four tracks will be mono tracks, set to “Normal.” We do not want “Tape,” simply because this will cause an existing track to be overwritten if the playhead is in the wrong place. Doubleplusungood. Finally, we want to select “Track,” because the bus is essentially a track without recording capability.
Wha…? Why would we have a track without recording ability?!
Well, it helps to think of Ardour, not as a multitrack recorder with additional features, but as a digital mixer with the ability to record and apply plugins and inserts on each bus… and can have more buses than one would have on a $3000 hardware mixer… never mind that each bus can have a different number of channels… or that each bus can have a different number of input ports as output ports… and so on. However, if we have something else we want to record with, we can save memory by simply using buses in Ardour to mix and mold the audio.
And don’t worry, we’ll be covering each feature I just described as part of this project, since they will all be used. However, at this point, we want to finish making the microphone tracks, so here:
Then, click “Add.” Now, you’ll have four new tracks in Ardour. Go ahead and name them accordingly.
Now, we will repeat the process, but instead of mono, we want these to be stereo. I will call them “Skype,” “Music,” “Sound Effects,” and “Final Mix.”
So, now we have Ardour with 8 tracks, four of which are mono (the four microphones), and four stereo, as well as the stereo master bus. Now you have enough tracks to keep everyone and everything in your podcast recording separate, and so can be cleaned up, better mixed, and mastered during postprocessing… say in case you want to offer a higher-quality podcast feed than the streamcast can handle… or perhaps as an enticement for membership? I’ll leave the reason to you.
We’ll handle the connections later, since the DAW actually connects to every single other application in our session, except for one of the Jamin apps, which will be solely used by IDJC to master the streaming feed.
Now, go ahead and save the project. And, since Ardour does not save with the project, go into its Session menu and save the Ardour session as well.
Connecting Skype by Bridge
Skype does not support Jack natively. This is why I latched hardcore on the idea of the Jack-Alsa bridge; it allows a persistent, independent connection to Jack, meaning that it is created, it stays there, and only Skype will be heard through it.
I have Skype set up on Alsa-Jack Bridge 1. So, the following commands will be used to connect it to this session. If you used the Jack-Alsa Bridge Kit, especially while setting up using the Ubuntu Setup article, then you can actually use these lined verbatim by copy and paste.
To Skype: alsa_out -j "To Skype" -dalsa_output_1 -q 1
From Skype: alsa_in -j "From Skype" -dalsa_input_1 -q 1
Now, keep in mind that since the bridges are a hack, Klaudia will not have entries for them, so in Claudia, you will need to use “Run Custom” to add the above bridge commands to the project. Also keep in mind that they are just links, so level 0 is all that they will ever need; this will allow them to be started and stopped.
Now, take a moment and save the project, so it will know to launch the bridges next time.
Depending on how you have your system set up, this step may not be necessary. Obviously, if you plan to take calls, having Skype itself loaded is important; the setups in the previous section created the Jack-Alsa bridges to allow Skype to make the connection, but does not actually launch Skype. If you want to launch it as part of this session, the following command should do it for you:
That being said, I generally have it started from system login; it is just as useful as an IM client as a voice communication program.
Once Skype is started, however you choose to do so, you need to make sure that Skype is connected to the Jack-Alsa bridge. This will happen in the “Sound Devices” tab of the Skype options dialog:
For this workflow, make sure the microphone is set to jack_capture_1, and the speakers set to jack_playback_1, thereby linking Skype to the first Jack-Alsa bridge.
NOTE: PulseAudio MUST NOT be running when starting Skype; if PulseAudio is active, Skype will refuse to use anything else to connect, rendering the Alsa-Jack bridge useless!
Adding Hydrogen for SFX
Once upon a time, I wrote an article about setting up the Hydrogen drum machine in order to act as a sound effects trigger. It would not be necessary in a normal podcast, as the SFX can be added in post-production. However, in a live show, as a a streamcast would be, you want to have the SFX ready at the press of a button, so we finally, a few months later, actually have a use for that article. Additionally, this can also be used for stingers between segments. This will allow Mixxx (set up below) to limit itself to the intro and end sequences.
First, let’s add Hydrogen to the project. Claudia users can skip the manual step this time.
Hydrogen SFX Machine: hydrogen -d jack -s 'PodcastSFX.h2song'
The “-d jack” means that we won’t need to go into Hydrogen’s settings and tell it to use Jack; it will use it automatically. The “-s ‘PodcastSFX.h2song’” means that the Hydrogen session will be saved, so you will be in the same “drumkit” (SFX) when this session starts again. That way, you won’t have to reselect the SFX set the next time you use this.
Hydrogen is level 1 capable, as this will allow Hydrogen to receive the “save” signal. When you save the project, Hydrogen will actually offer to save its session file (if it hasn’t already been saved for the first time) when you save the project.
In fact, now that Hydrogen is running, go ahead and save the project, and save the file Hydrogen offers.
And now for some music.
Adding a Music Player
Now, the IDJC has an excellent music player. However, the music player is internal to the program, and at no point can you separate it from the microphone output, which seriously limits its utility for this purpose. This means that it cannot be shunted into its own track in the DAW, so we will need another music player.
Into this mix, we bring the Mixxx. …Where did that rimshot come from? Huh. Must’ve been the wind.
Mixxx is, at its core, a music player. It has to be; it is a different DJ application, more for presenting a mix to a party than a playlist to an audience. However, it has all the features we need for our purposes… Jack connections, single-shot players that we can fade using a MIDI Control Surface (which is an excellent feature by itself; if you don’t have a surface, I recommend you get one), and a waveform display, which can be an absolute godsend when we are tracking our position in the ending music (perhaps timing our monologue against the end of the song).
This program will need to be set up on first run. It does not have individual sessions, just a global configuration. Additionally, it is a level 0 application.
The only command you need to know is its name, mixxx.
When Mixxx is started, you will see the following box:
Go ahead and “Reconfigure.” Since I have not written an article on this program yet, we’ll quickly (I hope) cover the options we will need to set here.
- Sound Hardware Tab:
- Set the sound API to “JACK Audio Connection Kit.”
- Set the sample rate to match your Jack session.
- Set the master to “system.” Nothing will happen in the graph (if you set the self-connection option correctly), but it makes Mixxx happy.
- Under MIDI Controllers, choose the controller name you want to set. (Skip if you don’t have a control surface.)
- Set to “enabled.”
- Add whichever controls you want to use, and what they will control in this program. The MIDI Learning Wizard should make this painless; just skip what we don’t need to set.
- Assign a slider to [master] -> volume (allows you to adjust the music)
- Assign a button to [Channel1] -> play (serves as both play and pause for the first-loaded song)
- Assign a button to [Channel2] -> play (same for the second song)
- Under Library, choose the folder containing all of the music you plan to use with this application. If it includes music for other projects, don’t worry, you can group them together later using the “Crates” feature.
- We can’t see the interface, so don’t worry about skin for now. The rest of the options have sane defaults, so we can keep them there.
- We don’t need to set anything in “Equalizers;” we plan to handle equalization in Ardour and Jamin.
- We don’t plan to be playing one song after another, so we can leave crossfader as it is.
- Recording is also not needed… we have Ardour for that.
- Beats Per Minute detection is not needed, so we can leave this as it is.
- Make sure all normalization options are enabled. The initial boost can remain as it is.
- We don’t need turntables, so this page can be left alone.
- The IDJC is going to be the tool to broadcast, since Mixxx doesn’t have any facility for microphone input or phone handling. We can leave the broadcast options alone.
At this point, you should no longer see the warning, and the Mixxx main window will appear:
Beautiful, isn’t she? Now, yours may look a little different (and I have already scanned my library of music in… research for the tardy Mixxx article… I will get to it soon, I promise!). Not a problem, if you want to see what themes are available, we can go to “Options” and “Preferences,” and return to that “interface” page we skipped earlier. Now, we can cycle through the skins, and select the one we like best.
You’ll notice that some skins have different window sizes; Mixxx does not do resizing, and the themes determine the final window size; anything larger will simply center the UI in the enlarged border. So pick the UI size and appearance you like best.
Grouping our Music
Remember when I said we could group our music into “crates?” To do this, we simply need to right-click on the “Crates” option and select “New Crate.” Then I put my super-secret, ultra-experimental name on the crate and click “OK.”
Meh. Who am I kidding?
Now we have a crate, so we go back to our massive library, and select the songs we want to use in our podcast for intro, outro, and stingers. We right-click on each, click on “Add to crate” and select the crate we just created.
Once we have the desired music in the crate, we can select it, and we’ll see only our selections.
In Mixxx, the default behavior is that you have to manually load music into the player before you can play it. You can set it to play one song after the other with the auto-dj, but that’s not what we need here, since we want the music to be played at the beginning and at the end.
To do this, we add the beginning song to deck 1, and the ending song to deck 2. Set deck one to maximum volume, while we set deck to to minimum volume (we want to fade deck 1 out as the show begins, and to fade in deck 2 as the show ends)
Okay, at this point, Mixxx should be more or less ready. Unfortunately, its setup is not localized, so we will not be able to save its settings in the Ladish project at this time. If you do copy the session folder to another system, you will need to re-setup Mixxx.
At any rate, let’s save the Ladish project, to at least make sure that Mixx is part of the startup.
Adding the DJ Console
We’re nearly done setting up the applications, two (technically 3) more to go. Next, we will get the Internet DJ Console added to the application list.
The IDJC is another not-in-Klaudia application, so it will have to be added as a custom application in Claudia. In this case, the command is:
Internet DJ Console: idjc -p Podcast
The “-p Podcast” means that the IDJC profile we’ll use is the “Podcast” profile. We can set IDJC to level 0; it stays running in level 1 when saving, but the way the item in the flowcanvas blinks makes me wonder if it’s just restarting when it crashes.
Bringing in the Jamin
Next, we want to make sure we are optimizing the sound of both the stream and the sound of the final mix. So, here we will want to launch two instances of Jamin. These two instances are going to be placed as an insert on the master bus for Ardour, and as a DSP plugin for the IDJC console. In both these cases, the idea is to ensure that the sound is good enough for broadcast (IDJC) and distribution (Ardour master bus).
First, we want to bring up both instances of Jamin, and give each its own profile, in order to allow them to have independent settings (what may work for a stream might not be best for a master). To do this, we will launch the app twice from Klaudia or Gladish.
Jamin (Ardour): jamin -f "ardour.jam"
Jamin (IDJC): jamin -f "idjc.jam"
Jamin is not level-1 compatible, so we’ll keep it at level 0 for now.
At this point, the next step should be obvious. Save the Ladish session to preserve the application manifest.
Making the connections
At this point, all the relevant applications should be available and ready to connect. Thanks to the settings made at the beginning of the process, nothing at this time should be connected, except for the outside studio. We will start to change that, but first, there is one connection we need to make that cannot be done within the studio interface.
Connecting IDJC’s Player and Streamer
The Internet DJ Console is a 2-part application. The first part, the player, handles all the audio playing and mixing of the microphones and auxiliary connections. The second part, the streaming connection manager, handles the communication with shoutcast and icecast servers.
Under normal circumstances, the connection should automatically be made between IDJC’s player and streamer, except we explicitly set Jack to prevent this connection. Additionally, the streamer, for some reason, cannot be seen in the room environment, or even in the studio environment.
Because the streamer is only visible in the native Jack environment, we need to look at a raw Jack display to correct the issue. Claudia does not have this feature, but you can use Patchage. Alternatively, Gladish can enable the Raw Jack view by selecting the “View” menu, and then “JACK.”
In any event, you will see an unholy mess. In both Gladish and Patchage, you can use the “Arrange” command in the “View” menu to straighten things up.
Now, you can see “idjc-sc” and “idjc-mx”. These are the stream control and the mixer (player), respectively. What you need to do is connect the stream control’s inputs to the “stream out” outputs of the player box, like this:
At this point, you can close Patchage and return to Claudia, or disable the “Jack” view in Gladish. Everything else can be done just fine from the normal session view. Make sure you save both project and studio in this case, to ensure this connection is preserved.
Update: Apparently, even then, the connection is not being preserved. I am currently looking into solutions for the problem; I will update this article when one is found or produced. This won’t stop this project from working, particularly if you don’t need to stream the podcast, but if you need streaming, you will probably need to take this extra step each time you start this workflow. The rest of the connections will be preserved, however.
Also, it is to be noted that I was incorrect: The “sc” does not stand for “stream control,” but “source client.” I’m not sure that name really clarifies much for the non-networking type, but that’s the official word, so I’m not gonna argue. 😉
Update: The issue has been resolved in the development version; expect the source client to be visible (as part of the main box) in an upcoming version of the Internet DJ Console!
Now, before I begin making connections between the programs, I like to arrange the boxes to make the patterns easy to follow. On the left side, all the source boxes, including the microphones, Mixx, Hydrogen, and the “From Skype” box. Then, Ardour and its Jamin (all the audio comes through Ardour to be recorded). Following this, we have a column with the Internet DJ Console and its Jamin box. Finally, the outputs, sending the final audio (minus stream) to Skype and the headphones.
Inputs to Ardour
Now, we begin by sending input into their designated channels in Ardour. Save the project to store the connections.
Ardour Internal Connections
Next, we connect all the outputs for the items we just connected to the master bus. Save the project to store the connections.
You will notice that while a number of these tracks have one single input, they have two outputs. This is because by default, a track in Ardour will have outputs equal in number to the number of channels in the master bus. This allows you to take an audio signal from a mono source, like the microphones, and adjust its panning, allowing, for example, having four different people on four different microphones, coming from slightly different positions in the stereo field.
Inserting Jamin into Ardour
Next, we want to create an “insert” in the master bus. This insert will treat the program connected to it like a plugin. This insert is specifically to add Jamin as a plugin in the master bus. To create the insert, we need to have the mixer window open in Ardour… if it’s not already open, you can open it by clicking on the “Window” menu and then “Show Mixer.”
In the bottom empty box of the “master bus” column (the one far to the right), you need to right-click and select “New Insert.” This will show “(insert 1)” in the box, and in the connection graph, you will see entries appear in the Ardour box for the insert.
By right-clicking the insert in the Ardour mixer, we can rename it to “Jamin,” which will make it more descriptive overall. For now, we will leave it disabled; once it is enabled, the parentheses will disappear, and the audio sent to the master bus will be piped through Jamin before leaving the bus. But this should be disabled during broadcasting/recording, and enabled once it’s time for postprocessing.
Real quickly, go ahead and save Ardour’s session. This will ensure that the insert control will remain present when Ardour is started again later.
Enabled or disabled, it’s useless without Jamin actually being connected to it, so we will take a moment to do that now, moving the Jamin box to be closer to this section of the Ardour box.
Now, go ahead and save the Ladish session and project. We want to make sure these connections remain.
Connecting the Final Mix Track
We’ve got one more step inside of Ardour, and we can move onto the next part of the connection process. In this case, we will be connecting the master bus to the final recording track. This is pretty simple; all you need to do is connect the master outputs to the “Final Mix” inputs. Leave the “Final Mix” outputs alone; you can connect them when you are no longer recording, in order to listen to the final product while mixing and mastering.
Once the connection is made, save the project and session, as usual.
Connecting Ardour and IDJC
Now, we’re ready to move the signals onto the next step of their journey, the Internet DJ Console. Now, we want to connect the tracks in Ardour to their associated tracks in the IDJC.
First, we want to send the microphones. Remember that all four microphones are stereo output, but mono input. In this case, we can safely merge the two channels back into the one microphone-in channel on IDJC… if there are any gain issues, we can adjust the gain in IDJC to correct them. Now save project.
Next, the music and sound effects will need to be placed into the stream. The Auxiliary channel in IDJC can be used for this purpose, so go ahead and connect them to it. Make sure channel 1 from Ardour is connected to the left IDJC Aux channel, and the second is on the right channel. Now save project.
Next, we want our Skype caller to be heard over the stream, so we connect the Skype channel to the VoIP lines in IDJC. Save Project.
At this point, you’re beginning to see a lot of spaghetti. However, if you’ve been following along (or are already comfortable with Jack), you should be realizing that you know what each and every connection in that graph does, and it’s actually understandable… at least I hope you do.
Inserting Jamin into IDJC
At this point, we are completely finished with Ardour… it has been completely connected as needed until the post-processing step, when the final mix can be connected to the headphones for project work.
Next, we want the IDJC Jamin filter to be plugged in. Jamin uses the “DSP” connections in the same way that Ardour uses inserts, so we simply connect Jamin to the IDJC DSP connections. Save project.
Connecting IDJC Outputs
The final connections are now ready to be made… audio output. At the beginning of this process, we connected the IDJC player to the stream controller, so all we have left is the headphones, for you to hear the stream, and the Skype control, for the caller to hear their end. So we simply connect the “DJ Out” channels to the headphones, and the VoIP Out channels to Skype. Save project.
Congratulations! You now have a complete workflow set up to allow a streaming podcast, splitting all inputs into their own tracks, mastering both broadcast and final mix, and even allowing you to take calls (or collaborate with a remote co-host) using Skype.
Some Additional Notes
While doable, remember that much of the linux audio tools are still undergoing development, and some have different levels of support for Ladish, and yet others have hardcoded default locations, meaning that while a profile created with this session can start the application and link it up correctly on another system, the files that the program saves may not be transportable. This usually can be fixed by going into each program, and saving its settings to the folder containing the session profile.
Now, at the moment, you need to make sure that you go through the different programs, and make sure they save their projects to the Ladish project folder. This will ensure that consistency will be available, and that the programs will not complain that a project is not available.
When it’s time to shut down, manually close the individual programs first, before unloading the project. Otherwise, it is possible that something won’t get saved. Once version 1 of Ladish is released, the manual steps will likely no longer be needed, as the expanded levels will handle saving and safely shutting down applications.
…And that’s it! You now have a saved workflow; you can close out of Ladish and Jack, confident that you can come back later, open the project, and Ladish will automatically launch every single program and make every single connection, at which point, you can just begin your podcast stream.
Now, go on. Have fun, and make something good for your audience!