2016-10-03 66 views
1

综观了libmp3lame的API,所有的功能:编码单声道PCM文件与了libmp3lame/liblame MP3 /跛脚

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?

回答

2

看起来您需要将模式设置为MONO,将通道数量设置为1(lame_set_num_channels),并使用带有PCM数据的lame_encode_buffer“左侧”缓冲区。

+1

谢谢你的回应。所以我应该保持右边的缓冲区为空?我会尝试的。但是,请你告诉我你是如何知道的? –

+1

我不得不在跛脚的地方查看它;在这方面,Lame(in-header)文档“不是很有帮助”。 –