有其他方法可以播放声音吗?

问题描述 投票:0回答:1

我制作了一个程序,先下载声音,然后使用PlaySound功能播放。

我的问题是编译器只能播放wav文件,通常,这种文件很重,需要很多时间来下载。

编辑:

如果歌曲为30秒,则当歌曲结束时会延迟一秒钟,然后重新开始播放。而且听到声音并不有趣,例如,我希望这首歌是5分钟,这样用户就不会听到延迟。

我的问题是:

是否可以播放其他文件类型?

或减小文件的大小?

我的功能:

Void PlayNyanSound()
{
    // Nyan cat sound

    string dir = "C:\\Users\\" + username() + "\\Documents\\Dragonite";
    string dwnld_URL = "https://srv-file4.gofile.io/download/TyizCg/y2mate.com%20-%20nyan_cat_sound_effect_12_OAN-miWCDm4_360p.wav";
    string savepath = "C:\\Users\\" + username() + "\\Documents\\Dragonite\\nyan.wav";

    CreateDirectory(dir.c_str(), NULL);

    URLDownloadToFile(NULL, dwnld_URL.c_str(), savepath.c_str(), 0, NULL);

    std::string pathtosound = "C:\\Users\\" + username() + "\\Documents\\Dragonite\\nyan.wav";
    while (true) {
        PlaySound(pathtosound.c_str(), 0, SND_SYNC);
    }

}

'nyan'猫的声音只有30秒,重25 MB。

c++ windows
1个回答
0
投票

如果要播放其他媒体类型,您可能想开始深入Windows Media Control Interface (MCI)。 Microsoft还建议您使用它播放较大的文件,这听起来像您可能想这样做。这是使用MCI播放WAVE音频文件的example

还有其他替代方案,例如DirectX中的XAudio2,但是如果添加更多代码,它将变得非常复杂。一个简单的解决方案是找到一个现有的库并将其合并到您的项目中。这是article,其中列出了您的一些选项。有一些免费的开源解决方案。

您采用的哪种路线,请检查解决方案是否支持从文件流式传输音频,这意味着您仅在给定时间加载和播放音频文件的一小部分。加载跨越数兆字节的多个音频文件只会占用内存,可能会降低性能。

© www.soinside.com 2019 - 2024. All rights reserved.