Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.244.83] |
|
Сообщ.
#1
,
|
|
|
Джентльмены!
Столкнулся с проблемой: не играет звук в формате 20 бит и 24 бит через стандартные функции MMSystem. Имеем: - Винда 7 32-битная - Звуковой кодек Realtek High Definition Audio Фрагмент кода: Var wfx:TWAVEFORMATEX; ... begin with wfx do begin wFormatTag:=WAVE_FORMAT_PCM; nChannels:=2; nSamplesPerSec:=48000; nAvgBytesPerSec:=2*48000*3; //3-bytes count. Пробовал 4, тоже самое... nBlockAlign:=2*3; wBitsPerSample:=20; //или 24 cbSize:=0; end; SoundResult:=waveOutOpen(@hwo,DeviceNumber,@wfx,0,0,CALLBACK_NULL); Возвращает MMSYSERR_INVALPARAM. Причем тот же вызов, но с WAVE_FORMAT_QUERY, проходит успешно (т.е. формат поддерживается). Еще нюанс: при попытке открыть стандартным медиаплеером винды 20- или 24-битный wav-файл PCM, созданный в звуковом редакторе, винда ломится в интернет за декомпрессором и в конечном итоге выдает ошибку. Видит око, да зуб неймет... |
Сообщ.
#2
,
|
|
|
Цитата 20 бит и 24 бит при попытке открыть стандартным медиаплеером винды... Используйте waveformatextensible вместо waveformatex. Плеер будет воспроизводить нормально. Умеет ли карта(драйвер) работать с такими форматами - вопрос открытый. Нужно пробовать. Цитата Причем тот же вызов, но с WAVE_FORMAT_QUERY, проходит успешно Да, есть такая фишка. Для определения поддержки формата надёжней открывать устройство как обычно, без этого флага. Цитата wFormatTag:=WAVE_FORMAT_PCM; nChannels:=2; nSamplesPerSec:=48000; nAvgBytesPerSec:=2*48000*3; //3-bytes count. Пробовал 4, тоже самое... nBlockAlign:=2*3; wBitsPerSample:=20; //или 24 Последовательность заполнения waveformatex для WAVE_FORMAT_PCM [может быть такой]: nSamplesPerSec:=48000; wBitsPerSample:=24; nChannels:=2; nBlockAlign:=nChannels*wBitsPerSample shr 3; nAvgBytesPerSec:=nSamplesPerSec*nBlockAlign; |
Сообщ.
#3
,
|
|
|
На встроенной карте WAVE_FORMAT_EXTENSIBLE функциями mmsystem воспроизводится, но при этом wValidBitsPerSample игнорируется напрочь, хоть 150 бит, хоть 2 бита - никакой реакции. Подозреваю, что такой же результат будет и с директ саундом.
|