TCPIP
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору dim059 11:31 09-05-2006 Цитата: Как по wav-файлу определить что у него " внутри "? То есть: моно, стерео, dts и т.д. | Вот описание формата заголовка WAV-файла. Объясняю подробно (на примере 2 файлов из папки %windir%\media\: ringout.wav и Windows XP Startup.wav). Открываете WAV-файл в HEX-редакторе. 1. В описании читаем: "RIFF" file description header | 4 bytes - FOURCC | The ascii text string "RIFF". mmsystem.h provides the macro FOURCC_RIFF for this purpose | То есть первые 4 байта (в редакторе это 2 группы по 2 позиции в каждой: xxxx xxxx, где xx --- 1 байт). То есть смещение должно показать: offset: 0x4. (в столбце отображения данных вы так и увидите, что выделили слово RIFFT). 2. Идем дальше по списку. Здесь у нас говорится size of file | 4 bytes - DWORD | The file size LESS the size of the "RIFF" description (4 bytes) and the size of file description (4 bytes). This is usually file size - 8. | То есть следующие 4 байта (2 группы) содержат информацию о размере файла без заголовка (правильно?). Выделите эти файлы и посмотрите значение в формате целого числа без знака: unsigned int в интерпретаторе данных. Это и будет размер (сравние с проводником). 3. Следующие 4 байта --- слово WAVE: "WAVE" description header | 4 bytes - FOURCC | The ascii text string "WAVE". Check out the mmioFOURCC macro in mmsystem.h. | И действительно, выделяем 4 байта и видим слово WAVE. (чудес нет) 4. Дальше --- больше. Еще 4 байта --- слово fmt с концевым пробелом: "fmt " description header | 4 bytes - FOURCC | The ascii text string "fmt " (note the trailing space). Check out the mmioFOURCC macro in mmsystem.h. | Выделяем 3 байта --- видим, что выделилось слово fmt. Остался концевой пробел --- еще 1 байт. 5. Следующие 4 байта --- параметр значения куска секции, складывающийся из нескольких частей: size of WAVE section chunck | 4 bytes - DWORD | The size of the WAVE type format (2 bytes) + mono/stereo flag (2 bytes) + sample rate (4 bytes) + bytes/sec (4 bytes) + block alignment (2 bytes) + bits/sample (2 bytes). This is usually 16 (or 0x10). | Как замечено, он обычно равен 16. Выделяем 4 байта и смотрим значение в формате длинного целого без знака: 16. Значит, так и есть. 6. Теперь идут 2 байта (1 группа по 2 разряда: хххх), значение которых равно 1. (это, видимо, для обозначения формата модуляции: PCM) WAVE type format | 2 bytes - WORD | Type of WAVE format. This is a PCM header, or a value of 0x01. | 7. Ну, вот мы и добрались до метки числа каналов. Это следующие 2 байта. Если сигнал моно, будет 0100 (для файла ringout.wav), если stereo --- 0200 (для файла Windows XP Startup.wav). mono/stereo | 2 bytes - WORD | mono (0x01) or stereo (0x02) | 8. Следующие 4 байта содержат информацию о частоте дискретизации. Выделите их и посмотрите значение в формате длинного беззначного целого. Там будет, например, 11025 (для файла ringout.wav) или 22500 (для файла Windows XP Startup.wav) Дальше в том же духе. Ежели я чего переврал, откорректируйте пожалуйста. Только вот, не проще ли скачать кусок файла (всего-то, сколько там, 24 байта?) скачать и открыть его в проигрывателе? Вот еще одно, более подробное описание. По поводу DTS (тут получается хитрее): Цитата: DTS in WAV support By:Milan Cutka on:Thu 12 of Aug, 2004 [17:26 UTC] (7622 reads) Inspired by DTS support added today to mplayer by Aurelien Jacobs I implemented support for DTS files stored in WAV to ffdshow. Examples of such files can be found here. There files use quite a strange way to store DTS in WAV. The header states it's ordinary 44100 Hz stereo 16 bit uncompressed format, but in fact in contains compressed DTS data. When opening these files in, for example, Winamp you'll hear just strange noises. An application has to scan the audio data for DTS headers (this part was taken from mplayer) and when found, use DTS decoding routines to play that file. This is how ffdshow does it currently. It scans first chunk of audio data and changes decoder to DTS if necessary. Of course the scanning isn't perfect and it's possible that uncompresssed audio file will be misidentified as DTS. To play such files, both Uncompressed audio and DTS decoding have to be enabled in ffdshow audio decoder codecs list. There is currently no way to disable checking for DTS data in WAV in the configuration dialog. If there would be cases of misidentification, inform me and I'll add possibility to disable it. | Кто бы мне сказал, чем закодировать такой WAV? Как снять с DTS-диска в DTS-WAV? Получается, "как есть", ибо "тот, кто должен" распознает DTS в том WAVе, который снимался "тем, кто не знал что снимает"? | Всего записей: 4667 | Зарегистр. 31-01-2003 | Отправлено: 12:53 09-05-2006 | Исправлено: TCPIP, 13:45 09-05-2006 |
|