Как конвертировать массив аудио плавающих в mp3-буфер с помощью lame lib iOS?

Я использую EZAudio Lib для получения аудиоданных во время воспроизведения. Теперь я хочу транслировать эти данные в виде mp3-буфера. Я использую lame lib для кодирования данных и их трансляции. Но я не могу правильно его преобразовать.

получение аудио плавающего буфера снизу EZAudio lib функция

- (void)  audioPlayer:(EZAudioPlayer *)audioPlayer
          playedAudio:(float **)buffer
       withBufferSize:(UInt32)bufferSize
 withNumberOfChannels:(UInt32)numberOfChannels
          inAudioFile:(EZAudioFile *)audioFile

После получения буфера используйте функцию ниже для преобразования в AudioBufferList

- (AudioBufferList *)writeList:(long)numFrames fromArray:(short **)data{

if (!data)        return nil;
if (!numFrames)    return nil;

AudioBufferList *abl = AllocateAudioBufferList(mStreamFormat.mChannelsPerFrame, numFrames*sizeof(short));
if (!abl)        return nil;

for (long c = 0; c < mStreamFormat.mChannelsPerFrame; c++) {
    abl->mBuffers[c].mNumberChannels = 2;
    abl->mBuffers[c].mDataByteSize = numFrames*sizeof(short);
    if (data[c]) {
        short *buffer = (short*)abl->mBuffers[c].mData;
        for (long v = 0; v < numFrames; v++) {
            buffer[v] = data[c][v];
           /* if (data[c][v] > 0.999)        data[c][v] = 0.999;
            else if (data[c][v] < -1.)    data[c][v] = -1.;
            buffer[v] = (short)(data[c][v]*32768.f);*/
        }
    }
    else     memset(abl->mBuffers[c].mData, 0, numFrames*sizeof(short));
}
return abl;
}

когда я получаю AudioBufferList и перейти к функции ниже для кодирования

- (void)newEncodingCodeWithFilePath:(AudioBufferList *)bufferListInOut {

int inNumPackets = 2048;
int MP3_SIZE = inNumPackets*2;
unsigned char mp3_buffer[MP3_SIZE];

memset(mp3_buffer, 0, sizeof(mp3_buffer));

int encodedBytes = lame_encode_buffer(lame,bufferListInOut->mBuffers[0].mData,  bufferListInOut->mBuffers[1].mData, inNumPackets, mp3_buffer, MP3_SIZE);

[self sendBuffer:[NSData dataWithBytes:mp3_buffer length:encodedBytes]];

 lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
}

Я хочу преобразовать PlayAudio (буфер) для кодирования данных (используя lame), чтобы я мог отправить на сервер.

Пожалуйста, помогите мне.

0 ответов

Другие вопросы по тегам