main.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <fcntl.h>
  5. #ifdef _WIN32
  6. /* needed to set stdout to binary */
  7. #include <io.h>
  8. #endif
  9. #include "lame.h"
  10. #ifdef HAVEGTK
  11. #include "gtkanal.h"
  12. #include <gtk/gtk.h>
  13. #endif
  14. #ifdef __riscos__
  15. #include "asmstuff.h"
  16. #endif
  17. /************************************************************************
  18. *
  19. * main
  20. *
  21. * PURPOSE:  MPEG-1,2 Layer III encoder with GPSYCHO
  22. * psychoacoustic model.
  23. *
  24. ************************************************************************/
  25. int main(int argc, char **argv)
  26. {
  27.   char mp3buffer[LAME_MAXMP3BUFFER];
  28.   short int Buffer[2][1152];
  29.   int iread,imp3;
  30.   lame_global_flags gf;
  31.   FILE *outf;
  32. #ifdef __riscos__
  33.   int i;
  34. #endif
  35.   lame_init(&gf);                  /* initialize libmp3lame */
  36.   if(argc==1) lame_usage(&gf,argv[0]);  /* no command-line args, print usage, exit  */
  37.   /* parse the command line arguments, setting various flags in the
  38.    * struct 'gf'.  If you want to parse your own arguments,
  39.    * or call libmp3lame from a program which uses a GUI to set arguments,
  40.    * skip this call and set the values of interest in the gf struct.
  41.    * (see lame.h for documentation about these parameters)
  42.    */
  43.   lame_parse_args(&gf,argc, argv);
  44.   if (!gf.gtkflag) {
  45.     /* open the MP3 output file */
  46.     if (!strcmp(gf.outPath, "-")) {
  47. #ifdef __EMX__
  48.       _fsetmode(stdout,"b");
  49. #elif (defined  __BORLANDC__)
  50.       setmode(_fileno(stdout), O_BINARY);
  51. #elif (defined  __CYGWIN__)
  52.       setmode(fileno(stdout), _O_BINARY);
  53. #elif (defined _WIN32)
  54.       _setmode(_fileno(stdout), _O_BINARY);
  55. #endif
  56.       outf = stdout;
  57.     } else {
  58.       if ((outf = fopen(gf.outPath, "wb")) == NULL) {
  59. fprintf(stderr,"Could not create "%s".n", gf.outPath);
  60. exit(1);
  61.       }
  62.     }
  63. #ifdef __riscos__
  64.     /* Assign correct file type */
  65.     for (i = 0; gf.outPath[i]; i++)
  66.       if (gf.outPath[i] == '.') gf.outPath[i] = '/';
  67.     SetFiletype(gf.outPath, 0x1ad);
  68. #endif
  69.   }
  70.   /* open the wav/aiff/raw pcm or mp3 input file.  This call will
  71.    * open the file with name gf.inFile, try to parse the headers and
  72.    * set gf.samplerate, gf.num_channels, gf.num_samples.
  73.    * if you want to do your own file input, skip this call and set
  74.    * these values yourself.
  75.    */
  76.   lame_init_infile(&gf);
  77.   /* Now that all the options are set, lame needs to analyze them and
  78.    * set some more options
  79.    */
  80.   lame_init_params(&gf);
  81.   lame_print_config(&gf);   /* print usefull information about options being used */
  82. #ifdef HAVEGTK
  83.   if (gf.gtkflag) gtk_init (&argc, &argv);
  84.   if (gf.gtkflag) gtkcontrol(&gf);
  85.   else
  86. #endif
  87.     {
  88.       /* encode until we hit eof */
  89.       do {
  90. /* read in 'iread' samples */
  91. iread=lame_readframe(&gf,Buffer);
  92. /* encode */
  93. imp3=lame_encode_buffer(&gf,Buffer[0],Buffer[1],iread,
  94.               mp3buffer,(int)sizeof(mp3buffer)); 
  95. /* was our output buffer big enough? */
  96. if (imp3==-1) {
  97.   fprintf(stderr,"mp3 buffer is not big enough... n");
  98.   exit(1);
  99. }
  100. if (fwrite(mp3buffer,1,imp3,outf) != imp3) {
  101.   fprintf(stderr,"Error writing mp3 output");
  102.   exit(1);
  103. }
  104.       } while (iread);
  105.     }
  106.   imp3=lame_encode_finish(&gf,mp3buffer,(int)sizeof(mp3buffer));   /* may return one more mp3 frame */
  107.   fwrite(mp3buffer,1,imp3,outf);
  108.   fclose(outf);
  109.   lame_close_infile(&gf);            /* close the input file */
  110.   lame_mp3_tags(&gf);                /* add id3 or VBR tags to mp3 file */
  111.   return 0;
  112. }