![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос о 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 или как его там, хидеры вобщем