Поэтому я делаю простую 2D-игру с использованием C ++. А для звука / аудио эффектов я использую 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::wstring
, std::wostringstream
соответственно.