[Flac-dev] More FlacPak stuff

Josh Green jgreen at users.sourceforge.net
Tue Nov 25 01:26:02 PST 2003

For those who are interested in checking out my initial specification
for the FlacPak format, I updated the web pages at:

The direct link to the specification notes:

For those who weren't reading the previous threads, FlacPak is a format
being designed to handle compression of files containing binary and
audio (particularly instrument files like SoundFont, DLS2, GigaSampler,

Its a rather simple format but I believe it is flexible enough. I have
not yet finalized the specification and it will likely change.
I now have a FlacPakEncoder API in the libInstPatch library (haven't
checked anything into CVS yet though), and I've written a file handler
for SoundFont files. Initial tests seem pretty good when comparing
compressed file size to other formats like sfArk. Here is a test I did
with a rather large (120MB) SoundFont containing many mono and stereo 16
bit samples (the stereo is encoded from separate mono samples).

original:  Fluid.sf2         124431652  100%
bzip:      Fluid.sf2.bz2      99610380   80.05% - Takes a long time
FlacPak:   Fluid.sf2.flacpak  66443258   53.39% - More optimization! :)
sfArk:     Fluid.sfArk        64040402   51.47% - Proprietary

My remaining questions have to do with optimizing tricks with the FLAC
encoder (I'd love to beat sfArk :) Its getting really close! These
results were achieved with the equivalent settings of -5 with the flac
binary. I haven't tried these tests on any other files yet, results will
of course differ from one file to the next.

It appears that LPC order, qlp coeff, min/max residual partition order
and blocksize all appear to be related to speed/size trade offs (I
didn't list mid side stereo stuff, since I think I have a grasp on
that). I'm sure I should probably do some more reading about these
things, but any tips would be appreciated as to the best way to choose
these values.

Would following the -0 through -8 options used with the flac command
line binary be a useful guide? I'll likely run a bunch of tests using
different options and compare the results. Even better might be to
analyze the FLAC frames that get written to determine how the samples
are getting encoded.

Also I would like to know the best procedure of selecting a block size.
Right now I'm not setting a sample rate or block size so I assume its
using the default block size of 1152 (just tried setting it to 4608,
which gave a slight increase in compression, the results above use this
setting). Whats the method that Flac uses for selecting block size based
on sample rate? I don't want to set the sample rate since I'm using the
streamable subset. Would any other criteria be advantageous in
determining the block size, such as the length of the sample itself? Do
you think the block size setting has a significant effect on the
resulting compressed size?

Things are getting exciting, well at least I know I'm excited :) Thanks
a lot for all the help so far. Cheers!
	Josh Green

More information about the Flac-dev mailing list