diff options
Diffstat (limited to 'lib/liblame/API')
-rw-r--r-- | lib/liblame/API | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/lib/liblame/API b/lib/liblame/API new file mode 100644 index 0000000000..c850df5311 --- /dev/null +++ b/lib/liblame/API @@ -0,0 +1,107 @@ +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 *); + + |