home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 13
/
AACD13.ISO
/
AACD
/
Sound
/
LAME
/
src
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-07-17
|
5KB
|
189 lines
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#ifdef _WIN32
/* needed to set stdout to binary */
#include <io.h>
#endif
#include "lame.h"
#include "util.h"
#ifdef HAVEGTK
#include "gtkanal.h"
#include <gtk/gtk.h>
#endif
#ifdef __riscos__
#include "asmstuff.h"
#endif
/* PLL 14/04/2000 */
#if macintosh
#include <console.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
#if macintosh
argc = ccommand(&argv);
#endif
/* initialize libmp3lame */
if (lame_init(&gf)<0) {
ERRORF("fatal error during initialization\n");
LAME_ERROR_EXIT();
}
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)
*/
#ifdef ONLYVORBIS
gf.ogg=1;
#endif
lame_parse_args(&gf,argc, argv);
/* 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
*/
if (lame_init_params(&gf)<0) {
ERRORF("fatal error during initialization\n");
LAME_ERROR_EXIT();
}
if (!gf.decode_only)
lame_print_config(&gf); /* print usefull information about options being used */
if (!gf.gtkflag) {
/* open the 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) {
ERRORF("Could not create \"%s\".\n", gf.outPath);
LAME_ERROR_EXIT();
}
}
#ifdef __riscos__
/* Assign correct file type */
for (i = 0; gf.outPath[i]; i++) {
if (gf.outPath[i] == '.')
gf.outPath[i] = '/';
else if (gf.outPath[i] == '/')
gf.outPath[i] = '.';
}
if (gf.decode_only)
SetFiletype(gf.outPath, 0xfb1); /* Wave */
else
SetFiletype(gf.outPath, 0x1ad); /* AMPEG */
#endif
}
if (gf.gtkflag) {
#ifdef HAVEGTK
gtk_init (&argc, &argv);
gtkcontrol(&gf);
#else
ERRORF("Error: lame not compiled with GTK support \n");
#endif
} else if (gf.decode_only) {
/* decode an mp3 file to a .wav */
lame_decoder(&gf,outf,gf.encoder_delay);
} else {
lame_id3v2_tag(&gf,outf); /* add ID3 version 2 tag to mp3 file */
/* 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<0) {
if (imp3==-1) ERRORF("mp3 buffer is not big enough... \n");
else ERRORF("mp3 internal error: error code=%i\n",imp3);
LAME_ERROR_EXIT();
}
/* imp3 is not negative, but fwrite needs an unsigned here */
if (fwrite(mp3buffer,1,(unsigned int)imp3,outf) != imp3) {
ERRORF("Error writing mp3 output \n");
LAME_ERROR_EXIT();
}
} while (iread);
imp3=lame_encode_finish(&gf,mp3buffer,(int)sizeof(mp3buffer)); /* may return one more mp3 frame */
if (imp3<0) {
if (imp3==-1) ERRORF("mp3 buffer is not big enough... \n");
else ERRORF("mp3 internal error: error code=%i\n",imp3);
LAME_ERROR_EXIT();
}
/* imp3 is not negative, but fwrite needs an unsigned here */
fwrite(mp3buffer,1,(unsigned int)imp3,outf);
fclose(outf);
lame_mp3_tags(&gf); /* add ID3 version 1 or VBR tags to mp3 file */
}
lame_close_infile(&gf); /* close the input file */
return 0;
}