I am trying to record two USB mics as separate tracks on our MacBook Pro. I don't want to purchase an expensive mixer, as I don't have the money. I'd also rather not have two separate programs running, just one. How do I do this?
The traditional way to accomplish this is with a multichannel audio interface. It doesn't have to be a full-on mixer, but it does need to have more than one input channel. PreSonus makes good-quality, reliable, and relatively cost-effective solutions for this. Note the two XLR connectors on the front of the interface. You will need two traditional microphones and XLR cable. The USB microphones you already have combine a number of different components: the microphone itself, the mic preamp, and the audio interface. This allows you to do one thing and do it well, but limits you in the long run in terms of how flexible you can be with how you use them.
After you have the right hardware setup, the software shouldn't be too much of an issue--in fact, the current version of GarageBand has support for multitrack recording under Track -> Enable Multitrack Recording. Then just set your two tracks to the two channels of input on your interface and go to town.
In OSX, multiple audio devices can be combined into one "logical" device in software by creating an aggregate audio device. The link is for 10.6, but it should be basically the same thing in any other OS. All this does is allow separate interfaces to be addressed as separate channels in a recording program. It does not guard against phasing or jitter issues or any other inconsistencies between your devices.
Now, the comments on NReilingh's answer suggest that you don't necessarily have two separate USB audio devices, but rather just want to hook up two ordinary mics without a mixing board. If this is the case, then his suggestion of a multichannel audio interface is generally the best approach. Think of it as one USB adapter for both microphones at once.
One of the possible solutions is to use ffmpeg
to record many input interfaces by merging them to one file:
ffmpeg.exe -f dshow -i audio="AT2020 (AT2020USB+)" -f dshow -i audio="micro (Realtek High Definition Audio)" -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" 1.wav
Two stereo microphones will produce a WAV file with 4 channels.
File opened in Audacity:
To list devices:
ffplay.exe -hide_banner -list_devices true -f dshow -i dummy
[dshow @ 004977a0] DirectShow video devices 0KB sq= 0B f=0/0 [dshow @ 004977a0] "A4 TECH PC Camera H" [dshow @ 004977a0] "screen-capture-recorder" [dshow @ 004977a0] DirectShow audio devices [dshow @ 004977a0] "AT2020 (AT2020USB+)"= 0KB sq= 0B f=0/0 [dshow @ 004977a0] "virtual-audio-capturer" [dshow @ 004977a0] "Line 3 (Virtual Audio Cable)" [dshow @ 004977a0] "VoiceMeeter Output (VB-Audio VoiceMeeter VAIO)" [dshow @ 004977a0] "micro (Realtek High Definition Audio)" dummy: Immediate exit requested nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Example batch file
for this job:
Drop it to ffmpeg.exe folder and run in cmd window:
save_2mics.cmd 0 4
Console output(empty lines added):
List of available dshow audio devices: 0: (selected) micro (Realtek High Definition Audio) 1: virtual-audio-capturer 2: Line 3 (Virtual Audio Cable) 3: Line 1 (Virtual Audio Cable) 4: (selected) AT2020 (AT2020USB+) 5: Mic 1 (Virtual Audio Cable) 6: VoiceMeeter Output (VB-Audio VoiceMeeter VAIO) Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, dshow, from 'audio=micro (Realtek High Definition Audio)': Duration: N/A, start: 14595.623000, bitrate: 1411 kb/s Stream #0:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s Guessed Channel Layout for Input Stream #1.0 : stereo Input #1, dshow, from 'audio=AT2020 (AT2020USB+)': Duration: N/A, start: 14596.160000, bitrate: 1411 kb/s Stream #1:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s [Parsed_amerge_0 @ 0070bd40] No channel layout for input 1 [Parsed_amerge_0 @ 0070bd40] Input channel layouts overlap: output layout will be determined by the number of distinct input channels Output #0, wav, to '2mic_2015-04-01_21-59-45.wav': Metadata: ISFT : Lavf56.9.100 Stream #0:0: Audio: pcm_s16le ( / 0x0001), 44100 Hz, 4.0, s16, 2822 kb/s (default) Metadata: encoder : Lavc56.4.101 pcm_s16le Stream mapping: Stream #0:0 (pcm_s16le) -> amerge:in0 Stream #1:0 (pcm_s16le) -> amerge:in1 amerge -> Stream #0:0 (pcm_s16le) Press [q] to stop, [?] for help size= 1895kB time=00:00:05.51 bitrate=2816.9kbits/s video:0kB audio:1895kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.005257% Received signal 2: terminating.