数字音频概览

程序设计 专栏收录该内容
19 篇文章 0 订阅

相信您一定拥有一大摞的音频格式,但是您有了解过它的存储原理吗?如果您是这方面的专家,那我只能用“班门弄斧”来形容我现在的所做所为了。我写这篇文章是为了对这方面不太了解的朋友,当然不是每一个好的程序员都是Mr. Know-all,因此在我和一些网友在音频这方面的交流时常会造成一些误会,这也是我写这篇文章的初衷。当然,我不敢妄称专家,错漏之处在所难免,如有发现,敬请指教,在下洗耳恭听!

众所周知,声音是一种能量波,因此也有频率和振幅的特征。人耳能听到声音正是由于空气的振动令耳膜产生共振。振动的频率便是声波的频率,一般人耳的接受能力是20Hz到20000Hz,低于此泛围的叫次声波,高于此泛围的叫超声波。从音乐上来讲,不同的音调的频率是不一样,比如do、re、mi就是三种不同的频率。那么,不同的乐器发出相同音调的声音也就是频率一样,但我们却可以听出它们的不同,这又是怎么回事呢?这就是音色的差别,事实上相同音调不同乐器的声音之间的差别并不在频率上而是在波形上。

任何真实存在的声音,哪怕它只是蛐蛐儿的一声鸣叫,几乎都像是交响乐队的产品,它们似乎都是许多乐器同时演奏的结果。简单的说,一般的声音都等同于大大小小许多音叉各种正弦波合成的声音,它们就是复合波。实际上小提琴、大提琴、黑管、风琴、长笛、小号、定音鼓、钹、钗、沙锤等所以音质不同,就是因为它们的复合波的组成不同。比如人的心电图和脑电图就是完全不同的波形,同样频率的两组声波,周期相同,但在一个周期内的形状不一样,人耳听到的声音就会有很大的差别。

音箱中喇叭的发声原理其实很简单,就是通过电磁感应现象,将变化的电流转为盆膜的振动,从而产生空气的振动,接着人耳就会听到声音了。因此,只要有频率在人耳能够接受的范围之内并且足够强大的电流输入喇叭,人耳在足够近的声场距离内就可以得到声压,也就是听到声音。当然在多媒体有源音箱上除了喇叭还有运放(电流放大器)和功放(功率放大器)等器件,这些器件的大致作用就是将输入的电流和功率放大至喇叭可以发出声音的泛围内。电脑上的声卡的作用就是将CPU传来的数字音频数据经过缓冲、处理、分流、转换等操作再通过音频接口将载有模拟信号的电流传送到音箱,令其发声。

现在对于电声的原理因该比较清楚了,爱迪生发明留声机正是利用了这个原理,在唱片上刻下声波的曲线,再用唱针沿着波线划过产生振动,并用电流放大就可以放出声音了。这其实就是现在所说的模拟信号,也就是用一条光滑的曲线来表示声波,但计算机数据只能用1和0表示,那么计算机又该如何表示声波呢?下面我们将引入一个概念“采样率”。

在一秒钟之内对声波进行取点的数量叫做采样率。假设声波是一条沿X正方向沿伸的sin曲线,那么我们就可以沿着X方向上在曲线上取到不同的Y方向的值,这个值就叫做采样值。当然计算机能表示的数量是有限的,我们不可以在X方向上以无限小的增量对曲线进行采样,所以我们只能按照固定的间隔对波进行采样。采样的过程其实就是抽取声波中某时间点的振幅值,很显然,在一秒中内抽取得点越多,获取得振幅越多,对波形的描述就更加准确。,人耳能够感觉到的最高频率为20kHz,但人耳对这一频率的声音并不是很敏感,所以在一次振动周期中,至少有2个点的采样,就能基本满足听觉要求,也就是至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。

现在我们已经可以用数字来表示声波了,但这还够,我们还必须用一个固定大小的数值类型来表示每一个采样点的量化值,这个量化值叫做“位率”,就是通常说的“比特率”。为了方便计算机表示,位率被定为2的整数次幂,所以我们常见的CD是以每点16bit的采样点进行采样的,能表示的振幅是2的16次方,也就是-32768到32767。当然了,采样率越高越能重现波形,表现更准确的音色,但是不是位率越高越能表现更大的音量呢?事实上不是这样的,比如16位能表现最大32767的值,而8位最大表现255,但在计算机做位率的转换时,它会做一个映射,比如16位的值32767向8位转换时,它会被按比例缩小到255,这样的音量值实际上是一模一样的,只是位率越高越能体现更多的动态细节。

现在你也许注意到了一点,常见的采样率是48000、44100、22050、11025等,为什么不是50000、10000之类的呢?人耳的极限频率是20000hz,而采样率只要大于频率的2倍,人耳就能够几本分辩率出声音,所以对应于人耳的最大接受频率,同时也为了机算机方便表示,设定CD的标准采样率为44100,低于他的采样率按他的分倍数计算,大于的按48000的整数倍计算。

现在我们再来看一下音乐CD的存储方式。CD的全称是Compact Disk,是一种激光储存媒体,它用覆盖在圆形塑料片上的金属膜来存储数据。存在CD上的数据是以数字方式存储的,也就是0、1数据,每一位就是金属膜上的一个点。这些点是以同心圆的方式由里圈到外圈顺序排列的,点的凸凹带表0或1。当激光照射在盘面时,凸凹会有不同的反射,这样数据就被读了出来。音乐CD就是按照音轨的段落标签,将上面讲的数字波形数据刻到盘面上的。音频CD格式就是纯粹的数字音轨,没有校验,然而世界上不可能有完美的盘面,或多或少会有一些物理损坏,这就导致音频数据的丢失。但通常情况下这是微不足到的,很小的盘面划伤对于音乐数据的损伤连仪器都很难测出来,更不要说人耳了,但发烧友对完美的追求是无穷尽的。现在有一款软件在抓轨时就采用了重复读取求平均值的方式来提高精度,这款软件的名字叫做EAC。


当音乐CD的数据被读到电脑后,他的存储将成为一大难题,我们可以来算一下,44100Hz采样率16bit位率的立体声数据数据一秒钟有多少?44100Hz * (16 / 8)Byte * 2Channel = 176400字节,也就是0.17M,一分种就是10.5M,一般CD可以存70多分钟的音乐,那么一张CD算下来就是700多M,对于一般百余G的硬盘空间,这还是比较难以承受的,所以很多年以前有人就提出了有损压缩的办法,采用了类似于快速傅利叶变换的算法,对数据进行处理,可以把WAVE压缩到很小,一秒钟100-300K,这样就很好的解决了存储的问题,但这是以牺牲了一部分音质为代价的。

但随着近年来生活水平的提高、硬盘容量的提升,人们开始追求更加完美的音质。在这种情形下就诞生了一些无损压缩的音频格式,比如APE、FLAC、PAC、WV等。它们大多数的压缩原理有三:基于音频数据优化的游程编码、单纯哈夫曼和基于时实音量的位率压缩。APE就是采用了单纯哈夫曼和基于时实音量的位率压缩的综合算法,压缩率非常高,一般可以把WAVE压一半,但是复杂的算法也造成了编解码的效率低下。

在文章的最后,我向您推荐一款很好的音频播放软件Foobar2000,他是完全免费的。作者是Peter Pawlowski,也就是以前Winmap三人开发小组中的一员。他因为不满于Winamp只追求漂亮的界面和花而不实的功能,而离开了NullSoft公司,自立门户。在Foobar2000刚刚推出的时候就得到了广泛的关注,它定位于音响发烧友、电台导播、音频程序员这类专业用户,在提供对原始声音100%完美的重放的同时,又提供了可选的强大实时音频处理功能。另外它还支持非常多的专业音频格式,现在已经有非常多的用户了,而foobar2000也正式成为了一个组织,由于他的SDK完全开放,因此一批世界上最优秀的音频程序员都聚集在那里。当你第一次使用foobar2000时,你一定会被它的“丑陋”所吓倒,现在的任何一款媒体播放器的界面都会比他强太多太多,但foobar2000就是这样,它并不追求宠大的初级用户群,从诞生伊始,它的身份就是专业级的音频回放处理软件。它的主页是http://www.foobar2000.org,你可以去那里免费下载最新的版本,推荐下载special版,你会拥有更多的功能。

(全文完)

  • 0
    点赞
  • 6
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
<p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426171105.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程目标</span></strong> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》从零开始,循序渐进地介绍了目前流行的网络爬虫框架Scrapy。即使你没有任何编程基础,学习起来也不会有压力,因为我们有针对性地介绍了Python编程技术。另外,《从零开始学Scrapy网络爬虫》在讲解过程中以案例为导向,通过对案例的不断迭代、优化,让读者加深对知识的理解,并通过14个项目案例,提高学习者解决实际问题的能力。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">适合对象</span></strong> </p> <p style="font-size:16px;color:#666666;"> 爬虫初学者、爬虫爱好者、高校相关专业的学生、数据爬虫工程师。 </p> <p style="font-size:16px;color:#666666;"> <br /> </p> <p style="font-size:16px;color:#666666;"> <span style="font-size:20px;"><strong>课程介绍</strong></span> </p> <p style="font-size:16px;color:#666666;"> 《从零开始学Scrapy网络爬虫》共13章。其中,第1~4章为基础篇,介绍了Python基础、网络爬虫基础、Scrapy框架及基本的爬虫功能。第5~10章为进阶篇,介绍了如何将爬虫数据存储于MySQL、MongoDB和Redis数据库中;如何实现异步AJAX数据的爬取;如何使用Selenium和Splash实现动态网站的爬取;如何实现模拟登录功能;如何突破反爬虫技术,以及如何实现文件和图片的下载。第11~13章为高级篇,介绍了使用Scrapy-Redis实现分布式爬虫;使用Scrapyd和Docker部署分布式爬虫;使用Gerapy管理分布式爬虫,并实现了一个抢票软件的综合项目。 </p> <p style="font-size:16px;color:#666666;"> <span style="color:#FF0000;">      由于目标网站可能会对页面进行改版或者升级反爬虫措施,如果发现视频中的方法无法成功爬取数据,敬请按照页面实际情况修改XPath的路径表达式。视频教程主要提供理论、方法支撑。我们也会在第一时间更新源代码,谢谢!</span> </p> <p style="font-size:16px;color:#666666;"> <img src="https://img-bss.csdn.net/202001311426306665.png" alt="" /> </p> <p style="font-size:16px;color:#666666;"> <strong><span style="font-size:20px;">课程特色</span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/202001311426415123.png" alt="" /> </p> <div> <br /> </div>
相关推荐
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程中商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 6300 多个 star,</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其中的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用,交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示,分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
<p style="color:#333333;"> <strong> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#337FE5;">[为什么要学习Spring Cloud微服务]</span> </strong> </p> <p style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="color:#4D555D;"></span> </strong> </p> <p class="ql-long-24357476" style="font-family:"color:#222226;font-size:14px;background-color:#FFFFFF;"> <strong><span style="font-family:"background-color:#FFFFFF;">SpringCloud作为主流微服务框架,<span style="color:#4D555D;">已成为各互联网公司的首选框架,国内外企业占有率持续攀升,</span>是Java工程师的必备技能。</span><span style="font-family:"background-color:#FFFFFF;">就连大名鼎鼎的阿里巴巴</span><span style="font-family:"background-color:#FFFFFF;">dubbo</span><span style="font-family:"background-color:#FFFFFF;">也正式更名为</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud Alibaba</span><span style="font-family:"background-color:#FFFFFF;">,成为了</span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud </span><span style="font-family:"background-color:#FFFFFF;">微服务中的一个子模块。</span><span style="font-family:"background-color:#FFFFFF;"></span><span style="font-family:"background-color:#FFFFFF;">Spring Cloud是企业架构转型、个人能力提升、架构师进阶的不二选择。</span> </strong> </p> <p style="color:#333333;"> <strong><strong><br /> </strong> </strong> </p> <strong><span style="font-family:"color:#337FE5;font-size:14px;background-color:#FFFFFF;">【推荐你学习这门课的理由】</span><br /> </strong> <p> <br /> </p> <p> <span>1、</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">本课程总计</span><span style="background-color:#FFFFFF;">29</span><span style="color:#222226;font-family:"font-size:14px;background-color:#FFFFFF;">课时,<span style="color:#333333;">从微服务是什么、能够做什么开始讲起,绝对的零基础入门</span></span><span></span> </p> <p> <span style="background-color:#FFFFFF;">2、<span style="color:#333333;">课程附带全部26个项目源码,230页高清PDF正版课件</span><span style="color:#333333;"></span></span> </p> <p> <span style="background-color:#FFFFFF;"><b><br /> </b></span> </p> <p> <span style="background-color:#FFFFFF;"><b><span style="color:#337FE5;">【课程知识梳理】</span></b></span> </p> <p> <span style="background-color:#FFFFFF;"><b>1、</b></span><span style="color:#333333;">先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。</span> </p> <p> <span style="color:#333333;">2、</span><span style="color:#333333;">从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。</span> </p> <p style="color:#333333;"> 3、讲解Spring Boot 与Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。 </p> <p style="color:#333333;"> 4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。 </p> <p style="color:#333333;"> 5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。 </p> <p style="color:#333333;"> 6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码搞定服务的远程调用。 </p> <p style="color:#333333;"> 7、最后为大家介绍了整个微服务体系应该包含什么,学习路线是什么,应该学习什么。 </p> <p style="color:#333333;"> <strong><br /> </strong> </p> <p style="color:#333333;"> <strong><span style="color:#337FE5;">【</span><strong><span style="color:#337FE5;">学习方法</span></strong><span style="color:#337FE5;"></span><span style="color:#337FE5;">】</span></strong> </p> <p style="color:#333333;"> 每一节课程均有代码,最好的方式是静下心来,用一天的时间,或者两个半天时间来学习。 </p> <p style="color:#333333;"> 一边听我的讲解,一边使用我提供的项目代码进行观察和运行。 </p> <p style="color:#333333;"> 只要你能跟住我的节奏,你就可以搞定微服务。 </p> <br />
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

fireseed

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值