аудио — Как бы вы использовали переменную вместо громкости в mciSendString? Переполнение стека

Поэтому я делаю простую 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.

Что бы я сделал, чтобы это исправить?

0

Решение

Во-первых, вы не можете использовать 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 соответственно.

0

Другие решения


По вопросам рекламы [email protected]