Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос о WAV [D7, WinXP]


Vovan #2 ©   (2007-01-18 17:46:00) 

С удивлением обнаружил, что при создании WAV при помощи стандратного Sound Recorder указанный размер чанка в Data Chunk не соответсвует действительности.

Такое часто бывает? Как быть?


Vovan #2   (2007-01-21 21:26:00) [1]

>Теперь мои комментарии:
1) RIFF_Size в принципе может быть и меньше, чем FileSize-8;
2) ChunkSize=18, а не 16;
3) Чанк 'fact', насколько я помню, это что-то типа тага ID3

Совет: данные ищи не по фиксированному смещению, а по имени чанка 'data'; как нашёл имя - следующие за ним 4 байта покажут размер звуковых данных;
Чтобы ускорить поиск:
1) читаешь имя чанка
2) если не подходит, тогда читаешь его размер в следующих 4-х байтах
3) увеличиваешь смещение на этот размер (предполагается, что смещение перед этим этапом указывает на 1-й байт после размера)
4) по новому смещению находится либо имя следующего чанка, либо конец файла

А вообще советую прочитать описание формата RIFF-файла.

Когда читал комментарий - ничего не понял. Сейчас понял в чём ошибка, переделал - и понял комментарий. :)

Всё верно, читал фиксированные 16 байт, а Sound Recorder с чего-то вдруг записал 18 (о чём честно и сообщил). Теперь читаю заголовки, потом данные.


Сергей М.   (2007-01-19 16:39:00) [2]


> Vovan #2   (19.01.07 14:38) [5]


Что-то я такого не заметил.

Только что проэксмерементировал - мой Sound Recorder (XP HE SP2 + all updates) совершенно корректно сформировал и размер файла и соотв.поле RIFF-заголовка


TRUNK   (2007-01-19 16:37:00) [3]

Вот что я выкопал из приведённых данных:

0: 'RIFF'
4: RIFF_Size=86066 // FileSize-8
8: 'WAVE'
12: 'fmt '
16: ChunkSize=18 // !!!!!!!!
20: Formattype=1 // PCM
22: ChannelCount=1 // Mono
24: SamplesPerSecond=22050
28: BytesPerSecond=44100
32: BlockSize=2
34: BitsPerSample=16
36: 0x0000 // те самые 2 байта на которые увеличен размер chunk'а
38: 'fact' // новый чанк, размер которого указан в следующих 4-х байтах


Теперь мои комментарии:
1) RIFF_Size в принципе может быть и меньше, чем FileSize-8;
2) ChunkSize=18, а не 16;
3) Чанк 'fact', насколько я помню, это что-то типа тага ID3

Совет: данные ищи не по фиксированному смещению, а по имени чанка 'data'; как нашёл имя - следующие за ним 4 байта покажут размер звуковых данных;
Чтобы ускорить поиск:
1) читаешь имя чанка
2) если не подходит, тогда читаешь его размер в следующих 4-х байтах
3) увеличиваешь смещение на этот размер (предполагается, что смещение перед этим этапом указывает на 1-й байт после размера)
4) по новому смещению находится либо имя следующего чанка, либо конец файла

А вообще советую прочитать описание формата RIFF-файла.


Vovan #2   (2007-01-19 14:38:00) [4]

52 49 46 46 32 50 01 00  57 41 56 45 66 6D 74 20  
12 00 00 00 01 00 01 00  22 56 00 00 44 AC 00 00  
02 00 10 00 00 00 66 61  63 74 04 00              

Размер: 86 074

Собственно, в размер Sound Recorder пишет всегда 291939. Я открывал звуковые файлы из папки Media - у них размер записан корректно (если добавить 44, то будет размер файла).

В принципе, с подобным я встречался с иконками - там у них в описании иконок может быть что угодно, а тащить надо по BitmamInfoHeader. Просто удивляет, что все просмотрщики/проигрыватели как будто ожидают такой падлянки и нормально проигрывают.


TRUNK   (2007-01-19 13:18:00) [5]

Напиши размер файла и его первые 44 байта (в 16-ричном формате).


ors_archangel   (2007-01-19 02:25:00) [6]

Ладно, а насколько не соответствует?


Vovan #2   (2007-01-19 00:21:00) [7]

Нет, это же Sound Recorder. Формат полностью тот.


ors_archangel   (2007-01-18 23:17:00) [8]

Возможно чанк сжат, исследуй WaveFormat или как его там, хидеры вобщем


Наверх

Титульная страница Поиск, карта сайта Написать письмо