If Soundflower (2ch) and Soundflower (16ch) are not enough for you or you want a different number of channels here is how you can change the settings:

Summary: Logged in as root, edit the Info.plist file inside the Soundflower.kext kernel extension and duplicate one of the <dict> .. <dict> blocks inside the AudioEngines element. Then give it another name and edit it’s IOAudioStreamNumChannels. Soundflower.kext’s Info.plist can be found in /System/Library/Extensions/Soundflower.kext/Contents.

Activate with either a computer reboot or the commands kextunload Soundflower.kext and kextload Soundflower.kext.

Example result, I added Soundflower 8:

Prerequisites: Soundflower installed, administrator access to your computer, no fear of the terminal and command line.

- Open Terminal

(All commands to be entered are indicated in this style.)

- su to root by typing ‘sudo su -’ followed by <enter>

- (Provide your password when asked.)

- cd /System/Library/Extensions/Soundflower.kext/Contents

- vi Info.plist

This will bring up a rather technical editor program. Use your favorite text editor to edit the file Info.plist if you want.

(An alternative is pico Info.plist, pico is an easier to use editor.)

- Inside the file, find the following text: ‘<key>AudioEngines</key>’.

- Underneath, you will find a block of text that starts with <array>.

- Inside the <array> .. </array> block you will see two blocks of elements that begin with <dict> and end with </dict>.

- Copy one of these blocks and paste it inside the <array> .. </array> area right before one of the existing <dict> elements. (Make sure you don’t copy it somewhere else!)

- In the copied text, change the string ‘Soundflower (#ch)’ into the name you want to give your new Soundflower device.

- Change the number (integer) under IOAudioStreamNumChannels from 2 or 16 into the number of channels that you want your device to have. An even number is recommended.

- Safe the file.

- To activate the changes, either reboot your computer or use the commands kextunload Soundflower.kext and kextload Soundflower.kext to unload and then reload the extension.

- UPDATE 050925: You will probably need to update the kext cache with kextcache -k Soundflower.kext after the update so that the device will show up after you restart.

Read on for an example of the edited Info.plist file.

  
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
<dict>  
<key>CFBundleDevelopmentRegion</key>  
<string>English</string>  
<key>CFBundleExecutable</key>  
<string>Soundflower</string>  
<key>CFBundleGetInfoString</key>  
<string>Version 1.0</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.0d10</string>  
<key>IOKitPersonalities</key>  
<dict>  
<key>PhantomAudioDriver</key>  
<dict>  
<key>AudioEngines</key>  
<array>  
<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>96000</integer>  
</array>  
</dict>  
<dict>  
<key>BlockSize</key>  
<integer>8192</integer>  
<key>Description</key>  
<string>Soundflower 8</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>8</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>96000</integer>  
</array>  
</dict>  
<dict>  
<key>BlockSize</key>  
<integer>8192</integer>  
<key>Description</key>  
<string>Soundflower (16ch)</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>16</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>96000</integer>  
</array>  
</dict>  
</array>  
<key>CFBundleIdentifier</key>  
<string>com.Cycling74.driver.Soundflower</string>  
<key>IOClass</key>  
<string>com_MyCompany_driver_SoundflowerDevice</string>  
<key>IOMatchCategory</key>  
<string>SoundflowerDriver</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>  
</dict>  
</dict>  
</plist>  

Comments

Author: Hugo
Date: 2007-02-16 10:36:21

@Corban: The steps that Nathaniel gave can be entered as commands in the terminal right after the ‘Save the file’ step in my description.You have to still be ‘super user’ in the terminal.To activate Super user mode in the terminal, you can type ‘sudo su -’ and hitYou will be asked for your password.This can only be done if you are an administrator of the machine you’re working on. Usually, if it’s your own machine, this will be the case. If not, ask the owner of the machine.

Author: Corban Quigg
Date: 2007-02-10 15:02:54

I followed the instructions verbatim and have run into the same problem of the old file remaining after reboot. Could you explain what Nathanial Madura was talking about or give another alternative to saving the .term file to create an additional channel?

Author: Xill
Date: 2011-04-03 07:03:19

This is great, but I simply can't do this. I have a project that already saturates my 16 Soundflower channels and this would be quite useful.
If I send you my Info.plist by email, would you be able (or willing) to change the code and add another 16 channels Soundflower device for me?

Please let me know.

Author: Nathaniel Madura
Date: 2006-02-10 09:13:07

In the process of attempting to do this on an iBook running 10.3.9 I found that I was unable to load the modified kernel extension using the given directions. More specifically kextload didn’t give any error, but failed, and rebooting the machine loaded the old setup.

To get around this, I had to completely obliterate the existing cache file, and recreate it. After doing this kextload works as expected.

The steps are (as a super-user)1. rm /System/Library/Extensions.kextcache2. kextcache -k /System/Library/Extensions

Author: Mhax
Date: 2008-02-01 01:27:38

can soundflower work as a monitor for a dj software in which u only have the orignal and only soundcard?