如何将audio float数组转换为AudioBufferList iOS?

时间:2018-03-01 03:57:25

标签: ios objective-c shoutcast lame

我想将Audio float数组转换为AudioBufferList

我用于转换的代码

- (AudioBufferList *)writeList:(int)numFrames fromArray:(float**)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++) {
            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;}

但我的声音很吵。

0 个答案:

没有答案