使用libmp3lame / liblame / lame将单声道PCM文件编码为MP3

时间:2016-10-03 12:54:37

标签: c++ audio wav pcm lame

查看libmp3lame的API,所有函数:

1-左右声道,如下所示:

int CDECL lame_encode_buffer (
    lame_global_flags*  gfp,           /* global context handle         */
    const short int     buffer_l [],   /* PCM data for left channel     */
    const short int     buffer_r [],   /* PCM data for right channel    */
    const int           nsamples,      /* number of samples per channel */
    unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
    const int           mp3buf_size ); /* number of valid octets in this
                                          stream                        */

2-采用交错数据,如下所示:

int CDECL lame_encode_buffer_interleaved(
    lame_global_flags*  gfp,           /* global context handlei        */
    short int           pcm[],         /* PCM data for left and right
                                          channel, interleaved          */
    int                 num_samples,   /* number of samples per channel,
                                          _not_ number of samples in
                                          pcm[]                         */
    unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
    int                 mp3buf_size ); /* number of valid octets in this
                                          stream                        */

虽然可以选择MONO而不是立体声,但情况确实如此。使用:

lame_set_mode(lame,MPEG_mode_e::MONO);

但是,如何让libmp3lame获取MONO PCM数据并编码单声道mp3音频?如果我没有第二个频道,那么适合使用的API是什么?

1 个答案:

答案 0 :(得分:3)

看起来你需要将模式设置为MONO,将通道数设置为1(lame_set_num_channels),并在“左”缓冲区中使用lame_encode_buffer和PCM数据。