Hello all,

I've been writing a basic encoder using libFLAC++. It seems to work fine, as in the 
resultant file is playable in any FLAC compatible player, however the compression 
ratio is very small - the main example being a 60MB file compressing to 54MB, i guess 
there's an option i've missed, but i cannot track it down. I was hoping someone could 
point it out for me:

FLAC::Encoder::File flac;

void setup() 
{
        FLAC__FileEncoderState state;

        flac.set_filename(output_filename.c_str());
        flac.set_channels (2);
        flac.set_bits_per_sample (16);
        flac.set_sample_rate (44100);
        flac.set_do_exhaustive_model_search(false);
        flac.set_do_escape_coding(false);
        flac.set_do_mid_side_stereo(true);
        flac.set_loose_mid_side_stereo(false);
        flac.set_qlp_coeff_precision(0);
        flac.set_min_residual_partition_order(3);
        flac.set_max_residual_partition_order(3);
        flac.set_rice_parameter_search_dist(0);
        flac.set_max_lpc_order(8);

        state = flac.init();
}


int write(long num_bytes, unsigned char *buffer)
{
        int32_t sample[1176];                                           // sample 
numbers are set to one frame of a CD
        samples = 588;                                                  // which 
contains 588 samples per channel per frame
        int j=0;
        for (int i=0; i<2352; i+=4) {                                   // Converting 
unsigned char to signed long
                sample[j++] = buffer[i] + (buffer[i+1] << 8);
                sample[j++] = buffer[i+2] + (buffer[i+3] << 8);
                }
        flac.process_interleaved((const FLAC__int32*)&sample[0], samples);
}

void finish()
{
        flac.finish();
}

These are actually class members, but i've pulled them out to try and make it easier 
to spot any mistakes. I've tried to set it up to have an equivalent to quality level 5 
on the command line flac utility. I'm pulling the bytes off a CD hence the reason they 
are in char format when they enter the write loop. The write loop is called for every 
frame (i've tried changing this - writing to the the process function with a larger 
buffer, but it doesn't seem to make any difference).

Any ideas anyone?

Thanks
Andrew
_______________________________________________
Flac-dev mailing list
[EMAIL PROTECTED]
http://lists.xiph.org/mailman/listinfo/flac-dev

Reply via email to