Хорошо известно, что Windows API PlaySound()
не позволяет воспроизводить 24-битные файлы .wav.
Какой самый короткий способ воспроизвести 24-битный файл .wav в C/C++ на платформе Windows?
(по возможности без необходимости в сторонних библиотеках)
Хорошо известно, что Windows API PlaySound()
не позволяет воспроизводить 24-битные файлы .wav.
Какой самый короткий способ воспроизвести 24-битный файл .wav в C/C++ на платформе Windows?
(по возможности без необходимости в сторонних библиотеках)
Вы можете использовать mciSendString
< /a>, но я точно не знаю, может ли он воспроизводить 24-битные файлы WAV, и если да, то каковы требования к платформе.
MCI работает с простыми строковыми командами, которые отправляются с использованием mciSendString
. Чтобы открыть файл и воспроизвести его (для краткости проверка ошибок опущена):
mciSendString("open \"C:\\My Folder\\Sample.wav\" type waveaudio alias sampleSound", NULL, 0, NULL);
mciSendString("play sampleSound from 0", NULL, 0, NULL);
Обратите внимание, что alias sampleSound
— это пользовательское имя, которое вы даете открытому ресурсу, чтобы вы могли обратиться к нему позже. Вы можете закрыть ресурс с помощью строки "close sampleSound"
, и есть еще много команд и опций для управления воспроизведением.
Если это не сработает, лучше всего использовать DirectShow, который может использовать для воспроизведения все фильтры DirectShow, установленные в системе. Этот ответ SO Используйте встроенный в Windows декодер MP3 для воспроизводить аудио? приводит пример кода.
Просто для справки я также переписал ответ MicroVirus в код Python:
import ctypes
ctypes.windll.WINMM.mciSendStringW(u"open BASS.wav type waveaudio alias sample1", None, 0, None)
ctypes.windll.WINMM.mciSendStringW(u"play sample1 from 0", None, 0, None)
raw_input()
Работает с 24-битными файлами .wav!
mciSendString
, но этот пост stackoverflow.com /questions/6032795/ указывает на то, что с этим тоже могут быть проблемы. Вы смотрели на использование DirectShow: stackoverflow.com/a/8121768/2718186? - person MicroVirus   schedule 02.06.2014mciSendString
? (Я использую Win7, поэтому не возражаю, если она не будет работать с WinXP). - person Basj   schedule 02.06.2014