音频格式之间的转换

1. 位深之间的转换 位深度也叫采样位深,音频的位深度决定动态范围,常见的位深格式有8bit、16bit、24bit、32bit,而其中16bit最常见,8bit、16bit、32bit之间的转换可以通过ffmpeg的swr_convert函数很方便地实现转换,可参考我另外一篇博客,暂不做描述,但是无法实现24bit之间的转换,所以实现24bit和其他位深之间的转换需要另外写代码。

bool convert_16_to24(vector<uint8_t>& src_frame, vector < uint8_t>& dst_frame)//1920byte 
{
    if (src_frame.size() % 2 != 0) {
        return false;
    }
    float K1 = 32768.0f;
    float K2 = 16777216.0f;
    int samplesCount = src_frame.size() / 2;
    for (size_t i = 0; i < samplesCount; i++)
    {
        uint8_t a = src_frame[i * 2 + 0];
        uint8_t b = src_frame[i * 2 + 1];

        float src = a | b << 8;
        float dst = src / K1* K2;
        int dst_i = dst+0.5;

        uint8_t dst_1 = dst_i & 0xff;
        uint8_t dst_2 =(dst_i >> 8) & 0xff;
        uint8_t dst_3=(dst_i >> 16) & 0xff;
        dst_frame.emplace_back(dst_1);
        dst_frame.emplace_back(dst_2);
        dst_frame.emplace_back(dst_3);        
    }
   return true;
}

其他音频格式之间的转换可参考如下网址,有详细介绍:

 参考下面网址:

How to convert between (most) audio formats in .NET - CodeProject

(15条消息) 视音频数据处理入门:PCM音频采样数据处理_雷霄骅的博客-CSDN博客_音频数据​​​​​​

(15条消息) PCM1------PCM音频采样数据处理函数_qingkongyeyue的博客-CSDN博客_pcm函数

(15条消息) 24位PCM采样数据转成16位算法,已实现PCM转WAV在线工具源码支持24bits、16bits、8bits_高坚果兄弟的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值