如何在mciSendString中使用变量来代替volume?C++

How would you use a variable in place of volume in mciSendString? C++

本文关键字:volume C++ 变量 mciSendString      更新时间:2023-10-16

所以我正在用C++制作一个基本的2D格斗游戏。对于声音/音频效果,我使用mciSendString((

            mciSendString(TEXT("setaudio sounds\character_select.mp3 volume to 500"), NULL, 0, NULL);

上面的代码运行良好。它将音量设置为500;但是,我不想对卷值进行硬编码。我希望它逐渐变小,而不必一遍又一遍地复制和粘贴同一行,只需要一个较小的整数值。

            mciSendString(TEXT("setaudio sounds\character_select.mp3 volume to " + volume ), NULL, 0, NULL);

我想做这样的事。其中,我可以有一个包含任何整数值的变量,而不是硬编码的500。然而,当我运行它时,我没有得到任何错误,音频继续播放,就像通常在1000而不是500时一样。

我该怎么办才能解决这个问题?

首先,不能将TEXT()宏与变量一起使用。它只适用于像"Hello"这样的字符数组文字,并在文字之前放置一个L,这取决于使用哪个选项(多字节宽的字符串或UTF8(来编译代码。

对于后一个选项,您可以使用std::string变量来组成命令:

std::ostringstream oss;
int volume = 300;
oss << "setaudio sounds\character_select.mp3 volume to " << volume;
std::string cmd = oss.str();
mciSendString(cmd.c_str(), NULL, 0, NULL);

对于另一个选项,您需要相应地使用std::wstringstd::wostringstream

由于您使用的是c++,我对mcisendstring也有同样的问题。我建议您像以前一样解决问题

制作一个名为mcicommand的函数,如下所示:

    #include <string>
    string mcicommand(string volume){
    
        string command = "setaudio song volume to ";
        
        int found = command.find_last_of(" ");
        command = command.substr(0, found) + " " + volume;
        
        return command;
}

现在,只要你想用mcisendstring调用这个函数,就执行这个

string volume;
cin >> volume;
vol_command = mcicommand(volume)
mcisendstring(vol_command.c_str , NULL, 0, NULL);