If your audio adapter contains a hardware loopback device, you can use the Windows multimedia control panel, Mmsys.cpl, to designate the device as the default capture device. (You can also use a legacy audio API, such as the Windows multimedia waveInXxx functions, to capture the stream from the device.)
Thus, if an adapter supports a loopback device, an audio application can record from the device in the same way that it records from any other capture device.įor example, if you select a hardware loopback device to be the default capture device, you can use the RecordAudioStream function (without modification) in the code example in Capturing a Stream to capture the stream from the device. The lack of standardized names might cause users to have difficulty identifying a loopback device in a list of device names.Ī hardware loopback device is a capture device.
In Windows 10 versions 1703 and higher, event-driven loopback clients are supported, and no longer need the workaround involving the render stream.Ī client can enable loopback mode only for a shared-mode stream (AUDCLNT_SHAREMODE_SHARED). Each time the client receives an event for the render stream, it must signal the capture client to run the capture thread that reads the next set of samples from the capture endpoint buffer. To work around this, initialize a render stream in event-driven mode. In versions of Windows prior to Windows 10 1703, pull-mode capture client does not receive any events when a stream is initialized with event-driven buffering and is loopback-enabled. In the call to the IAudioClient::Initialize method, change the value of the second parameter ( StreamFlags) from 0 to AUDCLNT_STREAMFLAGS_LOOPBACK.In the call to the IMMDeviceEnumerator::GetDefaultAudioEndpoint method, change the first parameter ( dataFlow) from eCapture to eRender.In the code example in Capturing a Stream, the RecordAudioStream function can be easily modified to configure a loopback-mode capture stream. However, other types of audio applications might find loopback mode useful for capturing the system mix that is being played by the audio engine. WASAPI provides loopback mode primarily to support acoustic echo cancellation (AEC). Initialize a capture stream in loopback mode on the rendering endpoint device.Īfter following these steps, the client can call the IAudioClient::GetService method to obtain an IAudioCaptureClient interface on the rendering endpoint device.
Obtain an IMMDevice interface for the rendering endpoint device.To open a stream in loopback mode, the client must: In loopback mode, a client of WASAPI can capture the audio stream that is being played by a rendering endpoint device.