Как бы вы использовали переменную вместо объема в mciSendString? C++

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

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

2 ответа

У меня была такая же проблема с 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); 

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

Другие вопросы по тегам