Кодирование файла mono PCM в MP3 с помощью libmp3lame / liblame/lame


Глядя на API libmp3lame, все функции:

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                        */

Это так, хотя можно выбрать моно вместо стерео. Использование:

lame_set_mode(lame,MPEG_mode_e::MONO);

Но тогда как я могу заставить libmp3lame принимать данные MONO PCM и кодировать аудио mono mp3? Как правильно использовать API для этого, если у меня нет второго канала?

1 2

1 ответ:

Похоже, что вам нужно установить режим на MONO, установить количество каналов на 1 (lame_set_num_channels) и использовать lame_encode_buffer с данными PCM в "левом" буфере.