lame.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:13k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * Interface to MP3 LAME encoding engine
  3.  *
  4.  * Copyright (c) 1999 Mark Taylor
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2, or (at your option)
  9.  * any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; see the file COPYING.  If not, write to
  18.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  */
  20. #ifndef LAME_H_INCLUDE
  21. #define LAME_H_INCLUDE
  22. #include <stdio.h>
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.   
  27. /* maximum size of mp3buffer needed if you encode at most 1152 samples for
  28.    each call to lame_encode_buffer.  see lame_encode_buffer() below  */
  29. #define LAME_MAXMP3BUFFER 16384
  30. typedef enum sound_file_format_e {
  31. sf_unknown, sf_wave, sf_aiff, sf_mp3, sf_raw
  32. } sound_file_format;
  33. /***********************************************************************
  34. *
  35. *  Global Variables.  
  36. *
  37. *  substantiated in lame.c
  38. *
  39. *  Initilized and default values set by gf=lame_init()
  40. *  gf is a pointer to this struct, which the user may use to 
  41. *  override any of the default values
  42. *
  43. *  a call to lame_set_params() is also needed
  44. *
  45. ***********************************************************************/
  46. typedef struct  {
  47.   /* input file description */
  48.   unsigned long num_samples;  /* number of samples. default=2^32-1    */
  49.   int num_channels;           /* input number of channels. default=2  */
  50.   int in_samplerate;          /* input_samp_rate. default=44.1kHz     */
  51.   int out_samplerate;         /* output_samp_rate. (usually determined automatically)   */ 
  52.   /* general control params */
  53.   int gtkflag;                /* run frame analyzer?       */
  54.   int bWriteVbrTag;           /* add Xing VBR tag?         */
  55.   int quality;                /* quality setting 0=best,  9=worst  */
  56.   int silent;                 /* disable some status output */
  57.   int mode;                       /* 0,1,2,3 stereo,jstereo,dual channel,mono */
  58.   int mode_fixed;                 /* use specified the mode, do not use lame's opinion of the best mode */
  59.   int force_ms;                   /* force M/S mode.  requires mode=1 */
  60.   int brate;                      /* bitrate */
  61.   /* frame params */
  62.   int copyright;                  /* mark as copyright. default=0 */
  63.   int original;                   /* mark as original. default=1 */
  64.   int error_protection;           /* use 2 bytes per frame for a CRC checksum. default=0*/
  65.   int padding_type;               /* 0=no padding, 1=always pad, 2=adjust padding */
  66.   int extension;                  /* the MP3 'private extension' bit.  meaningless */
  67.   /* quantization/noise shaping */
  68.   int disable_reservoir;          /* use bit reservoir? */
  69.   int experimentalX;            
  70.   int experimentalY;
  71.   int experimentalZ;
  72.   /* VBR control */
  73.   int VBR;
  74.   int VBR_q;
  75.   int VBR_min_bitrate_kbps;
  76.   int VBR_max_bitrate_kbps;
  77.   /* resampling and filtering */
  78.   int lowpassfreq;                /* freq in Hz. 0=lame choses. -1=no filter */
  79.   int highpassfreq;               /* freq in Hz. 0=lame choses. -1=no filter */
  80.   int lowpasswidth;               /* freq width of filter, in Hz (default=15%)*/
  81.   int highpasswidth;              /* freq width of filter, in Hz (default=15%)*/
  82.   /* input file reading - not used if calling program does the i/o */
  83.   sound_file_format input_format;   
  84.   int swapbytes;              /* force byte swapping   default=0*/
  85.   char *inPath;               /* name of input file */
  86.   char *outPath;              /* name of output file. */
  87.   /* Note: outPath must be set if you want Xing VBR or id3 tags
  88.    * written */
  89.   /* psycho acoustics and other aguments which you should not change 
  90.    * unless you know what you are doing  */
  91.   int ATHonly;                    /* only use ATH */
  92.   int noATH;                      /* disable ATH */
  93.   float cwlimit;                  /* predictability limit */
  94.   int allow_diff_short;       /* allow blocktypes to differ between channels ? */
  95.   int no_short_blocks;        /* disable short blocks       */
  96.   int emphasis;                   /* obsolete */
  97.   /********************************************************************/
  98.   /* internal variables NOT set by calling program, and should not be */
  99.   /* modified by the calling program                                  */
  100.   /********************************************************************/
  101.   long int frameNum;              /* frame counter */
  102.   long totalframes;               /* frames: 0..totalframes-1 (estimate)*/
  103.   int encoder_delay;
  104.   int framesize;                  
  105.   int version;                    /* 0=MPEG2  1=MPEG1 */
  106.   int padding;                    /* padding for the current frame? */
  107.   int mode_gr;                    /* granules per frame */
  108.   int stereo;                     /* number of channels */
  109.   int VBR_min_bitrate;            /* min bitrate index */
  110.   int VBR_max_bitrate;            /* max bitrate index */
  111.   float resample_ratio;           /* input_samp_rate/output_samp_rate */
  112.   int bitrate_index;
  113.   int samplerate_index;
  114.   int mode_ext;
  115.   /* lowpass and highpass filter control */
  116.   float lowpass1,lowpass2;        /* normalized frequency bounds of passband */
  117.   float highpass1,highpass2;      /* normalized frequency bounds of passband */
  118.                                   
  119.   /* polyphase filter (filter_type=0)  */
  120.   int lowpass_band;          /* zero bands >= lowpass_band in the polyphase filterbank */
  121.   int highpass_band;         /* zero bands <= highpass_band */
  122.   int filter_type;          /* 0=polyphase filter, 1= FIR filter 2=MDCT filter(bad)*/
  123.   int quantization;         /* 0 = ISO formual,  1=best amplitude */
  124.   int noise_shaping;        /* 0 = none 
  125.                                1 = ISO AAC model
  126.                                2 = allow scalefac_select=1  
  127.                              */
  128.   int noise_shaping_stop;   /* 0 = stop at over=0, all scalefacs amplified or
  129.                                    a scalefac has reached max value
  130.                                1 = stop when all scalefacs amplified or        
  131.                                    a scalefac has reached max value
  132.                                2 = stop when all scalefacs amplified 
  133.     */
  134.   int psymodel;             /* 0 = none   1=gpsycho */
  135.   int use_best_huffman;     /* 0 = no.  1=outside loop  2=inside loop(slow) */
  136. } lame_global_flags;
  137. /*
  138. The LAME API
  139.  */
  140. /* REQUIRED: initialize the encoder.  sets default for all encoder paramters,
  141.  * returns pointer to encoder parameters listed above 
  142.  */
  143. void lame_init(lame_global_flags *);
  144. /*********************************************************************
  145.  * command line argument parsing & option setting.  Only supported
  146.  * if libmp3lame compiled with LAMEPARSE defined 
  147.  *********************************************************************/
  148. /* OPTIONAL: call this to print an error with a brief command line usage guide and quit 
  149.  * only supported if libmp3lame compiled with LAMEPARSE defined.  
  150.  */
  151. void lame_usage(lame_global_flags *, char *);
  152. /* OPTIONAL: call this to print a command line interface usage guide and quit   */
  153. void lame_help(lame_global_flags *, char *);
  154. /* OPTIONAL: get the version number, in a string. of the form:  "3.63 (beta)" or 
  155.    just "3.63".  Max allows length is 20 characters  */
  156. void lame_version(lame_global_flags *, char *);
  157. /* OPTIONAL: set internal options via command line argument parsing 
  158.  * You can skip this call if you like the default values, or if
  159.  * set the encoder parameters your self 
  160.  */
  161. void lame_parse_args(lame_global_flags *, int argc, char **argv);
  162. /* REQUIRED:  sets more internal configuration based on data provided
  163.  * above
  164.  */
  165. void lame_init_params(lame_global_flags *);
  166. /* OPTONAL:  print internal lame configuration on stderr*/
  167. void lame_print_config(lame_global_flags *);
  168. /* input pcm data, output (maybe) mp3 frames.
  169.  * This routine handles all buffering, resampling and filtering for you.
  170.  * 
  171.  * leftpcm[]       array of 16bit pcm data, left channel
  172.  * rightpcm[]      array of 16bit pcm data, right channel
  173.  * num_samples     number of samples in leftpcm[] and rightpcm[] (if stereo)
  174.  * mp3buffer       pointer to buffer where mp3 output is written
  175.  * mp3buffer_size  size of mp3buffer, in bytes
  176.  * return code     number of bytes output in mp3buffer.  can be 0 
  177.  *                 if return code = -1:  mp3buffer was too small
  178.  *
  179.  * The required mp3buffer_size can be computed from num_samples, 
  180.  * samplerate and encoding rate, but here is a worst case estimate:
  181.  *
  182.  * mp3buffer_size in bytes = 1.25*num_samples + 7200
  183.  *
  184.  * I think a tighter bound could be:  (mt, March 2000)
  185.  * MPEG1:
  186.  *    num_samples*(bitrate/8)/samplerate + 4*1152*(bitrate/8)/samplerate + 512
  187.  * MPEG2:
  188.  *    num_samples*(bitrate/8)/samplerate + 4*576*(bitrate/8)/samplerate + 256
  189.  *
  190.  * but test first if you use that!
  191.  *
  192.  * set mp3buffer_size = 0 and LAME will not check if mp3buffer_size is
  193.  * large enough.
  194.  *
  195.  * NOTE: if gfp->num_channels=2, but gfp->mode = 3 (mono), the L & R channels
  196.  * will be averaged into the L channel before encoding only the L channel
  197.  * This will overwrite the data in leftpcm[] and rightpcm[].
  198.  * 
  199. */
  200. int lame_encode_buffer(lame_global_flags *,short int leftpcm[], short int rightpcm[],int num_samples,
  201. char *mp3buffer,int  mp3buffer_size);
  202. /* as above, but input has L & R channel data interleaved.  Note: 
  203.  * num_samples = number of samples in the L (or R)
  204.  * channel, not the total number of samples in pcm[]  
  205.  */
  206. int lame_encode_buffer_interleaved(lame_global_flags *,short int pcm[], 
  207. int num_samples, char *mp3buffer,int  mp3buffer_size);
  208. /* input 1 pcm frame, output (maybe) 1 mp3 frame.  
  209.  * return code = number of bytes output in mp3buffer.  can be 0 
  210.  * NOTE: this interface is outdated, please use lame_encode_buffer() instead 
  211.  * declair mp3buffer with:  char mp3buffer[LAME_MAXMP3BUFFER] 
  212.  * if return code = -1:  mp3buffer was too small 
  213.  */
  214. int lame_encode(lame_global_flags *,short int Buffer[2][1152],char *mp3buffer,int mp3buffer_size);
  215. /* REQUIRED:  lame_encode_finish will flush the buffers and may return a 
  216.  * final few mp3 frames.  mp3buffer should be at least 7200 bytes.
  217.  *
  218.  * return code = number of bytes output to mp3buffer.  can be 0
  219.  */
  220. int lame_encode_finish(lame_global_flags *,char *mp3buffer, int size);
  221. /* OPTIONAL:  lame_mp3_tags will append id3 and Xing VBR tags to
  222. the mp3 file with name given by gf->outPath.  These calls open the file,
  223. write tags, and close the file, so make sure the the encoding is finished
  224. before calling these routines.  
  225. Note: if VBR and id3 tags are turned off by the user, or turned off
  226. by LAME because the output is not a regular file, this call does nothing
  227. */
  228. void lame_mp3_tags(lame_global_flags *);
  229. /*********************************************************************
  230.  * lame file i/o.  Only supported
  231.  * if libmp3lame compiled with LAMESNDFILE or LIBSNDFILE
  232.  *********************************************************************/
  233. /* OPTIONAL: open the input file, and parse headers if possible 
  234.  * you can skip this call if you will do your own PCM input 
  235.  */
  236. void lame_init_infile(lame_global_flags *);
  237. /* OPTIONAL:  read one frame of PCM data from audio input file opened by 
  238.  * lame_init_infile.  Input file can be wav, aiff, raw pcm, anything
  239.  * supported by libsndfile, or an mp3 file
  240.  */
  241. int lame_readframe(lame_global_flags *,short int Buffer[2][1152]);
  242. /* OPTIONAL: close the sound input file if lame_init_infile() was used */
  243. void lame_close_infile(lame_global_flags *);
  244. /*********************************************************************
  245.  * a simple interface to mpglib, part of mpg123, is also included if
  246.  * libmp3lame is compiled with HAVEMPGLIB
  247.  * input 1 mp3 frame, output (maybe) 1 pcm frame.   
  248.  * lame_decode return code:  -1: error.  0: need more data.  n>0: size of pcm output
  249.  *********************************************************************/
  250. int lame_decode_init(void);
  251. int lame_decode(char *mp3buf,int len,short pcm_l[],short pcm_r[]);
  252. /* read mp3 file until mpglib returns one frame of PCM data */
  253. #ifdef AMIGA_MPEGA
  254. int lame_decode_initfile(const char *fullname,int *stereo,int *samp,int *bitrate, unsigned long *nsamp);
  255. int lame_decode_fromfile(FILE *fd,short int pcm_l[], short int pcm_r[]);
  256. #else
  257. int lame_decode_initfile(FILE *fd,int *stereo,int *samp,int *bitrate, unsigned long *nsamp);
  258. int lame_decode_fromfile(FILE *fd,short int pcm_l[],short int pcm_r[]);
  259. #endif
  260. #ifdef __cplusplus
  261. }
  262. #endif
  263. #endif