views:

791

answers:

2

There is an application called wiretap available at
http://www.ambrosiasw.com/utilities/wiretap/

This application can record the system audio. I would like to be able to do the same in my program. Any insights on what I need to do this? I am familiar with Core Audio but havent found anything on how to do this.

would this help getting the answer? I entered the command line: ioreg -w0 -l | grep io |more
this is what I found aboud wiretap....there might be more related info close to where i found it:
+-o com_AmbrosiaSW_AudioSupport <class com_AmbrosiaSW_AudioSupport, registered, matched, active, busy 0, retain 4 >
"CFBundleIdentifier" = "com.AmbrosiaSW.AudioSupport"
"IOMatchCategory" = "com_AmbrosiaSW_AudioSupport"
"version" = 2
"IOClass" = "com_AmbrosiaSW_AudioSupport"
yan-bellavances-mac-mini:~ ybellavance$ ioreg -w0 -l | grep io |more

A: 

Another similar opensource tool is SoundFlower. This tool works by registering as an audio output device. Instead of being a physical device, it is just a virtual output device, that forwards to other devices, or back to the inputs.

This is one strategy for recording system audio output -- appear as an audio output device, and have the system play through this virtual device. In addition to recording the audio, you could also forward it on to the speakers to appear transparent. You could use SoundFlower as an example if you're interested in pursuing this route.

Joey Hagedorn
Yeah I studied soundflower but that requires to create a new sound engine which is not what wire tap does. In the end that is what I will do but I want the new way of doing it. Actually you can just lookup the source code for MAc os X and you get the code and Xcode examples to create audioEngine.
yan bellavance
A: 

The short answer is no, unless you have connections and/or are really experienced/talented (i'm new to mac dev). Guess i'm gonna use the audioEngine example in the Darwin open source section.

Here is the answer I got from Jeff Moore at core-audio mailing list:

"There is no API for doing this, just various hacks/work-arounds that folks have come up with. The most straight forward way would be to write a fake driver to do what you want. Soundflower and JACK would be good examples of this approach. Soundflower uses a kernel driver while JACK uses a user-land driver.

Folks are clever and have come up with other ways to do it as well. But I'll let them speak for themselves if they are inclined to share their techniques. At any rate, you might want to start your education on this by reading the list archives as this topic comes up on a regular basis."

yan bellavance