虽然从初中物理就认识声音是一种波,但在真正用代码去表达的时候我才建立了深刻的认识。
初识音频
从初中物理上我们就学到,声音是一种波。计算机只能处理离散的信号,通过收集足够多的离散的信号,来不断逼近波形,这个过程我们叫做采样。怎么样才能更好的还原声音信息呢?这里很自然引出两个概念了。
采样频率(Sample Rate):每秒采集声音的数量,它用赫兹(Hz)来表示。
采样率越高越靠近原声音的波形,常见的采样率有以下几种:
- 8khz:电话等使用,对于记录人声已经足够使用。
- 22.05khz:广播使用频率。
- 44.1kb:音频CD。
- 48khz:DVD、数字电视中使用。
- 96khz-192khz:DVD-Audio、蓝光高清等使用。
采样精度(Bit Depth): 它表示每次采样的精度,位数越多,能记录的范围就越大。
采样精度常用范围为8bit-32bit,而CD中一般都使用16bit。
把声音记录下来之后,通过喇叭的震动把波再还给空气传到你的耳朵就完成了这个完美的循环了。但是富有创造力的人类不会限制于此就结束了,很快人们发现,当把不同的声音传递到不同的喇叭的时候,竟然会惊奇地让声音变得有空间感了,即时是同一个声音,也比单个通道能获得更好的体验,于是就出现了什么立体声,5.1 环绕等看起来很高大上的东西。所以,音频又多了一个东西:
声音通道(Channel): 你知道每个通道存储的声音会从其中的一个喇叭出来就好了,不过可以通过算法的模拟来让没有那么多喇叭也能出来类似的效果。
有了声音通道,乐队在录音的时候就可以每个人插一条音轨了,然后每一个声音可以写到不同的通道里面,当然,实际录音当然都是后期混音而成的。下面介绍的其中一个混音算法会用到声音通道这个特性。
最后再介绍一个大家经常看到的概念:
比特率(bps [bits per second]): 其实看单位就很容易知道它要表达的意思了,就是每秒钟要播放多少 bit 的数据。公式一目了然:
1 | 比特率 = 采样率 × 采样深度 × 通道。 |
比如 采样率 = 44100,采样深度 = 16,通道 = 2 的音频的的比特率就是 44100 * 16 * 2 = 1411200 bps。
一般来说,比特率越高,音频质量越好。要注意一些比特率的换算不是 1024 作为一个级别换算的哈。
1 | 1,000 bps = 【1 kbps】 = 1,000 bit/s |
2 | 1,000,000 bps = 【1 Mbps】 = 1,000,000 bit/s |
3 | 1,000,000,000 bps = 【1 Gbps】 = 1,000,000,000 bit/s |
音频在计算机中的表示
我们来看一下真实音频在计算机中究竟是怎样的表示状态,这里指的是原始的数据表示,而非编码(Mp3,Acc等)后的表示,平时我们看到的.wav
后缀的音频,把前面 44 个字节用于记录采样率、通道等的头部信息去掉后就是就是原始的音频数据了。
在理解了上面的概念之后,我们再来看这张图。对于文件头部信息我们就不详细介绍了,不影响我们理解介绍的混音处理方式,需要了解的可以点击这里。
我们抽取其中的一个采样来看,这里我加多了一个通道,便于大家理解通道的存储位置。
不难理解,这个采样中有三个通道,每通道采样精度是 16 比特。每个采样值的排序是 Little-Endian 低位在前的方式,比如通道 1 的采样值就是 AB03
, 每个采样值的大小表示的是幅度信息。
好了,先介绍到这里,希望对你有帮助,如果文章有理解错误的地方,请给我留言指出,感谢你的阅读,下一篇将会介绍有关音频混音的相关知识。
参考资料
关于Agile Studio工作室
我们是一支由资深独立开发者和设计师组成的团队,成员均有扎实的技术实力和多年的产品设计开发经验,提供可信赖的软件定制服务。
未经声明,本站文章均为原创,转载请附上链接:
http://blog.agilestudio.cn/Android-Audio-Basic/