Легко воспроизводить 24-битные аудиофайлы .wav

Хорошо известно, что Windows API PlaySound() не позволяет воспроизводить 24-битные файлы .wav.

Какой самый короткий способ воспроизвести 24-битный файл .wav в C/C++ на платформе Windows?

(по возможности без необходимости в сторонних библиотеках)


person Basj    schedule 23.05.2014    source источник
comment
Я бы предложил mciSendString, но этот пост stackoverflow.com /questions/6032795/ указывает на то, что с этим тоже могут быть проблемы. Вы смотрели на использование DirectShow: stackoverflow.com/a/8121768/2718186?   -  person MicroVirus    schedule 02.06.2014
comment
Спасибо @MicroVirus. У вас есть небольшой пример кода, чтобы я мог попробовать с mciSendString ? (Я использую Win7, поэтому не возражаю, если она не будет работать с WinXP).   -  person Basj    schedule 02.06.2014


Ответы (2)


Вы можете использовать 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 для воспроизводить аудио? приводит пример кода.

person MicroVirus    schedule 02.06.2014

Просто для справки я также переписал ответ 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!

person Basj    schedule 02.06.2014