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 устанавливает значения, связанные с воспроизведением и захватом звука. Устройства цифрового видео и видеомагнитофона распознают эту команду.
...
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
при объявлении переменных)