使用 libmp3lame/liblame/lame 将单声道 PCM 文件编码为 MP3
Encode mono PCM file to MP3 with libmp3lame/liblame/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而不是Stereo。使用:
lame_set_mode(lame,MPEG_mode_e::MONO);
但是我怎样才能让 libmp3lame 获取单声道 PCM 数据并对单声道 mp3 音频进行编码?如果我没有第二个频道,API 应该使用什么?
看起来您需要将模式设置为单声道,将通道数设置为 1 (lame_set_num_channels
),并使用 lame_encode_buffer
和 "left" 缓冲区中的 PCM 数据。
查看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而不是Stereo。使用:
lame_set_mode(lame,MPEG_mode_e::MONO);
但是我怎样才能让 libmp3lame 获取单声道 PCM 数据并对单声道 mp3 音频进行编码?如果我没有第二个频道,API 应该使用什么?
看起来您需要将模式设置为单声道,将通道数设置为 1 (lame_set_num_channels
),并使用 lame_encode_buffer
和 "left" 缓冲区中的 PCM 数据。