VEG: В соответствии со спецификацией:
http://www.fileformat.info/format/wave/stanford.htmlметаинформация в WAV файле - это первые 44 байта (данные о битрейте, количестве каналов и тп). Но я на сжатие я ее не отправляю, только сами данные из wav файла (блок data на картинке). То есть входные характеристики - звук с заданным битрейтом, известным числом каналов и тп.
Я смотрел API на vorbis, чтобы написать свой кодировщик/декодировщик, скачал пример на C, и стал писать что то похожее (только на C#), вот.
По алгоритму ты берешь кусок файла wav (например 1 kB данных - кадр или наверно правильно называть сэмпл), затем функцией vorbis_analysis_buffer получаешь указатель на буфер и пихаешь туда свой килобайт, потом вызываешь vorbis_analysis_wrote, она пихает блоки в структуру _ptrVorDsp, и затем вызываешь vorbis_analysis_blockout, она определяет доступные несжатые данные и разбивает их на блоки - возвращается структура vorbis_block. Потом для vorbis_block ты вызываешь vorbis_analysis и vorbis_bitrate_addblock, они проводят анализ блока данных и сжимают его, и затем ты вызываешь vorbis_bitrate_flushpacket, и получаешь пакет Ogg_packet (или несколько) в котором уже хранятся данные в сжатом виде(!! вот здесь пакет который я упоминал, немного сумбурно, но это чтоб понять откуда берутся ogg пакеты, а функции которые привел - они есть в описании к библиотекам vorbis и ogg).
Вот, то есть ogg packet - это минимально возможная единица сжатых данных. По идее несколько пакеты можно уложить в ogg_stream и объединить еще в одну единицу сжатых данных ogg_page. В итоге когда я разжимаю ogg_packet или ogg_page у меня получаются wav куски других размеров((
Sojindox: битность смотрел до и после, одинаковая, там различие в размерах не в разы (как было бы если, скажем, битрейт был в два раза меньше), различие в пределах процента, например сжал 533488 байт, а получил на выходе 531242 байт, из за того, что при сжатии данных кусками по 4096 байт на выходе эти куски превращались либо в 3200 байт, либо в 8128, бывали и в 4096, но разброс размера выходных wav кусков присутствует, хотя в сумме размер выходного файла не сильно отличается.
PS кадр - это вот кусок wav файла
а требуется именно получить определенность по заданию на входе кадр 1 кВ, и на выходе должен быть такой же длины кусок
читал документацию на vorbis, но там стока, не нашел об этом инфы исчо
во скока понаписал!!!)))