資源簡介
利用DirectX中的XAudio2 API所寫關于在游戲中音頻播放的小樣例
代碼片段和文件信息
#include?“Utility.h“
#include?“WaveFile.h“
//搜索音頻文件
HRESULT FindMediaFile(WCHAR?*strDestPath?int?Dest?LPCWSTR?strFilename);
//////////////////////////////////////////////////////////////////////////
// Name:?Main()
// Describe:Entry?point?of?the?function
//////////////////////////////////////////////////////////////////////////
int?main()
{
//1.Initialize?XAudio2?初始化XAudio2
CoInitializeEx(NULL?COINIT_MULTITHREADED); //為當前線程初始化COM組件
IXAudio2?*pXAudio2?=?NULL;
HRESULT?hr;
//創建示列
if?(FAILED(hr=XAudio2Create(&pXAudio20XAUDIO2_DEFAULT_PROCESSOR)))
{
::MessageBox(NULL?L“XAudio2?Create?Failed“?L“Error“?NULL);
CoUninitialize(); ??//銷毀線程
return?hr;
}
//創建主聲音,這是最后音頻系統要通過該變量來播放聲音,很關鍵
IXAudio2MasteringVoice?*pMasterVoice?=?NULL;
if?(FAILED(hr=pXAudio2->CreateMasteringVoice(&pMasterVoice)))
{
::MessageBox(NULL?L“The?Mastering?voice?is?created?failed“?L“Error“?NULL);
CoUninitialize();
return?false;
}
//2.Locate?the?wave?file 查找音頻文件
WCHAR?strFilePath[MAX_PATH];
if?(FAILED(hr?=?FindMediaFile(strFilePath?MAX_PATH?L“Faded.wav“)))
{
return?hr;
}
//3.Read?in?the?wave?file
WaveFile?wav;
if?(FAILED(hr?=?wav.Open(L“Faded.wav“?NULL?WAVEFILE_READ)))
{
return?hr;
}
//Get?format?of?wave?file
WAVEFORMATEX?*pwfx?=?wav.GetFormat();
//Calculate?how?much?bytes?and?samples?are?in?the?wave
DWORD?cbWaveSize?=?wav.GetSize();
//read?the?sample?data?into?memory
BYTE?*pbWaveData?=?new?BYTE[cbWaveSize];
if?(FAILED(hr?=?wav.Read(pbWaveData?cbWaveSize?&cbWaveSize)))
{
SAFE_DELETE_ARRAY(pbWaveData);
return?hr;
}
//4.Create?a?Source?Voice??創建源聲音,要播放的聲音需要通過它來轉變
IXAudio2SourceVoice?*pSourceVoice;
if?(FAILED(hr?=?pXAudio2->CreateSourceVoice(&pSourceVoice?pwfx)))
{
::MessageBox(NULL?L“The?Source?Voice?is?Created?failed“?L“Error“?MB_OK);
return?FALSE;
}
//5.Submit?an?XAudio2?Buffer?to?the?source?voice?將緩沖區內的音頻提交給源聲音
XAUDIO2_BUFFER?buffer?=?{?0?};
buffer.pAudioData?=?pbWaveData;
buffer.Flags?=?XAUDIO2_END_OF_STREAM; //tell?the?source?voice?not?to?expect?any?data?after?this?buffer
buffer.AudioBytes?=?cbWaveSize;
if?(FAILED(hr?=?pSourceVoice->SubmitSourceBuffer(&buffer)))
{
::MessageBox(NULL?L“Submit?an?XAudio2_Buffer?Failed“?L“Error“?MB_OK);
pSourceVoice->DestroyVoice();
SAFE_DELETE_ARRAY(pbWaveData);
return?FALSE;
}
//6.Play?a?Sound?with?XAudio2
wprintf_s(L“Playing?Faded?Wave?file......“);
while?(TRUE)
{
if?(FAILED(hr?=?pSourceVoice->Start(0)))
{
return?FALSE;
}
//Get?the?voice‘s?state
BOOL?isRunning?=?TRUE;
while?(SUCCEEDED(hr)?&&?isRunning)
{
XAUDIO2_VOICE_STATE?state;
pSourceVoice->GetState(&state);
isRunning?=?(state.BuffersQueued?>?0)?!=?0;
Sleep(10);
system(“pause“);
}
}
//Release?all?resource
pMasterVoice->DestroyVoice();
pSourceVoice->DestroyVoice();
SAFE_DELETE_ARRAY(pbWaveData);
CoUninitialize();
retu
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-10-18?17:59??DXMusic?by?冷崖\
?????目錄???????????0??2017-10-18?16:59??DXMusic?by?冷崖\.vs\
?????目錄???????????0??2017-10-18?16:59??DXMusic?by?冷崖\.vs\DXMusic\
?????目錄???????????0??2017-10-18?16:59??DXMusic?by?冷崖\.vs\DXMusic\v14\
?????文件???????41472??2017-10-19?17:42??DXMusic?by?冷崖\.vs\DXMusic\v14\.suo
?????目錄???????????0??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\
?????文件????????7905??2017-10-19?15:23??DXMusic?by?冷崖\DXMusic\DXMusic.vcxproj
?????文件????????1247??2017-10-19?15:23??DXMusic?by?冷崖\DXMusic\DXMusic.vcxproj.filters
?????目錄???????????0??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\
?????文件?????????150??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.log
?????目錄???????????0??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\
?????文件????????1226??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\CL.command.1.tlog
?????文件???????67314??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\CL.read.1.tlog
?????文件?????????774??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\CL.write.1.tlog
?????文件?????????194??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\DXMusic.lastbuildstate
?????文件????????1188??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\li
?????文件????????3314??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\li
?????文件?????????460??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\DXMusic.tlog\li
?????文件???????76853??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\Main.obj
?????文件???????73957??2017-10-19?15:24??DXMusic?by?冷崖\DXMusic\Debug\WaveFile.obj
?????文件?????1035264??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\vc140.idb
?????文件??????708608??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Debug\vc140.pdb
?????文件????37518602??2017-09-30?21:27??DXMusic?by?冷崖\DXMusic\Faded.wav
?????文件????????5537??2017-10-19?15:33??DXMusic?by?冷崖\DXMusic\Main.cpp
?????文件?????????565??2017-10-19?15:24??DXMusic?by?冷崖\DXMusic\Utility.h
?????文件???????15359??2017-10-19?15:23??DXMusic?by?冷崖\DXMusic\WaveFile.cpp
?????文件????????1575??2017-10-18?18:44??DXMusic?by?冷崖\DXMusic\WaveFile.h
?????文件????????1303??2017-10-18?16:59??DXMusic?by?冷崖\DXMusic.sln
?????目錄???????????0??2017-10-19?15:24??DXMusic?by?冷崖\Debug\
?????文件???????57344??2017-10-19?15:33??DXMusic?by?冷崖\Debug\DXMusic.exe
?????文件??????424860??2017-10-19?15:33??DXMusic?by?冷崖\Debug\DXMusic.ilk
............此處省略1個文件信息
- 上一篇:SSM框架搭建親測可用
- 下一篇:BND2-v2.0.0-windows.rar
評論
共有 條評論