【问题标题】:How would you use a variable in place of volume in mciSendString? C++您将如何使用变量代替 mciSendString 中的音量? C++
【发布时间】:2015-07-05 07:21:49
【问题描述】:

所以我正在使用 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 时一样。

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

【问题讨论】:

标签: c++ audio volume mcisendstring


【解决方案1】:

首先,您不能将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

【讨论】:

  • 使用您提供的代码,我收到错误消息:“const char *”类型的参数与 cmd.c_str() 中“LPCWSTR”类型的参数不兼容
  • @CurtisPhillips 确定您的编译器环境(多字节宽字符串或 UTF8)的实际设置。
  • 您可以在应用程序中禁用 UTF8,方法是转到项目属性 -> 常规 -> 字符集并将其设置为“未设置”。
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 2022-10-15
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
相关资源
最近更新 更多