| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- The LAME API
- This is the simple interface to the encoding part of libmp3lame.so.
- The library also contains routines for adding id3 tags and
- mp3 decoding. These routines are not fully documented,
- but you can figure them out by looking at "include/lame.h" and the
- example frontend encoder/decoder source code in frontend/main.c
- All of these steps should be done for every MP3 to be encoded.
- =========================================================================
- 1. (optional) Get the version number of the encoder, if you are interested.
- void get_lame_version(char *strbuf, size_t buflen, const char *prefix);
- 2. Error messages. By default, LAME will write error messages to
- stderr using vfprintf(). For GUI applications, this is often a problem
- and you need to set your own error message handlers:
- lame_set_errorf(gfp,error_handler_function);
- lame_set_debugf(gfp,error_handler_function);
- lame_set_msgf(gfp,error_handler_function);
-
- See lame.h for details.
- 3. Initialize the encoder. sets default for all encoder parameters.
- #include "lame.h"
- lame_global_flags *gfp;
- gfp = lame_init();
- The default (if you set nothing) is a J-Stereo, 44.1khz
- 128kbps CBR mp3 file at quality 5. Override various default settings
- as necessary, for example:
- lame_set_num_channels(gfp,2);
- lame_set_in_samplerate(gfp,44100);
- lame_set_brate(gfp,128);
- lame_set_mode(gfp,1);
- lame_set_quality(gfp,2); /* 2=high 5 = medium 7=low */
- See lame.h for the complete list of options. Note that there are
- some lame_set_*() calls not documented in lame.h. These functions
- are experimental and for testing only. They may be removed in
- the future.
- 4. Set more internal configuration based on data provided above,
- as well as checking for problems. Check that ret_code >= 0.
- ret_code = lame_init_params(gfp);
- 5. Encode some data. input pcm data, output (maybe) mp3 frames.
- This routine handles all buffering, resampling and filtering for you.
- The required mp3buffer_size can be computed from num_samples,
- samplerate and encoding rate, but here is a worst case estimate:
- mp3buffer_size (in bytes) = 1.25*num_samples + 7200.
- num_samples = the number of PCM samples in each channel. It is
- not the sum of the number of samples in the L and R channels.
- The return code = number of bytes output in mp3buffer. This can be 0.
- If it is <0, an error occured.
- int lame_encode_buffer(lame_global_flags *gfp,
- short int leftpcm[], short int rightpcm[],
- int num_samples,char *mp3buffer,int mp3buffer_size);
- There are also routines for various types of input
- (float, long, interleaved, etc). See lame.h for details.
- 6. lame_encode_flush will flush the buffers and may return a
- final few mp3 frames. mp3buffer should be at least 7200 bytes.
- return code = number of bytes output to mp3buffer. This can be 0.
- int lame_encode_flush(lame_global_flags *,char *mp3buffer, int mp3buffer_size);
- 7. Write the Xing VBR/INFO tag to mp3 file.
- void lame_mp3_tags_fid(lame_global_flags *,FILE* fid);
- This adds a valid mp3 frame which contains information about the
- bitstream some players may find usefull. It is used for CBR,ABR and
- VBR. The routine will attempt to rewind the output stream to the
- beginning. If this is not possible, (for example, you are encoding to
- stdout) you should specifically disable the tag by calling
- lame_set_bWriteVbrTag(gfp,0) in step 3 above, and call
- lame_mp3_tags_fid() with fid=NULL. If the rewind fails and
- the tag was not disabled, the first mp3 frame in the bitstream
- will be all 0's.
- 8. free the internal data structures.
- void lame_close(lame_global_flags *);
|