Форум: "Media";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
ВнизВопрос о WAV Найти похожие ветки
← →
Vovan #2 (2007-01-18 17:46) [0]С удивлением обнаружил, что при создании WAV при помощи стандратного Sound Recorder указанный размер чанка в Data Chunk не соответсвует действительности.
Такое часто бывает? Как быть?
← →
ors_archangel © (2007-01-18 23:17) [1]Возможно чанк сжат, исследуй WaveFormat или как его там, хидеры вобщем
← →
Vovan #2 (2007-01-19 00:21) [2]Нет, это же Sound Recorder. Формат полностью тот.
← →
ors_archangel © (2007-01-19 02:25) [3]Ладно, а насколько не соответствует?
← →
TRUNK © (2007-01-19 13:18) [4]Напиши размер файла и его первые 44 байта (в 16-ричном формате).
← →
Vovan #2 (2007-01-19 14:38) [5]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 16:37) [6]Вот что я выкопал из приведённых данных:
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-файла.
← →
Сергей М. © (2007-01-19 16:39) [7]
> Vovan #2 (19.01.07 14:38) [5]
Что-то я такого не заметил.
Только что проэксмерементировал - мой Sound Recorder (XP HE SP2 + all updates) совершенно корректно сформировал и размер файла и соотв.поле RIFF-заголовка
← →
Vovan #2 (2007-01-21 21:26) [8]>Теперь мои комментарии:
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 (о чём честно и сообщил). Теперь читаю заголовки, потом данные.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.07 c