My Photo

Google

  • Search
    Google
    Web log.hugoschotman.com
  • Ads

« Skype rings all over the house! | Main | RSS Feeds about European constitution »

2005.04.24

How to add or change a Soundflower device

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>

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/t/trackback/11761/2336309

Listed below are links to weblogs that reference How to add or change a Soundflower device:

» Taking Soundflower up a notch from macCompanion Blog

Hugo Schotman shows how to add features to Soundflower - a freeware app that gives control over audio input and output:
http://log.hugoschotman.com/hugo/2005/04/how_to_add_or_c.html

[Read More]

» Isolating Skype audio for recording on the Mac with extra Soundflower channels from Hugo Schotman
Recently I tried to use Skype again in a podcasting studio setup that I have described a while ago. It seems that through a couple of upgrades of Skype it has stopped working. The current version of Skype just doesn't [Read More]

» Isolating Skype audio for recording on the Mac with extra Soundflower channels from Hugo Schotman
Recently I tried to use Skype again in a podcasting studio setup that I have described a while ago. It seems that through a couple of upgrades of Skype it has stopped working. The current version of Skype just doesn't [Read More]

» M-Audio Firewire 1814 Logic Express = crash ! One solution... from Hugo Schotman
Logic Express seems to be the only program that crashes when I try to use it with my recently bought M-Audio Firewire 1814. Whenever I choose the Firewire 1814 in Logic Express it will crash not only the application but [Read More]

» RFC: Aufzeichnungstechnik fr Podcasts from Tim Pritlove
Ich bin seit einiger Zeit dabei, mir ber die fr eine erfolgreiche Podcasting-Aufnahme bentigte Technik Klarheit zu verschaffen, dabei komme ich nur begrenzt voran, weil ich mich mit Audiotechnik herzlich wenig auskenne und einem im F... [Read More]

» RFC: Aufzeichnungstechnik fr Podcasts (Update) from Tim Pritlove
Ich bin seit einiger Zeit dabei, mir ber die fr eine erfolgreiche Podcasting-Aufnahme bentigte Technik Klarheit zu verschaffen, dabei komme ich nur begrenzt voran, weil ich mich mit Audiotechnik herzlich wenig auskenne und einem im F... [Read More]

Comments

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

@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 hit
You 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.

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?

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.kextcache
2. kextcache -k /System/Library/Extensions

The comments to this entry are closed.