2016-10-03 97 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)文檔「不是很有幫助」。 –