【问题标题】:Load wavs into memory then play sounds asynchronously using Win32 API将 wavs 加载到内存中,然后使用 Win32 API 异步播放声音
【发布时间】:2015-08-31 22:22:25
【问题描述】:

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

我研究了一些推荐 mmlib 的帖子,(PlaySound),这可行,但示例似乎每次都从文件中加载,如下所示:

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

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

我该怎么做?

【问题讨论】:

    标签: c++ winapi audio


    【解决方案1】:

    PlaySounddocs 表示传入SND_MEMORY 表示第一个参数指向内存缓冲区。

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

    【讨论】:

    • 谢谢,我看了一下。它描述了从资源加载,如果可能的话,我宁愿不这样做!我在想也许有一种更简单的方法来加载一个 wav,然后播放它?
    • @SimonBosley SND_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
    

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 2013-03-12
      • 2012-01-14
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多