Categories
Mac

Record multi-track Skype group call on OS X

A friend of mine and I host a weekly podcast and, as it often happens, we speak with our guests via Skype. For a while we had everyone record his own audio, since we wanted to have a separate track for each person in order to get the best possible audio quality. But that was inconvenient, both for our guest and for us, as we had to wait everyone to send us his audio before mixing and editing the episode. Recording Skype’s group call in a conventional way wasn’t a better solution. We’d only have two separate tracks: mine and everybody else’s, This is fine if there is only one person other than me, but it’s not with more guests.
So I started to think on possible solutions, and the best one that came to my mind was to have a separate instance of Skype running for each guest (I’ll explain how to do this later on) and use Ableton Live to record each track and to manage the audio routing.

Ableton Live is quite expensive, though, and if you don’t already have some experience with it that justifies purchasing a license, I’d advise you to check out snkl’s post that explains in detail how to achieve the same result with a much cheaper (but still great) app: Rogue Amoeba’s Audio Hijack 3.

My awesome hand-drawn scheme
My awesome hand-drawn scheme

To manage the audio, we need some sort of virtual audio cables to connect Skype to Ableton Live. The best tool is SoundFlower, so head over to their site, download and install it. However, it is not ready for our purpose right out of the box: we need 2 “virtual audio cables” for each Skype instance, and Soundflower only ships with 2 of them enabled by default (and only one of which, the 2 channel one, is suited for our needs). I managed to edit Soundflower’s plist file to get more.

I created an edited DMG which installs my mod. To use it remove any previous versions you might have installed (use the uninstaller contained in the offical DMG, then reboot your Mac), download mine, and install as you would normally.

If you prefer to do things manually, here’s what you have to do:

  1. Download my modified Info.plist (which is configured to create 9 virtual audio cables, you can add more following the mini-guide at the end of this post)
  2. Open the Terminal (which is located in /Applications/Utilities), and execute this command twice:
    sudo kextunload /System/Library/Extensions/Soundflower.kext
    You’ll have to enter your user password (note that you have to use an administrator account to be able to run commands with sudo)
  3. Go to /System/Library/Extensions/
  4. Right click on Soundflower.kext and select “Show Package Contents”
  5. Drag my Info.plist into the “Contents” folder you see in the package, and replace the existing file. The finder will prompt for you password.
  6. Run these commands:
    sudo chown root:wheel /System/Library/Extensions/Soundflower.kext/Contents/Info.plist
    sudo chmod 755 /System/Library/Extensions/Soundflower.kext/Contents/Info.plist
    sudo kextload /System/Library/Extensions/Soundflower.kext

The next step is to get multiple Skype instances running at the same time. You can’t just copy Skype.app somewhere else and run it: it complains that there’s already another Skype running and it won’t start. To do the trick you have to run Skype’s executable as a different user on the same machine, so you need as many users available as the number of guests you wish to have. Head over to System Preferences, Users & Groups, if necessary unlock the preference pane by clicking on the lock in the bottom left corner, click on the plus sign and add as many users as needed. If you already have enough users on your Mac, you can skip this step.

Adding users in OS X
Adding users in OS X

You’ll also have to create a different Skype user for each guest, since everybody will be in his separate call. I won’t bother to explain how to do this, since it’s pretty straightforward.

Once you have enough users on you Mac, it’s time to start each Skype instance. To do so, open the Terminal and run this command:

su youruser -c '/Applications/Skype.app/Contents/MacOS/Skype'

Replace “youruser” with the username you chose, and press enter. You’ll have to enter the user’s password, and login to his Skype account.

Repeat this step for each Skype instance you need, you can do so by creating a new tab in you terminal (Command+T) and running the same command again, changing only the username.

Next up, we have to configure each Skype instance to use Soundflower as its sound interface, more specifically one as input and a second one as output, hence the need for 2 Soundflower cables for each Skype. To do so, open the first Skype’s prefences, go to the Audio/Video section and set “Soundflower (2ch) – A” as microphone (i.e. the input sound card) and “Soundflower (2ch) – B” as the output. Also make sure that “Automatically adjust microphone settings” is deselected. Do the same in every Skype, but NEVER use the same Soundflower twice: the second Skype will use C and D, the third E and F, and so on. Don’t even bother to try Skype’s test call, it won’t work without some more steps.

Skype’s audio preferences
Skype’s audio preferences

Now that we configured the Skype side, we have to prepare everything for Ableton Live: it needs a sound card with many inputs and outputs to route them, but each of our Soundflower cables is a sound card of its own in OS X’s eyes. So go ahead and open Audio/MIDI Setup, which you can find in /Applications/Utilities/ or through a quick Spotlight search. In its Audio window, click on the plus sign in the bottom left corner and select “Create Aggregate Device”.

Creating an Aggregate Audio Device
Creating an Aggregate Audio Device

You can rename the audio device if you wish to. I chose the name EasyApple, the name of my podcast. The next step is to select which sound cards will be added to the aggregate device. Be careful to follow the right order when you select them, otherwise things could become messy in Ableton Live. First select your microphone input, your headphones output, then all of your Soundflower sound cards (from A to I, if you used my plist or DMG). Your aggregate device will now have bunch of inputs and outputs, and all of them will be used.

Adding sound cards to an Aggregate Audio Device
Adding sound cards to an Aggregate Audio Device

Now fire up Ableton Live, open its preferences and select the audio tab. Select your newly created aggregate audio device both for input and output, then open the input settings and set them as in the following screenshot.

Ableton Live's input config
Ableton Live’s input config

In this window we can configure which of the inputs are available in Ableton Live. We can choose if we want each stereo input to appear as a single stereo input or two separate mono inputs, one for each channel. I suggest to use split mono inputs as shown in the screenshot, because some USB microphones, while presenting to the system a stereo audio interface, actually send the audio only to one channel, usually the left one. This way we can always choose the correct channel.

You might be wondering why some inputs are not enabled. Soundflower sound cards (or “virtual audio cables”) do only one thing: send whatever comes into their inputs to their outputs. So we are only selecting those channels that are used as “Speakers” in Skype as our inputs (i.e. Soundflower B, D, F, H), plus our own microphone. Summing up, inputs 1/2 is our microphone, 5/6 is Soundflower B, 9/10 is Soundflower D, and so on.

Do the same with the output settings, using this screenshot for reference

Ableton Live's output config
Ableton Live’s output config

Again, we only enable certain outputs: you never want to send your audio to a Soundflower instance that you are also using as an input, as it would create a dangerous feedback loop. This time we can safely chose the grouped stereo outputs: 1/2 is for our headphones, 3/4 is Soundflower A (which is set as the microphone input in the first Skype instance), 7/8 is Soundflower C, and so on.

Here comes the fun part, we have to create our virtual mixer in Ableton. First, get rid of the MIDI track that that is present by default: just click on its name on the top and hit the backspace key.

If it’s not already activated, click on the IO icon on the right side of the window, just below the scrollbar.

We already have one track, which we’ll use for our microphone, but we need more of them, so add as many of them as there are Skype instances (plus the one we already have for the microphone) by pressing Command+T.

It’s a good idea to rename each track: click on the first one, press Command+R and type Mic, as well use this one for our microphone. Do the same for the other tracks, and name them ”Skype AB/CD/EF/GH” or whatever you find appropriate. For example, if you always call the same person with the same Skype instance you might want to name the track after the called person, but that’s totally up to you.

The inputs are almost ready, but we also need a few outputs to feed back the audio to Skype. This is done through the so-called Return Tracks, the ones on the right side next to the master. There should already be two of them by default, add more of them by clicking on “Create/Add Return Track” on the menu bar (or press Command+Option+T) and match the number of Skype instances you have running. Rename them in the same way you renamed the input tracks. The usual “Skype AB/CD/EF/GH” will do just fine.

In the IO section of Live’s mixer, you have to change the Audio From setting of each input track to “Ext In”. Select channel 1 as the input for your microphone track (you can verify that you selected the right channel looking at the VU meters as you speak into the microphone), and click on the In button in the Monitor section below the dropdown channel selection menu.

Do the same for the Skype tracks, selecting channels in this order: 5, 9, 13, 17.

Input channels in Live
Input channels in Live

In the IO section of each return track select “Ext Out” in the Audio To (which defaults to master) drop down menu, then select the output channels in this order: 3/4, 7/8, 11/12, 15/16.

Return Tracks in Live
Return Tracks in Live

We’ll use these send tracks to send to each Skype what it needs: everyone but himself, to avoid feedback loops. To do so turn all the send knobs under each input channel all the way up for your microphone channel, so that everyone can hear you. In the Skype input channels turn up all the knobs BUT the one for its output: for Skype 1 you’ll have to turn up all but the first knobs, in Skype 2 all but the second, and so on.

Send knobs in Live's input channels
Send knobs in Live’s input channels

We’re almost done, the only missing part is our headphones: select channel 1/2 as the cue output (in the master track), then click on the Solo button that is on the left of the Master volume fader, and it will toggle to Cue. Now click while holding the Command key on the little headphone buttons under each input track you wish to listen to while recording. As the master output, select channel 15/16, which is our last Soundflower instance (“Soundflower (2ch) – I”, if you’re using my plist or DMG). You can now use this sound card as the input of every application you need to feed with the complete output of your conversation. I use it to have a backup recording in Audacity, in the unlikely event that Ableton crashes, and as Nicecast’s input to stream our podcast live.

Now the last part: click on the record button under each input track while holding the Command key.

Live's complete configuration
Live’s complete configuration

Just press the record button on Live’s top bar and you’re done: you’re (hopefully) routing the audio in the right way while also recording each person in its own track. You can also take advantage of Live’s effects to process your inputs in realtime while preserving the original audio for further editing once the recording has ended.

Additional tips

Adding more Soundflower instances

Sometimes you will need even more Soundflower instances, not necessarily for the purpose of recording a podcast. To do so you just have to edit the Info.plist file you find in /System/Library/Extensions/Soundflower.kext/Contents/

To be able to edit it, first unload Soundflower by running this command twice:

sudo kextunload /System/Library/Extensions/Soundflower.kext

Since this Info.plist is a system file, you will not be able to edit it in a regular editor such as TextEdit, but you would have to use the terminal. To avoid this unnecessary complexity just copy it to the Desktop (to get it, navigate to /System/Library/Extensions/, right click on Soundflower.kext and select “Show Package Contents”: you’ll find Info.plist inside the Content folder). Open your copy of Info.plist and look for a section like this:

<dict>
	<key>BlockSize</key>
	<integer>8192</integer>
	<key>Description</key>
	<string>Soundflower (2ch)</string>
	<key>Formats</key>
	<array>
		<dict>
			<key>IOAudioStreamAlignment</key>
			<integer>1</integer>
			<key>IOAudioStreamBitDepth</key>
			<integer>32</integer>
			<key>IOAudioStreamBitWidth</key>
			<integer>32</integer>
			<key>IOAudioStreamByteOrder</key>
			<integer>0</integer>
			<key>IOAudioStreamDriverTag</key>
			<integer>0</integer>
			<key>IOAudioStreamIsMixable</key>
			<integer>1</integer>
			<key>IOAudioStreamNumChannels</key>
			<integer>2</integer>
			<key>IOAudioStreamNumericRepresentation</key>
			<integer>1936289396</integer>
			<key>IOAudioStreamSampleFormat</key>
			<integer>1819304813</integer>
		</dict>
	</array>
	<key>NumBlocks</key>
	<integer>2</integer>
	<key>NumStreams</key>
	<integer>1</integer>
	<key>SampleRates</key>
	<array>
		<integer>44100</integer>
		<integer>48000</integer>
		<integer>88200</integer>
		<integer>96000</integer>
		<integer>176400</integer>
		<integer>192000</integer>
	</array>
</dict>

Just make as many copies of this section just below it, changing ONLY its name (see the bold part above).

Now save the file and drag your edited copy back into its place. You’ll have to authenticate and provide your password. At this point we need to restore the proper file permissions and load Soundflower:

sudo chown root:wheel /System/Library/Extensions/Soundflower.kext/Contents/Info.plist
sudo chmod 755 /System/Library/Extensions/Soundflower.kext/Contents/Info.plist
sudo kextload /System/Library/Extensions/Soundflower.kext

Skype port forwarding

Skype is a great tool, and part of its success is due to its ease of use: it needs pretty much zero configuration.  Our regular home network environments are not ideal for it, though: we are almost always behind a NAT router, and we cannot connect directly to the person we’re calling, so Skype is forced to route our conversation through a third party (one of their servers, most of the time). While this is fine from a security standpoint (Skype calls are well encrypted), it is not good for latency or potential packet loss. To avoid this unnecessary routing, just forward a port of your choice for each Skype instance you will be running and set it in the Advanced tab of Skype’s preferences.

Skype's port settings
Skype’s port settings

Add a Jingle track

Since we’re already using Ableton Live, why not add some jingles ready to be played as needed? While this is not a necessary step since we’d be editing our podcast afterwards, it could be a good enhancement for live-streamed episodes. To do so, just add another track (Command+T), turn all its Send knobs all the way up (unless you don’t want some of your guests to hear these sounds) and drag your audio files into any available slot in the track. You’ll also have to Command-click the little headphone button to be able to listen yourself to what you play in this track.

Useful Ableton effects

Ableton Live is a powerful tool, so you might want to add some effects into each track. Popular choices will be a compressor and a limiter. Look for the audio effects section in the left column, pick an effect and drag it over to the track you want to add it to. Refer to the dozens of tutorials about Live and its effects you can find online (YouTube is a great resource for this) to tweak your setup.

Edited 20/12/2012

I’ve now updated my package with the latest version of Soundflower (1.6.6b) and edited it slightly as DoctorMikeReddy suggested to restore Soundflowerbed compatibility.

Video Tutorial

Following a request from a reader, I made a screencast showing the basic procedure. Note that English is not my first language and the video was not planned in advance, so you’ll have to bear with my hiccups.

40 replies on “Record multi-track Skype group call on OS X”

Thank you for the writeup, I was frustrated with the lack of a separate track for recording skype conversations between multiple other people – this information allowed me to create a setup that will work for me and allow separate audio for each guest.

I uninstalled then installed again, and rebooted and now I can see the extra 2ch virtual leads. However, Soundflowerbed shows Soundflower not installed error. Is there any chance you could update your mod for 1.6.6b as this fixes some bugs for OS 10.7.5

I still have no idea why the manual mod I did on Info.plist didn’t work for 1.6.6b but it is 64ch now, as 16ch is no longer available.

Unfortunately the SoundFlowerBed has that issue with this kind of mod, either manual or through my package, that should be addressed by the developer.

I will update the mode for 1.6.6b ASAP.

There’s something wrong with the instructions for editing Info.plist

I tried to reduce the number of virtual channels in your modded version, and I still see the same number as originally installed. Something is preventing the new Info.plist from being recognised. Any ideas?

Got it recognising the Info.plist changes by following this:

sudo -s
sudo chown -R root:wheel /System/Library/Extensions/[NAME].kext
sudo chmod -R 755 /System/Library/Extensions/[NAME].kext

NOTE: we have to change the ownership, etc, of the kext as well as the Info.plist

Force rebuilding of the kexts by:

kextcache -a i386 -K /mach_kernel -m /System/Library/Extensions.mkext /System/Library/Extensions

Loading kext files on the fly:
sudo -s
kextload -v [NAME].kext

Info from:
http://osx86.wikidot.com/en:how-to-s#toc1

All this fixes Soundflowerbed as well!!!!

I updated my package to 1.6.6b and followed your trick to restore compatibility with Soundflowerbed, you can find it here.

Thank you for your help!

Hi Luca,
I want to record live with another user, with instruments thru skype and ableton. We use a sound card to connect our instruments. I try to make this connection without sound card, but with sound card is different. How can I do it?

Thanks and congratulations for this great thing that you made it happen!

It shouldn’t be much different wether you’re using the external sound card or not, just make sure to add ALL the inputs you are going to use to the aggregate device in the audio/MIDI settings window. Then it’s a matter of selecting the correct input/outputs in Live and set up a proper audio routing, if you need something fancy, or just hit the record button otherwise.

Hi, Luca. Highly informative article,
on an expert level. I got a bit different and easier target but still can not reach it –
one-to-one tuition of Ableton, with desktop and audio stream sharing via skype.

I’ve tried all the combinations possible, read a TON of articles in the web but still can not set it up –
and here I mean the System Audio/Audio-Midi Tab/Skype preferences as with Live outputs it’s simple.

Would be thankful for your advice.
Andrey, Kiev, Ukraine

Hi Andrey,
so basically you need to send to Skype your Ableton output together with your voice, correct?

Hi Luca! Thanks a lot for this stuff.
I updated to OSX10.10 and now i can’t modify your package. I get this error while doing the kextload:

/System/Library/Extensions/Soundflower.kext failed to load – (libkern/kext) not loadable (reason unspecified); check the system/kernel logs for errors or try kextutil(8).

I just need an extra instance of the 2ch streams from your package. Any ideas?
Thanks 🙂

Hi Enric,
That’s due to the fact that Yosemite requires all Kexts to be cryptographically signed, and Soundflower isn’t signed.
To allow unsigned Kexts run

sudo nvram boot-args="kext-dev-mode=1"

And reboot.

Everything should start working again.

Hi Luca
Thanks for this… Brilliant stuff! I’ve got this going and everything is cool, but I can’t get Soundflower Bed to work. I know I don’t need it for this setup using aggregate device to monitor, but just wondered if there is some way of getting it going because I do use Soundflower bed for other applications.

At the moment when I start it up, it appears in the menu for a brief second and then disappears. I’m on Yosemite 10.10.2. I ran your setup from the updated Mike Reddy version 1.6.6b but it still doesnt’ work. I know it may be a Yosemite signed thing. I’m not a programmer but I know how to use terminal. Any ideas? Thanks again

Hi Stephen,
I heard a lot of people having issues with Soundflower Bed lately.
In order for it to work you must have the standard ‘Soundflower (2ch)’ and ‘Soundflower (64ch)’ instances, otherwise it will say that you don’t have Soundflower installed at all. From what you’re describing, it looks like it is crashing altogether.
My suggestion would be to just give up on it and use Rogue Amoeba’s LineIn, a free utility that lets you pass audio between the inputs and the outputs you select.

Thanks Luca, Yes I don’t think it’s crashing because I didn’t have the standard 2ch and 64ch installed.
Yosemite just doesn’t seem to like soundflower. The only version I can get going with yosemite is 1.6.2 which is the 2ch/16 channel one.

Everything works fine with that version, but when I install the 1.6.6b version it starts crashing.

I’ve got Line in and have used it for a while, but not thought about it for monitoring. Is that what you’re suggesting? use it to monitor the soundflower outputs?

Hi Luca,
Thanks so much for this Mod, everything works great!

My only problem is that I can’t add more Soundflower instances, which I would like to do. I followed your steps but I can’t seem to unload Soundflower in the Terminal with the command you gave.

I keep getting this message:

(kernel) Can’t unload kext com.Cycling74.driver.Soundflower; classes have instances:
(kernel) Kext com.Cycling74.driver.Soundflower class SoundflowerEngine has 11 instances.
(kernel) Kext com.Cycling74.driver.Soundflower class com_cycling74_driver_SoundflowerDevice has 1 instance.
Failed to unload com.Cycling74.driver.Soundflower – (libkern/kext) kext is in use or retained (cannot unload).

Is there another command I can use, any help would be appreciated. I’m running OS X 10.9.5 Mavericks.

Thanks

Hi Steve,
I usually get the same error the first time I run that command, but if I immediately run it a second time it works.
Also, you might want to check out my little SoundBlossomer tool to make the process of adding and removing Soundflower instances a bit easier.

Thanks for the ultra fast reply!!
I will try out that app right now, as the command still doesn’t work, even running it twice.

Hey Luca,

So i created one new instance in SoundBlossomer, which is so simple, and it said that it had successfully applied the changes. But in the Audio/MIDI Setup nothing has change??

I even restarted my computer and still no changes.

Am I missing something?

Hey Luca

So it seems not a single thing I try with either the Terminal or SoundBlossomer works in creating more instances. In fact SoundBlossomer seems to make things worse by causing every instance to go offline and fail to work anymore. I then have to uninstall and reinsall Soundflower. I’ve tried for the past few hours but to no avail.

If I don’t touch anything however, the 10 instances you made work great!! And it makes my whole setup work beautifully. So thanks for those.

But I do have a pretty far fetched request that would help me out so much if you are willing, as I really need many more instances.
I sort of feel dumb for asking but would there be a any chance you could send me a Mod version of the software with 60 instances (of 2ch)…it would help me so greatly!!

Thanks in advance.

Hello. I’m so glad to have found this write up; it’s been a huge blessing and I’ve managed to route the inputs/outputs as directed. I found an easier way to launch two instances of Skype though, bypassing the whole terminal procedure and multi user setup. There’s an app called Skype Launcher that gets that part of the job done.

There is just one more thing I’m looking to do, and I somehow managed to get it working this morning with a fresh mind, but after work I closed it for some reason, wanting to start from the beginning I assume, and haven’t been able to replicate this step again.

I would like to route iTunes into an audio track in Ableton, as I did this morning, from channels 13/14 (stereo input), and route them into “To Skype 1” and “To Skype 2”. But I’m not able to push the audio into Ableton for some reason.

I’ve tried creating a Multi-Output Device in MIDI, with a Built-in output and channel F as output (which is 13/14), but the audio isn’t going into Ableton.

I’m not sure how I did it this morning, but I would appreciate your help so greatly; you could probably figure it out.

If you would be willing to add me on Skype and maybe we could talk about it for a few minutes, please feel free to do so. My username is: pdiatt

Otherwise I would also be thankful if you would give me some leads here, please.

Thank you for this tutorial. And Thank God that I was led to find it.

Take care.

Hi Paul,
sorry for the great delay in my response but your comment was trapped in the spam filter and WordPress thought it was a great idea not to notify me.
Anyway, from what I can tell you’ve encountered a common issue I often face myself: some channels don’t get the audio even if volumes and routing are ok. I think it’s a Soundflower-related issue, and most of the time it solves itself by toggling the mute checkmark of the output tab of a Soundflower instance a few times in MIDI audio settings.

Let me know if that solves it for you.
Luca

Any chance you will revisit this great set-up with Loopback instead of Soundflower?

Hi Dan,
actually I did that when Loopback was still in beta, I should really do a writeup about that.
The sad thing is that you still need a bunch of virtual sound cards (created by Loopback, but a bunch of them nonetheless) to handle the audio going back to Skype, while you can use Loopback’s routing abilities to have a single sound card that gets the audio from all your instances of Skype and maps them to a multi-channel output (screenshot here).
Then you still need to join all of them using an aggregate audio device.

Loopbacks makes things a little better, but sadly it’s not the definitive solution I hoped it would be.

Leave a Reply to EB 38 Democratizar el podcasting con Alex Ballesté y Juanjo Meroño | zetatesters Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.