#include <Windows.h>
#include <xaudio2.h>
IXAudio2* pXAudio2 = nullptr;
IXAudio2MasteringVoice* pMasterVoice = nullptr;
int main() {
// Step 1: Initialize XAudio2
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
if (FAILED(XAudio2Create(&pXAudio2)))
return -1;
// Step 2: Create a mastering voice
if (FAILED(pXAudio2->CreateMasteringVoice(&pMasterVoice)))
return -1;
// Step 3: Load and play an audio file
// Replace "path/to/your/audio/file.wav" with the actual file path
WAVEFORMATEX waveFormat;
XAUDIO2_BUFFER buffer = { 0 };
LPCWSTR audioFilePath = L"path/to/your/audio/file.wav";
if (FAILED(XAudio2CreateSoundSource(&pSourceVoice, audioFilePath, 0, &waveFormat)))
return -1;
buffer.AudioBytes = waveFormat.nAvgBytesPerSec * 10; // 10 seconds of audio
buffer.pAudioData = new BYTE[buffer.AudioBytes];
// Load audio data into buffer (replace LoadAudioData function with your implementation)
LoadAudioData(buffer.pAudioData, buffer.AudioBytes, audioFilePath);
if (FAILED(pXAudio2->CreateSourceVoice(&pSourceVoice, &waveFormat)))
return -1;
if (FAILED(pSourceVoice->SubmitSourceBuffer(&buffer)))
return -1;
pSourceVoice->Start(0);
// Step 4: Wait for the audio to finish playing
XAUDIO2_VOICE_STATE state;
pSourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
while (state.BuffersQueued > 0) {
Sleep(100);
pSourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
}
// Step 5: Cleanup
pSourceVoice->Stop();
pSourceVoice->DestroyVoice();
pXAudio2->Release();
CoUninitialize();
return 0;
}