Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade
Windows Audio Session API (WASAPI) is a Microsoft API that provides low-latency, high-quality audio streaming capabilities on Windows platforms. It is a part of the Core Audio APIs introduced in Windows Vista and is used extensively in professional audio applications for tasks such as audio capture and playback.
WASAPI operates in two modes: exclusive and shared. Exclusive mode allows an application to take complete control over an audio endpoint, while shared mode allows multiple applications to share the audio endpoint. This article will guide you through setting up and using WASAPI for audio tasks in a Windows environment.
Examples:
Setting Up a WASAPI Audio Capture Application
To capture audio using WASAPI, you need to follow these basic steps:
Here is a simplified example using C++:
#include <iostream>
#include <mmdeviceapi.h>
#include <audioclient.h>
int main() {
CoInitialize(NULL);
// Get the default audio endpoint
IMMDeviceEnumerator *deviceEnumerator = NULL;
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&deviceEnumerator));
IMMDevice *defaultDevice = NULL;
deviceEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &defaultDevice);
// Activate the audio client
IAudioClient *audioClient = NULL;
defaultDevice->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&audioClient);
// Initialize the audio client
WAVEFORMATEX *waveFormat;
audioClient->GetMixFormat(&waveFormat);
audioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 0, 0, waveFormat, NULL);
// Start capturing
IAudioCaptureClient *captureClient;
audioClient->GetService(__uuidof(IAudioCaptureClient), (void**)&captureClient);
audioClient->Start();
// Capture loop (simplified)
BYTE *data;
UINT32 packetLength = 0;
while (true) {
captureClient->GetNextPacketSize(&packetLength);
if (packetLength > 0) {
captureClient->GetBuffer(&data, &packetLength, NULL, NULL, NULL);
// Process audio data here
captureClient->ReleaseBuffer(packetLength);
}
}
// Cleanup
audioClient->Stop();
CoUninitialize();
return 0;
}
This example initializes the COM library, retrieves the default audio capture device, and starts capturing audio data.
Using WASAPI in Exclusive Mode for Low-Latency Audio Playback
Exclusive mode is used when low-latency audio is required. Here’s a basic example of setting up WASAPI for playback in exclusive mode:
// Similar setup as above, but with exclusive mode initialization
audioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE, 0, 10000000, 0, waveFormat, NULL);
In exclusive mode, you must manage the audio buffer size and timing precisely to prevent glitches.