将 wavs 加载到内存中,然后使用 Win32 API 异步播放声音
Posted
技术标签:
【中文标题】将 wavs 加载到内存中,然后使用 Win32 API 异步播放声音【英文标题】:Load wavs into memory then play sounds asynchronously using Win32 API 【发布时间】:2015-08-31 22:22:25 【问题描述】:我正在使用 C++ 和 Win32 API 编写一个简单的游戏。我想在初始化阶段(游戏开始之前)将一些音效加载到内存中。然后我希望能够在游戏过程中异步触发这些声音。
我研究了一些推荐 mmlib 的帖子,(PlaySound),这可行,但示例似乎每次都从文件中加载,如下所示:
PlaySound("rocket_launch.wav", NULL, SND_FILENAME | SND_ASYNC);
我想在开始时将我的声音加载到内存中,然后随时播放。希望我不需要使用资源文件。
我该怎么做?
【问题讨论】:
【参考方案1】:PlaySound
docs 表示传入SND_MEMORY
表示第一个参数指向内存缓冲区。
首先,将文件加载到内存中,然后传入指向缓冲区的指针,并将SND_FILENAME
标志换成SND_MEMORY
标志。
【讨论】:
谢谢,我看了一下。它描述了从资源加载,如果可能的话,我宁愿不这样做!我在想也许有一种更简单的方法来加载一个 wav,然后播放它? @SimonBosleySND_RESOURCE
来自资源,SND_MEMORY
来自内存。
@SimonBosley 您不需要作为资源加载...here is a code sample 从普通文件加载 wav 并从内存缓冲区播放。
@JonathanPotter 我发现使用 SND_MEMORY 的示例首先已经从资源 (LoadResource) 加载了文件,这是我试图避免的。
@Buddy 我最初被一些 cmets 推迟到那个页面上,他们说文件没有按预期播放。看起来是我需要的,我会试一试,看看结果如何!【参考方案2】:
致任何寻找简单示例的人:
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
【讨论】:
以上是关于将 wavs 加载到内存中,然后使用 Win32 API 异步播放声音的主要内容,如果未能解决你的问题,请参考以下文章