|
|
|
|
|
для: Trianon
(20.12.2007 в 21:55)
| | Trianon: Сделал я комментарий для файла - в WAV он помещается в самый конец файла. Идентификатором начала блока служит LIST, далее копирайт, название, артист... Пробовал добавить к описанию изображение - комментарий в файл не записался в итоге, хотя это может быть связано с тем, что я неподходящий размер файла указал или палитру. Заголовок изменяется (его размер), если WAV формат записать с применением компрессора. В этом случае в заголовке помещается идентификатор fact перед идентификатором data. Смещение идентификатора fmt постоянное - 12.
Foreach: По смещению 4 находится размер файла без заголовка, и при добавлении комментария этот размер изменяется естественно, поэтому, для определения времени звучания он не годится (если только не вычитать из него размер блока комментария и изображения). Следует брать тогда размер блока данных, который помещен сразу после идентификатора data, но если таких блоков несколько, то нужно будет естественно получить сумму размеров этих блоков.
Интересно посмотреть заголовки WAV в HEX-редакторе при применении компрессоров, например, если WAV упакован в mp3, то по смещению 34 нет размера выборки. Если в Проводнике по правому щелчку получить информацию о файле, то в сводке можно узнать тип компрессора, но вот как он записывается в файле не знаю, HEX-редактор таких меток не находит.
Итого: Для исключения "пролетов", нужно поискать более подробную информацию о заголовках. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2007 в 22:14)
| | Ну хорошо, на Sound Forge сам наготовлю, проверю. Ну даже если и добавляется, то просто есть идентификтор fmt (я думаю, что это сокращение от format), а после него все должно следовать строго заголовку, так что просто нужно будет получить смещение после fmt как базовое, а от него плясать. Кстати оно всегда и узнается, так что вы скорее правы, а я просто не встречал такого.
Ну значит показалось, что сердитый. :) | |
|
|
|
|
|
|
|
для: sim5
(20.12.2007 в 22:01)
| | Не могу... Давно дело было...
А касательно "сердитый" - поклеп. Сердиться на Вас мне в голову не придет всяко. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2007 в 21:55)
| | Можете привести пример такого файла? Я просто не разу ни в одном из руководств не читал о комментарии в заголовке. Не разу не приходилось парсить заголовок в РНР, а вот в Delphi да, и слышу такое впервые от вас.
Да мне то откуда знать о такой прелести как "Белые ночи", я могу только мечтать увидеть такое, и когда они наступают... Просто смотрю, Trianon только подключился, а уже такой сердитый, подумал - это влияние этих ночей. :)) | |
|
|
|
|
|
|
|
для: sim5
(20.12.2007 в 21:49)
| | просто Вы никогда не напарывались на Wave с блоком коммента в начале. :)
Насчет сезона - Вам виднее. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2007 в 21:44)
| | Trianon, только спокойствие. :) Видимо в Питере начался сезон Белых ночей?
Для WAVE это всегда будет fmt, а вот выборок действительно может быть несколько, но у них свой идентификатор data, за ним размер выборки, затем данные. | |
|
|
|
|
|
|
|
для: sim5
(20.12.2007 в 09:15)
| | >далее следует fmt [3]
это может быть совсем не fmt.
Riff состоит из элементов, которые могут являться контейнерами.
Разбирать этот формат следует по отдельным записям переменной длины. | |
|
|
|
|
|
|
|
для: FoReAcH
(20.12.2007 в 18:48)
| | Получить размер файла по смещению 4 (4 байта):
$size = unpack('Lint', $size);
Получить частоту выдачи байтов по смещению 28 (4 байта):
$samp = unpack('Lint', $samp);
$time = $size/$samp //время звучания в сек. | |
|
|
|
|
|
|
|
для: sim5
(20.12.2007 в 15:02)
| | Спасибо,все получилось!Подскажите еще как мне продолжительность файла узнать? | |
|
|
|
|
|
|
|
для: FoReAcH
(20.12.2007 в 15:01)
| | Без кавычек? У меня РНР5 не позволяет такое.
PS. Просто у вас видимо выключен вывод предупреждений, при включенном вместе с данными, вы получите и, что "так не красиво делать".
PPS. Для dword надо указывать формат L, а для word формат S, а то "апшипся" чуточку. :) | |
|
|
|
|