mciSendString() ошибка громкости setaudio 261

Я использую MCI, чтобы сделать что-то связанное со звуком, и все работает, кроме того, что я не могу изменить громкость. У меня есть следующий код:

mciSendStringA("open res/theme.wav type waveaudio alias maintheme", nullptr, 0, nullptr);
MCIERROR error = mciSendStringA("setaudio maintheme volume to 50", nullptr, 0, nullptr);

error 261. Программа работает нормально, но громкость не меняется. Любые предложения о том, что не так? (Две страницы поиска в гугле и ничего нет)

4 ответа

Решение

Согласно документации:

команда setaudio

Команда setaudio устанавливает значения, связанные с воспроизведением и захватом звука. Устройства цифрового видео и видеомагнитофона распознают эту команду.

...

lpszAudio
Флаг для воспроизведения и захвата аудио. В следующей таблице перечислены типы устройств, которые распознают команду setaudio, и флаги, используемые каждым типом.

digitalvideo
Видеомагнитофон

При воспроизведении аудио используется устройство waveaudio, которое не поддерживает setaudio команда.

Чтобы установить громкость воспроизведения звука, вам нужно будет переключиться на WaveOut API для воспроизведения, затем вы можете использовать waveOutSetVolume(),

Error 261 в соответствии с этими кодами ошибок является MCIERR_UNRECOGNIZED_COMMAND ошибка. Сама ошибка довольно очевидна: вы отправляете нераспознанную команду.

Это на самом деле не решение, а просто обходной путь. Он отлично работает, если вы используете mp3-файлы. Чтобы загрузить mp3-файл:

mciSendStringA("open [file].mp3 type mpegvideo alias [soundalias]", nullptr, 0, nullptr);

Инструкция setaudio будет работать. Тем не менее, я не знаю, есть ли способ заставить это работать с файлами WAV...

Я также сталкивался с подобной проблемой ранее, я мог воспроизводить / приостанавливать / зацикливать mp3 с помощью MCI. Но не удалось отрегулировать громкость. Но добавление API WaveOut решило проблему.

      HWAVEOUT hwo;
waveOutSetVolume(hwo, dwVolume);

куда dwVolumeсогласно Microsoft docs может быть от 0x0000 до 0xFFFF,
и если устройство поддерживает воспроизведение левого и правого звука, 0xFFFF становится 0xFFFFFFFF и наоборот

например:

SILENT = 0,

НИЗКИЙ = 858993459,

НОРМАЛЬНОЕ = 1717986918,

СРЕДНИЙ = -1717986919,

ВЫСОКИЙ = -858993460,

ОЧЕНЬ ВЫСОКИЙ = -1

(эти примерные значения являются десятичными, преобразованными из исходного шестнадцатеричного значения, например 0x11111111. используйте long long int при объявлении переменных)

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