/**********************************************************************
This file is part of Crack dot Com's free source code release of Golgotha.
for information about compiling & licensing issues visit this URL
 If that doesn't help, contact Jonathan Clark at 
  golgotha_source@usa.net (Subject should have "GOLG" in it) 
***********************************************************************/

#include "main/main.hh"
#include "error/alert.hh"
#include "error/error.hh"
#include "file/file.hh"
#include "string/str_checksum.hh"
#include "memory/malloc.hh"
#include "loaders/mp3_load.hh"
#include "loaders/wav_load.hh"
#include "status/status.hh"



void write_header(i4_file_class *fp, i4_sound_info &fmt)
{
  fp->write("RIFF",4);
  fp->write_32(36+fmt.size);       // 36 + snd->size
  fp->write("WAVE", 4);
  fp->write("fmt ", 4);

  fp->write_32(16);        // size of chunk

  fp->write_16(1);         // data type

  fp->write_16(fmt.channels);           // num channels
  fp->write_32(fmt.sample_rate);   // sample rate
  fp->write_32(fmt.sample_rate*
               fmt.sample_size*fmt.channels);       // snd->sample_rate * snd->sample_size
  fp->write_16(fmt.sample_size * fmt.channels);
  fp->write_16(fmt.sample_size*8);


  fp->write("data",4);
  fp->write_32(fmt.size);       // snd->size

}

void i4_main(w32 argc, i4_const_str *argv)
{
  i4_init();


  i4_file_class *in=i4_open("in.mp3");
  i4_file_class *out=i4_open("out.wav", I4_WRITE);

  i4_sound_info fmt;
//   fmt.channels=2;
//   fmt.sample_rate=44*1024;
//   fmt.sample_size=2;
//   fmt.size=500000;

  write_header(out, fmt);
  int header_size=out->tell();

  i4_status_class *status=i4_create_status("decoding");

  if (i4_load_mp3(in, out, fmt, status))
    i4_warning("decode success");
  else
    i4_warning("decode failed");

  int size=out->tell();
  out->seek(0);

  write_header(out, fmt);
  out->seek(size);

  delete status;

  delete in;
  delete out;

 
  in=i4_open("out.wav");
  if (i4_load_wav_info(in, fmt))
  {
    i4_warning("wrote :\n"
               "sample size = %d\n"
               "channels    = %d\n"
               "sample_rate = %d\n"
               "size        = %d\n",
               fmt.sample_size,
               fmt.channels,
               fmt.sample_rate,
               fmt.size);
  }
  delete in;
  
  i4_uninit();

}