使用Python实现音频效果,由浅入深理解计算机音频处理 (第1篇)

本文介绍了Python在音频处理中的应用,讲解了音频存储的原理——脉冲编码调制(PCM),以及如何使用numpy和scipy库读取和处理wav文件中的PCM数据。对于多声道音频,可以解析出各个声道的PCM序列。然而,Python的scipy库不支持直接解码除wav之外的压缩音频格式。后续内容将探讨非WAV音频的读取和音频特效的代码实现。
摘要由CSDN通过智能技术生成

   出处说明:本文转载自:使用Python实现音频效果,由浅入深理解计算机音频处理 (第1篇) (baidu.com)https://baijiahao.baidu.com/s?id=1757139553600005231

    IT业内流传着一句话,“人生苦短,我用Python“,由于Python的简洁与功能的强大,它越来越受广大程序员与工程师们的青睐。目前,Python的生态系统仍逐步扩张,截至2021年第一季度,全世界已经有超过1000万python语言的开发者了。

    2022年,Pypi中已有约12万+个第三方库,正是这些库的存在,极大地拓展了Python的功能与用途。今天,我带领读者朋友们,了解计算机处理音频的基本原理和使用科学计算常见的numpy与scipy库来处理音频。


知识储备:音频储存的原理

    开始之前,我们必须要知道的是,音频是如何存储于计算机中的,先做个铺垫。我们的耳朵之所以能够听到声音,是因为耳朵周围的空气存在一定规律的机械振动,耳膜会将空气的振动转化为神经的信号,传输到大脑,被大脑感知。而计算机中存储的,便是这些振动声波的波形。

    那么问题来了,波形如何存储?数学上,我们经常用函数来表示一种曲线,这种方法的优点是精确并且易于处理,但其缺点也是致命的:自然界中的声波非常复杂,人们几乎不可能做到用一个或几个数学函数就能将声波表达出来。于是,1937年,法国工程师Alec.里弗斯发明了一种”脉冲编码调制“(即:PCM)的方法。它简单说就是”描点作图法“,在波形上确定一些点,并只储存这些点的坐标,播放音频时,我们可以简单理解为:用光滑的曲线把这些点连接起来,就能近似的复原最初的波形了。不论再复杂的声波,PCM都能处理它,时至今日,PCM仍然是一种主流的信号调制方法。

【用”光滑“的曲线,连接每一个点】


读取PCM数据

有了以上内容为基础,我们再回到Python,python是如何读取各种格式音频文件里的PCM数据的呢?事实上,所有主流的音频文件格式中,只有wav里封装了原始的PCM数据,其他格式都使用了某些算法,对PCM序列进行了有损或无损的压缩,比如我们常见的mp3音频,就是使用了MPEG有损压缩算法,文件大小只有wav的十分之一左右。Scipy库中有一组函数:scipy.io.wavfile.read()和write(),但他只支持读取wav中未经压缩处理的pcm序列。所以,我们没有办法只通过Python解码任何格式的音频文件。

分离声道

上面的read函数返回的是一个ndarray类型的数组,ndarray是numpy库提供的python数据类型,意思是”多维数组“。read返回的ndarray实际上只有一维,即PCM序列。对于多声道音频,它的存储方式是:声道1,声道2...声道n,声道1,声道2...声道n......我们编程时,使用循环语句遍历这个大数组,很容易就能厘清各个声道。拿到各个声道的PCM序列数组后,我们就可以正式对这个音频”动刀子“整容了。

【读取PCM数据,分离声道 用法示例】

非WAV音频怎么读取?音频特效如何用代码实现?由于篇幅原因,这些问题将在下一篇文章(《使用Python实现音频效果,由浅入深理解计算机音频处理 (第2篇)》) 里介绍给大家。第2篇中附整个项目的python源代码链接。

喜欢的朋友别忘了点赞,收藏,加关注,获取更多IT领域的科普知识。

我的百度主页:Duyu09 (baidu.com)https://author.baidu.com/home/1756639575860079

我的GitHub主页:

GitHubhttps://github.com/duyu09

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Duyu09

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值