I’ve just implemented audio recording for the purpose of merging the Stereo Mix output with captured video to produce a complete movie of gameplay.

I create a new FMOD::Sound and then use FMOD::System::recordStart to write the output to it. Poll with getRecordPosition and encode to mp3 when there’s enough data.

We’d now like to also record the output of the microphone and merge that with the video and Stereo Mix, to support voice overs. The Stereo Mix volume would be reduced so the voice over could be clearly heard. This would be useful for making tutorials, as well as in-game support for Let’s Play videos.

When I call recordStart for the microphone driver id as well, it returns FMOD_ERR_RECORD. If I call it for the microphone without calling it for the stereo mix first, I can capture the mic fine.

Is this an absolute limitation of FMod that prevents recording of more than once device at a time?

I am working in Windows only at the moment, so the next step would be to attempt to use the Waveform-Audio recording interface instead. Are there any issues with using this along-side FMod?

Yes, you should avoid stereo mix if you want to have it run on more than 1 machine. it is purer (ie you get the direct, unmixed signal from the game) if you put a capture dsp at the head of the signal (ie System::getMasterChannelGroup, ChannelGroup::addDSP). Then all you should have is a single mic being used as normal.

You can record simultaneously from multiple record devices, but not all record devices can record into the correct format (ie spdif in for example).
My own test allowed 2 out of 4 devices in my control panel to record at the same time (a webcam and sb audigy mic input)

Check the log when an error happens, ie I get AUDCLNT_E_DEVICE_IN_USE on one device.

They record fine independently, so I don’t think it’s an unsupported format issue. I did try to use the Waveform-Audio mic recording and that behaved in the same way: one or the other worked, but not both at the same time.

You asked if there was a limitation and the answer was no, there’s not, so multiple device recording is available. If there is an error please check the log (using fmodL.dll for example) and we can determine why there is an error. It is most likely going to be device or OS (or format) related. OUTPUT_DSOUND mode is an alternative to try in this case.

I know it’s not a direct answer to your question, but i’m really interested in how you managed to reliably capture Stereo Mix. I’m using WASAPI and capturing it is not so much a problem but playing it back in a FMOD::Sound while i’m capturing has proven to come with a ton of problems no matter the approach i take. I would love to hear how you did it.

It’s pretty much as I describe it above. I’m selecting the stereo mix driver, calling recordStart with that driver id, which sends data to the Sound object passed. I then poll the recording with getRecordPosition and use lock/unlock to extract the PCM data in my update loop. The Sound is not playing simultaneously, it’s just receiving the data.

The core of it I took from the output_mp3 sample. I just had to change where it got the data and how it decided to encode and write a new chunk. I made the Sound object a discrete number of chunk samples in length (20*2304 for now) and when getRecordPosition passes another 2304 sample boundary I encode and write that chunk.