Skip to content

Instantly share code, notes, and snippets.

@dyscribe
Last active October 11, 2018 01:31
Show Gist options
  • Save dyscribe/e2e5ea25bfe9ea8b74de2bbf93f39f9c to your computer and use it in GitHub Desktop.
Save dyscribe/e2e5ea25bfe9ea8b74de2bbf93f39f9c to your computer and use it in GitHub Desktop.
A tutorial on how to record a Skype call in Logic Pro X (or your DAW) on a Mac for free and without any additional hardware.

Use case and assumptions

  • You want to record a Skype call with separate tracks for you and your guest in Logic Pro X (or another DAW) on a Mac without any additional hardware
  • You are willing to use and modify open source software to do it free (there are payed alternatives like https://www.rogueamoeba.com/loopback/)
  • You will end up having a virtual aggregated sound device, that contains the original soundcard you are using plus 2 virtual channels to send and receive Skype audio
  • This tutorial will help you to perform the setup for recording a 1:1 dialogue in Skype on separate tracks. If you want to record several participants you will need to adjust the setup

Prerequisits

Soundflower is no software from an Apple authorized vendor, so you might need to adjust your system preferences, to be able to install software from third party vendors. Here's how to do that: https://www.tekrevue.com/tip/gatekeeper-macos-sierra/

Installation

Step 1: Soundflower installation and setup guide

  • Download and install Soundflower from here http://marius-eisenbraun.de/soundflower-ultraschall-edition/ (german). Find the download button on the bottom of the page.
  • It is a preconfigured version that will already have a set of virtual devices prepared (see soundflower-ultrasound.kext)
  • To make adjustments go to /System/Library/Extensions/and alt-click (right click) on soundflower.kext > open package

If the System folder is not displayed: ⌘-Shift-G is the hotkey for the "Go to Folder" dropdown menu. Just type in /System/Library/Extensions and click Go to open that folder.

  • Open the containing Info.plist file in an text editor of your choice
  • Copy the content of the prepared soundflower-modified.kext from this gist or create the desired amount of virtual channel and adjust their naming to your needs

Note: Backup your original file before making your changes, in case of errors. You will find both, the original and my modified version below. Be aware that you need an even total number of channels or you could confuse your DAWs stereo routing. Either create stereo channels or pairs of 2 mono channels (if mono is needed).

Tipps

For the changes to become effective you need to load / unload the kext file in order to apply changes. (Optional: Create an alias in your terminal to ease load and unload.)

Commands

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

You could also setup an alias / shortcommand to ease the future use here's how to do that.... These are my aliases:

sfload='sudo kextload /System/Library/Extensions/Soundflower.kext'
sfunload='sudo kextunload /System/Library/Extensions/Soundflower.kext'

Tip: Run the command twice in row in case the first try delivers an error. You might need to repeat the loading procedure after a reboot. I never figured out when it "remembers" the setting and when it "forgets".

Step 2: Create an aggregated audio device on MacOS

  • Open Settings > Audio-Midi-Settings
  • Click the bottom left + symbol
  • Define a name for your aggregated device
  • Add your primary audio device and the Soundflower channels to it
  • Activate "drift" checkbox
  • Review the channel routings / channel numbers in the graphic of the aggregated audio device in order to route your DAW to the correct channels

Step 3: Logic Pro X (DAW) routing guide

  • Open Logic Pro X (or the DAW you are using)
  • Select the aggregate audio device as audio I/O in your preferences
  • Create a new project or template containing the needed channels for your recording (i.e. host, guest, music, etc.)
    • Create 2 audio tracks (I normally use mono channels for voice)
    • Create 1 virtual audio channel (BUS). This is where you will send the sound to, that your Skype partner is supposed to hear
  • Setup vocal channel 1 (yours)
    • Select the audio channel you want to record your voice on
    • Select your microphone as input source (in my chase channel 1 from my soundcard)
    • Set the primary output of your channel to "no output" (usually is primary / stereo out)  * Route the audio signal from your channel to the bus track (BUS1) (this will later send your voice signal on to your guests Skype)  
    • Enable input monitoring (if you want to hear yourself on the headphones while speaking)
  • Set up vocal channel 2 (guest)  * Select the guest audio channel and set its input to the Soundflower channel for "Podcast (Guest 01)" from your aggregated audio device settings (if you specified a different name, change accordingly)
    • We dont want to route this channel to the bus, but to our stereo / main out
    • Enable input monitoring
  • Route all other channels that the guest needs to hear to that BUS channel (like music tracks or such)
  • Set the Audio Ouput of the BUS channel to the according channel that belong to "Podcast (Skype Stream)" (if you specified a different name, change accordingly)

Step 4: Skype settings

Open the preference menu in Skype and set the channel I/O as follows:

  • Microphone: Podcast (Stream)
  • Speaker: Podcast (Guest 01)

Step 5: Testing

Arm your track and the Guest track, hit record and use the skype test call function to test your setup.

Have fun recording! Leave a comment if you found this helpful or have constructive feedback. Thanks!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>13C64</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Soundflower</string>
<key>CFBundleGetInfoString</key>
<string>Version 1.0 copyright © 2004-2012 Cycling '74</string>
<key>CFBundleIdentifier</key>
<string>com.Cycling74.driver.Soundflower</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Soundflower</string>
<key>CFBundlePackageType</key>
<string>KEXT</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>sFlo</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>5A3005</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>12F37</string>
<key>DTSDKName</key>
<string>macosx10.8</string>
<key>DTXcode</key>
<string>0502</string>
<key>DTXcodeBuild</key>
<string>5A3005</string>
<key>IOKitPersonalities</key>
<dict>
<key>PhantomAudioDriver</key>
<dict>
<key>AudioEngines</key>
<array>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>Podcast (Guest 01)</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>1</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>Podcast (Guest 02)</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>1</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>Podcast (Stream)</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>
</array>
<key>CFBundleIdentifier</key>
<string>com.Cycling74.driver.Soundflower</string>
<key>IOClass</key>
<string>com_cycling74_driver_SoundflowerDevice</string>
<key>IOMatchCategory</key>
<string>com_cycling74_driver_SoundflowerDevice</string>
<key>IOProviderClass</key>
<string>IOResources</string>
<key>IOResourceMatch</key>
<string>IOKit</string>
</dict>
</dict>
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IOAudioFamily</key>
<string>1.1fc6</string>
<key>com.apple.kpi.iokit</key>
<string>8.0</string>
<key>com.apple.kpi.libkern</key>
<string>8.0</string>
<key>com.apple.kpi.mach</key>
<string>8.0</string>
</dict>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>13C64</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Soundflower</string>
<key>CFBundleGetInfoString</key>
<string>Version 1.0 copyright © 2004-2012 Cycling '74</string>
<key>CFBundleIdentifier</key>
<string>com.Cycling74.driver.Soundflower</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Soundflower</string>
<key>CFBundlePackageType</key>
<string>KEXT</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>sFlo</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>5A3005</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>12F37</string>
<key>DTSDKName</key>
<string>macosx10.8</string>
<key>DTXcode</key>
<string>0502</string>
<key>DTXcodeBuild</key>
<string>5A3005</string>
<key>IOKitPersonalities</key>
<dict>
<key>PhantomAudioDriver</key>
<dict>
<key>AudioEngines</key>
<array>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>SF (Einspieler)</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>SF (Skype Gast)</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>1</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>SF (Skype Send)</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>1</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>SF (Stream)</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>SF (misc1)</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>SF (misc2)</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>
<dict>
<key>BlockSize</key>
<integer>8192</integer>
<key>Description</key>
<string>SF (misc3)</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>
</array>
<key>CFBundleIdentifier</key>
<string>com.Cycling74.driver.Soundflower</string>
<key>IOClass</key>
<string>com_cycling74_driver_SoundflowerDevice</string>
<key>IOMatchCategory</key>
<string>com_cycling74_driver_SoundflowerDevice</string>
<key>IOProviderClass</key>
<string>IOResources</string>
<key>IOResourceMatch</key>
<string>IOKit</string>
</dict>
</dict>
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IOAudioFamily</key>
<string>1.1fc6</string>
<key>com.apple.kpi.iokit</key>
<string>8.0</string>
<key>com.apple.kpi.libkern</key>
<string>8.0</string>
<key>com.apple.kpi.mach</key>
<string>8.0</string>
</dict>
</dict>
</plist>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment