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博客