美文网首页
PCM 位深 和 码率转换 实时转换

PCM 位深 和 码率转换 实时转换

作者: woo_5857 | 来源:发表于2019-11-27 15:32 被阅读0次

///转换测试代码--------------------------------------------------------

- (NSData*) pcm_downsample:(AVAudioPCMBuffer*)buffer {

    //位深转换 float32 转 int16_t

    NSData* pData = [[NSData alloc] initWithBytes:buffer.floatChannelData[0] length:buffer.frameLength * 4];

    Byte*dataByte = (Byte*)[pDatabytes];

    NSUIntegersrcSize = pData.length/4;

    Float32vf32[srcSize];

    memcpy(vf32, &dataByte[0], pData.length);

    int16_tbArr[srcSize];

    intr;

    for(size_ti =0; i < srcSize; ++i) {

        floatx = vf32[i];

        floatc;

        c = ((x < -1) ? -1: ((x >1) ?1: x));

        c = c +1;

        r = (int)(c *32767.5f);

        r = r -32768;

        bArr[i] = (short)r;

    }

//    NSMutableData *data2 = [[NSMutableData alloc] init];

//    for (NSUInteger i = 0; i < srcSize; i++) {

//

//            unsigned char valChar[2];

//            valChar[0] = 0xff & bArr[i];

//            valChar[1] = (0xff00 & bArr[i]) >> 8;

//            [data2 appendBytes:valChar length:2];

//    }

//    return data2;

    //码率转换 44100 转 16000

    uint32_tlast_pos = (uint32_t)(srcSize -1);

    uint32_tdstSize = (srcSize/44100.0)*16000;

    int16_tbArr16[dstSize];

    for(uint32_tidx =0; idx < dstSize; idx++) {

        floatindex = ((float) idx *44100.0) / (16000.0);

        uint32_tp1 = (uint32_t) index;

        floatcoef = index - p1;

        uint32_tp2 = (p1 == last_pos) ? last_pos : p1 +1;

        bArr16[idx] = (int16_t) ((1.0f- coef) * bArr[p1] + coef * bArr[p2]);

        //NSLog(@"%d",bArr16[idx]);

    }

    NSMutableData *data1 = [[NSMutableData alloc] init];

    for(NSUIntegeri =0; i < dstSize; i++) {

            unsignedcharvalChar[2];

            valChar[0] =0xff& bArr16[i];

            valChar[1] = (0xff00& bArr16[i]) >>8;

            [data1appendBytes:valCharlength:2];

    }

    returndata1;

}

相关文章

网友评论

      本文标题:PCM 位深 和 码率转换 实时转换

      本文链接:https://www.haomeiwen.com/subject/lfebwctx.html