将wavs加载到内存中,然后使用Win32 API异步播放声音

时间:2015-08-31 22:22:25

标签: c++ winapi audio

我正在使用C ++和Win32 API编写一个简单的游戏。我想在初始化阶段(游戏开始前)将一些声音效果加载到内存中。然后我希望能够在游戏过程中异步触发这些声音。

我已经研究了几篇推荐mmlib,(PlaySound)的帖子,这样可行,但每次都会从文件中加载示例,如下所示:

PlaySound("rocket_launch.wav", NULL, SND_FILENAME | SND_ASYNC);

我想在开始时将声音加载到内存中,然后随时播放它们。希望我不需要使用资源文件。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

PlaySound docs表示要传入SND_MEMORY以指示第一个参数指向内存缓冲区。

首先,将文件加载到内存中,然后将指针传递给缓冲区,并替换SND_FILENAME标志的SND_MEMORY标志。

答案 1 :(得分:0)

致任何寻找简单示例的人:

std::string sound = "RIFFªÛ\x5....."; //(Binary of a .wav file)
PlaySoundA(sound.c_str(), NULL, SND_MEMORY | SND_SYNC); //Extracting the binary to a c-style string & playing