JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据【华为云分享】...

【摘要】 WebRTC音频处理基础知识及实战

示例代码托管在:http://www.github.com/dashnowords/blogs

博客园地址:《大史住在大前端》原创博文目录

本文中最重要的信息:32为浮点数表示16bit位深数据时是用-1~+1的小数来表示16位的-32768~+32767的!翻遍了MDN都没找到解释,我的内心很崩溃!

最近不少朋友需要在项目中对接百度语音识别REST API接口,在读了我之前写的【Recorder.js+百度语音识别】全栈方案技术细节一文后仍然对Web音频采集和处理的部分比较困惑,本文仅针对音频流处理的部分进行解释,全栈实现方案的技术要点,可以参见上面的博文,本篇不再赘述。

一. PCM格式是什么

百度语音官方文档对于音频文件的要求是:

pcm,wavarm及小程序专用的m4a格式,要求参数为16000采样率,16bit位深,单声道。

PCM编码,全称为"脉冲编码调制",是一种将模拟信号转换成数字信号的方法。模拟信号通常指连续的物理量,例如温度、湿度、速度、光照、声响等等,模拟信号在任意时刻都有对应的值;数字信号通常是模拟信号经过采样、量化和编码等几个步骤后得到的。

比如现在麦克风采集到了一段2秒的音频模拟信号,它是连续的,我们有一个很菜的声卡,采集频率为10Hz,那么经过采样后就得到了20个离散的数据点,这20个点对应的声音值可能是各种精度的,这对于存储和后续的使用而言都不方便,此时就需要将这些值也离散化,比如在上例中,信号的范围是0~52dB,假设我们希望将0~63dB的值都以整数形式记录下来,如果采用6个bit位来存储,那么就可以识别(2^6-1=63)个数值,这样采集的信号通过四舍五入后都以整数形式保存就可以了,最小精度为1dB;如果用7个bit位来保存,可存储的不同数值个数为(2^7-1=127)个,如果同样将0~63dB映射到这个范围上的话,那么最小精度就是0.5dB,很明显这样的处理肯定是有精度损失的,使用的位数越多精度越高,计算机中自然需要使用8的整数倍的bit位来进行存储,经过上述处理后数据就被转换成了一串01组成的序列,这样的音频数据是没有经过任何压缩编码处理的,也被称为“裸流数据”或“原始数据”。从上面的示例中很容易看出,用10Hz的采样率,8bit位存储采样点数值时,记录2秒的数据一共会产生2X10X8 = 160个bit位,而用16bit位来存储采样点数据时,记录1秒的数据也会产生1X10X16 = 160个bit位,如果没有任何附加的说明信息,就无法知道这段数据到底该怎么使用。按照指定要求进行编码后得到的序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值