#include #include #include #include #ifdef _WIN32 /* needed to set stdout to binary */ #include #endif #include "lame.h" #ifdef HAVEGTK #include "gtkanal.h" #include #endif #ifdef __riscos__ #include "asmstuff.h" #endif /************************************************************************ * * main * * PURPOSE: MPEG-1,2 Layer III encoder with GPSYCHO * psychoacoustic model. * ************************************************************************/ int main(int argc, char **argv) { char mp3buffer[LAME_MAXMP3BUFFER]; short int Buffer[2][1152]; int iread,imp3; lame_global_flags gf; FILE *outf; #ifdef __riscos__ int i; #endif lame_init(&gf); /* initialize libmp3lame */ if(argc==1) lame_usage(&gf,argv[0]); /* no command-line args, print usage, exit */ /* parse the command line arguments, setting various flags in the * struct 'gf'. If you want to parse your own arguments, * or call libmp3lame from a program which uses a GUI to set arguments, * skip this call and set the values of interest in the gf struct. * (see lame.h for documentation about these parameters) */ lame_parse_args(&gf,argc, argv); if (!gf.gtkflag) { /* open the MP3 output file */ if (!strcmp(gf.outPath, "-")) { #ifdef __EMX__ _fsetmode(stdout,"b"); #elif (defined __BORLANDC__) setmode(_fileno(stdout), O_BINARY); #elif (defined __CYGWIN__) setmode(fileno(stdout), _O_BINARY); #elif (defined _WIN32) _setmode(_fileno(stdout), _O_BINARY); #endif outf = stdout; } else { if ((outf = fopen(gf.outPath, "wb")) == NULL) { fprintf(stderr,"Could not create \"%s\".\n", gf.outPath); exit(1); } } #ifdef __riscos__ /* Assign correct file type */ for (i = 0; gf.outPath[i]; i++) if (gf.outPath[i] == '.') gf.outPath[i] = '/'; SetFiletype(gf.outPath, 0x1ad); #endif } /* open the wav/aiff/raw pcm or mp3 input file. This call will * open the file with name gf.inFile, try to parse the headers and * set gf.samplerate, gf.num_channels, gf.num_samples. * if you want to do your own file input, skip this call and set * these values yourself. */ lame_init_infile(&gf); /* Now that all the options are set, lame needs to analyze them and * set some more options */ lame_init_params(&gf); lame_print_config(&gf); /* print usefull information about options being used */ #ifdef HAVEGTK if (gf.gtkflag) gtk_init (&argc, &argv); if (gf.gtkflag) gtkcontrol(&gf); else #endif { /* encode until we hit eof */ do { /* read in 'iread' samples */ iread=lame_readframe(&gf,Buffer); /* encode */ imp3=lame_encode_buffer(&gf,Buffer[0],Buffer[1],iread, mp3buffer,(int)sizeof(mp3buffer)); /* was our output buffer big enough? */ if (imp3==-1) { fprintf(stderr,"mp3 buffer is not big enough... \n"); exit(1); } if (fwrite(mp3buffer,1,imp3,outf) != imp3) { fprintf(stderr,"Error writing mp3 output"); exit(1); } } while (iread); } imp3=lame_encode_finish(&gf,mp3buffer,(int)sizeof(mp3buffer)); /* may return one more mp3 frame */ fwrite(mp3buffer,1,imp3,outf); fclose(outf); lame_close_infile(&gf); /* close the input file */ lame_mp3_tags(&gf); /* add id3 or VBR tags to mp3 file */ return 0; }