(2/16/2008): Finally released universal plug-ins for Intel and PowerPC supporting OS 10.4 and 10.5. There are separate versions for VST SDK 2.3 and 2.4 and different hosts may only work with one or the other.
Canz3D is an audio plug-in which processes sound to improve stereo imaging for listening with headphones. It performs a limited simulation of a room with two speakers. The dimensions of the room, it's acoustic properties and many other simulation parameters are adjustable. Canz3D is currently implemented as an AudioUnit and a VST plug-in for Mac OS. It should work with any AU or VST plug-in compatible audio editor or other host under OS 8.6 and up, including OS X. Version 2.3 supports OS X 10.5 and 10.4 on Intel or PowerPC. Version 2.2 supports OS X 10.3.9 and later on PowerPC. Earlier releases have separate versions for Classic, Carbon and Mach-O, as well as AltiVec and non-Altivec.
Stereo perception with headphones is generally limited to a sensation of sound being in one ear only or centered between them. Canz3D uses a combination of channel blending (crossfeed), frequency shaping and delays to simulate a 3D environment. Some high end headphone amplifiers incorporate similar effects, generally for hundreds to thousands of dollars. Originally, my intention was to build a home-brew crossfeed headphone amplifier. The plug-in was just supposed to be a way to test filters in software that I would implement in analog circuits. That plan didn't last very long as the complexity quickly outgrew any practical analog implementation and I decided to stick with a software solution.
How well Canz3D works depends a lot on the quality of your headphones and the sound being processed. With high fidelity audio recorded using stereo microphones, the results can be impressive. I find that with some classical recordings not only do I have better spatial perception, but I can more clearly distinguish instruments that seemed to blend together before. Most popular music is mixed from monaural sources by amplitude panning then compressed/limited to sound loud all the time. Canz3D will simulate what it would sound like on speakers in any case, but it can't restore fidelity or bring out a spatial image that isn't there. You may have to experiment with the simulation parameters to obtain the best results for different kinds of material.
The best way to find out how well it will work for you is to download the plug-ins and try it for yourself. I have also added some before and after sound samples to the site which I believe are a good demonstration but may not be representative of the material you want to use it with.
The unregistered plug-ins fade the output to silence after processing 3 minutes of continuous audio, which restarts every time the plugin is stopped/started. There is no demo expiration date. The limit only applies to the duration of audio which can be processed in a single continuous operation.
To install the component at the system level, copy it to the /Library/Audio/Plug-Ins/Components folder. To install at the user level copy it to the $(HOME)/Library/Audio/Plug-Ins/Components folder. You may have to log out and log back in again for it to be recognized.
To install the plugin at the system level, copy it to the /Library/Audio/Plug-Ins/VST folder. To install at the user level copy it to the $(HOME)/Library/Audio/Plug-Ins/VST folder. Your host may allow (or prefer) you to install it in other locations, but these are probably the most common.
Canz3D is a component/plug-in which requires a host application in order to work. There are a variety of freeware, shareware and commercial audio editors and other hosts for the Mac which support AudioUnits and/or VST plug-ins. Please refer to the operating instructions for your application. Currently there is no custom GUI for Canz3D. Both the AudioUnit and VST plug-in versions use the default interfaces implemented by the host and may appear and operate differently depending on their implementation.
The plug-ins as downloaded are unregistered (i.e. demos) and fade the output to silence after processing 3 minutes of continuous audio. This limit resets every time the plugin is stopped/started and limits only the duration of audio which can be processed in a single continuous operation.
|Master||Master gain adjustment applied to all sources|
|Speaker||Relative gain adjustment for sound directly from the simulated speakers|
|Live||Relative gain adjustment for all reflections except the back wall|
|Dead||Relative gain adjustment for the back wall reflections|
|Balance||The balance between the simulated speakers|
|Blend||Parameter which controls the channel crossfeed (0=none, 1=full simulation)|
|Shape||Parameter which controls the frequency shaping (0=none, 1=full simulation)|
|Delay||Parameter which controls the left-right relative delays (0=none, 1=full simulation)|
|Spkr Tap||(Speaker Tap) The time width of the tap for sound directly from the simulated speakers|
|Live Tap||The time width of the tap for all reflections except the back wall|
|Dead Tap||The time width of the tap for the back wall reflections|
|Live ACL||Low frequency absorption coefficient for all reflections except the back wall|
|Dead ACL||Low frequency absorption coefficient for the back wall reflections|
|Live ACH||High frequency absorption coefficient for all reflections except the back wall|
|Dead ACH||High frequency absorption coefficient for the back wall reflections|
|Live ATF||Absorption transition frequency for all reflections except the back wall|
|Dead ATF||Absorption transition frequency for the back wall reflections|
|Head Siz||(Head Size) Approximate circumference of the listener's head|
|Spkr Ang||(Speaker Angle) The angle between the speakers from the listener's perspective|
|Spkr Spc||(Speaker Space) Distance between the listener and the speaker plane|
|Frnt Spc||(Front Space) Distance between the speakers and the front wall|
|Side Spc||(Side Space) Distance between the speakers and the adjacent side walls|
|Back Spc||(Back Space) Distance between the listener and the back wall|
|Flor Spc||(Floor Space) Distance between the speakers/listener and the floor|
|Ceil Spc||(Ceiling Space) Distance between the speakers/listener and the ceiling|
|Snd Sped||(Sound Speed) The speed of sound used in the simulation|
The master gain control is used to adjust the gain of all sources (speakers and reflections) together. There are also gain controls to separately adjust the relative sound levels from the simulated speakers and reflections. It is possible to listen to only the speakers or only the reflections by setting some of the relative gains to negative infinity. Setting a relative gain to negative infinity eliminates the processing associated with that sound source or sources and will reduce CPU time. The balance adjustment controls the balance between the simulated speakers, not the plug-in output channels.
The blend factor, shape factor and delay factor parameters allow you to control the level of channel blending, frequency shaping and relative delay effects in the simulation. Set at the default value of one, they will be fully simulated. A parameter value of zero removes that effect from the simulation. With all three set at zero, Canz3D reduces to a pass through with reflections and diffusion.
Tapping into the same audio stream at different delays and summing causes an undesirable effect called comb filtering. To mitigate this effect Canz3D uses weighted sums of samples rather than single sample taps. I believe this is also called diffusion. Some degree of comb filtering is a realistic part of the simulation and can't entirely be avoided. Too wide a tap for the speakers can cause the output to sound muddled. The time widths of the taps are adjustable separately for the speakers, live end (everything but the back wall) reflections and dead end (back wall) reflections. The widths of the taps also have a major impact on CPU usage.
The acoustic properties of the simulated room as specified by the absorption coefficient (the fraction of sound amplitude absorbed, i.e. not reflected) can be controlled separately for the live end (everything but the back wall) and dead end (back wall). The absorption coefficient of an object is a function of frequency (among other factors). Canz3D models this function as a constant low frequency absorption coefficient (ACL), a constant high frequency absorption coefficient (ACH) and a single-pole, single-zero transition specified by the absorption transition frequency (ATF) where the absorption coefficient is halfway between ACL and ACH. The following diagram illustrates the absorption coefficient function over frequency. Note that most acoustic tiles and other such materials absorb high frequencies better than low frequencies, but you can specify the opposite.
The physical parameters Canz3D needs to perform a simulation are: the speed of sound, the effective circumference of the listener's head, the dimensions of the room and locations of objects in it. All of these parameters are adjustable. The default values for the speed of sound and head size should work ok for most people, but you may want to tweak them for best results. I suggest you set the reflection gains to negative infinity and adjust the speaker angle, head size to achieve the best stereo image. Then add and adjust the echoes. The dimensions of the simulated listening room will change the effect of the reflections. The following diagrams illustrate the various room geometry parameters.
The combination of all the parameter values for a plug-in is called a program. Many VST hosts allow you to save the parameter settings for a plug-in as a preset program which can be reloaded. The following are the predefined or 'factory' default preset programs for Canz3D.
|Full blown||The full simulation with my default room settings. Most of the other presets are based on this program.|
|CPU saver||Only the back wall reflections are simulated, with amplitude boosted to make up for the rest. This reduces the CPU time required while still preserving most of the effect.|
|No echoes||Only direct sound from the virtual speakers is simulated.|
|No speakers||The direct sound from the speakers is removed, leaving only the echoes.|
|No blending||No crossfeed between channels.|
|No shaping||No frequency shaping.|
|No delay||No relative delays between channels. This does not eliminate echo delays.|
|No effects||No crossfeed, shaping or relative delays. Room echoes are still simulated.|
|No echoes or effects||No crossfeed, shaping, relative delays or room echoes, and the speaker tap is set to 0 (i.e. interpolation only). This setting reduces Canz3D to an elaborate pass-through. Start with this if you want to experiment with one effect at a time.|
|Big room||Large room dimensions and long taps. This setting requires the most CPU time.|
|Q:||When will Canz3D support Intel Macs?|
|A:||It does. Finally!|
|Q:||How about making Canz3D an iTunes plugin?|
|A:||I'd like to, but there is no generally available audio plug-in interface for iTunes. You could try using Audio Hijack Pro.|
|Q:||Will there be a Windows or Linux version?|
|A:||Maybe someday, but no promises.|
|Q:||What if I only want tone neutral crossfeed?|
|A:||Start with the 'No echoes or effects' preset and increase the 'Blend' (crossfeed) parameter to the level you desire. Note that if the material you are listening to was recorded with spaced stereo microphones or for any other reason has frequency dependent phase delays between channels, there is no such thing as tone neutral crossfeed. Comb filtering will occur. Increasing the speaker tap should soften the effect.|
|Tip:||With the gain settings for Canz3D at 0dB, the volume out should be approximately the same as the volume in. However, since it is mixing sound with relative delays there will be constructive and destructive interference which could lead to clipping on the output. You should always check the output levels for clipping if that is a concern.|
|Tip:||While I have tried to make Canz3D a reasonable accurate simulation, the frequency response of your headphones may be different from the response of your favorite speakers. The reverb in Canz3D is also limited to primary echoes since the intent is to simulate a listening room rather than a gothic cathedral. If you want to compensate the frequency response or expand the reverb I suggest chaining Canz3D with an equalizer and/or reverb plug-in. Many hosts have the capability to chain several plug-ins and there are a variety of equalizers and reverbs available.|
|Tip:||While I have tried to make Canz3D a reasonable accurate simulation, the frequency response of your headphones may be different from the response of your favorite speakers. The reverb in Canz3D is also limited to primary echoes since the intent is to simulate a listening room rather than a cathedral. If you want to compensate the frequency response or expand the reverb I suggest chaining Canz3D with an equalizer and/or reverb plug-in. Many hosts have the capability to chain several plug-ins and there are a variety of equalizers and reverbs available.|
|Tip:||I am not going to try to maintain a list of links to compatible host applications anymore as it will be hopelessly out of date in a week and I update this site much less frequently than that. There are many sites which specialize in maintaining current software lists such as VersionTracker, Hitsquad, MacMusic and Softpedia, and of course there is always the Google.|
Download Canz3D here (current version 2.3): Canz3D_2_3.dmg
The distribution includes AudioUnit and VST versions of the plug-in for Intel and PowerPC (universal binaries). There is also a README file and an enabler application to install a registration code.
Previous releases and a version history can be found here: Canz3D Releases
For those who would like to hear what Canz3D can do without having to install and run the plugs, I have posted a couple of sound samples before and after processing with the default "Full blown" preset program. They are taken from a performance of Brahms Requiem by the Holden Consort and released under the EFF Open Audio License version 1.0. All are in Ogg Vorbis format.
Sample 1 (1MB, about 1:00): original and processed .
Sample 2 (1.4MB, about 1:32): original and processed .
Please send me questions or feedback by email: firstname.lastname@example.org
Registration is not necessary to report bugs or ask questions, and (constructive) comments will be greatly appreciated.
Registration codes to remove the 3 minute continuous processing limit for all versions are available through Kagi for $10 (US) per single user license. One code will work for all versions and all releases for the foreseeable future.
All sales are final. I will try to answer questions and fix bugs as best I can, but with the usual disclaimer of no guarantee of compatibility or suitability for any particular application. Make sure you try the unregistered plug-ins first and are satisfied with their performance before registering. Registering only removes the 3 minute limit. Nothing else will change.
Purchase registration codes through Kagi: Secure Order Page or Standard Order Page
Use the provided cocoa application Canz3D Enabler X to record your registration code in a user preference file and enable all versions (2.1 or later). To use this enabler simply enter your code and press Save. To enable versions earlier than 2.1 use the enabler provided with that release and follow the instructions in the README file. The registration codes work with any version.
Canz3D, copyright © 2001-2008, Jeff DuMonthier, all rights reserved
VST is a trademark of Steinberg Soft- und Hardware GmbH
Apple and Mac OS are trademarks of Apple (formerly known as Apple Computer Inc).
AltiVec and PowerPC are trademarks of Motorola Inc.