Python 简单的扩音,音频去噪,静音剪切

Python 简单的扩音,音频去噪,静音剪切,第1张

数字信号是通过对连续的模拟信号采样得到的离散的函数。它可以简单看作一个以时间为下标的数组。比如,x[n],n为整数。比如下图是一个正弦信号(n=0,1, , 9):

对于任何的音频文件,实际上都是用这种存储方式,比如,下面是对应英文单词“skip”的一段信号(只不过由于点太多,笔者把点用直线连接了起来):

衡量数字信号的 能量(强度) ,只要简单的求振幅平方和即可:

我们知道,声音可以看作是不同频率的正弦信号叠加。那么给定一个声音信号(如上图),怎么能够知道这个信号在不同频率区段上的强度呢?答案是使用离散傅里叶变换。对信号x[n], n=0, , N-1,通常记它的离散傅里叶变换为X[n],它是一个复值函数。

比如,对上述英文单词“skip”对应的信号做离散傅里叶变换,得到它在频域中的图像是:

可以看到能量主要集中在中低音部分(约16000Hz以下)。

在频域上,也可以计算信号的强度,因为根据Plancherel定理,有:

对于一般的语音信号,长度都至少在1秒以上,有时候我们需要把其中比如25毫秒的一小部分单独拿出来研究。将一个信号依次取小段的 *** 作,就称作分帧。技术上,音频分帧是通过给信号加一系列的 窗 函数 实现的。

我们把一种特殊的函数w[n],称作窗函数,如果对所有的n,有0<=w[n]<=1,且只有有限个n使得w[n]>0。比如去噪要用到的汉宁窗,三角窗。

汉宁窗

三角窗

我们将平移的窗函数与原始信号相乘,便得到信号的“一帧”:

w[n+d]x[n]

比如用长226毫秒的汉宁窗加到“skip”信号大约中间部位上,得到一帧的信号:

可见除一有限区间之外,加窗后的信号其他部分都是0。

对一帧信号可以施加离散傅里叶变换(也叫短时离散傅里叶变换),来获取信号在这一帧内(通常是很短时间内),有关频率-能量的分布信息。

如果我们把信号按照上述方法分成一帧一帧,又将每一帧用离散傅里叶变换转换到频域中去,最后将各帧在频域的图像拼接起来,用横坐标代表时间,纵坐标代表频率,颜色代表能量强度(比如红色代表高能,蓝色代表低能),那么我们就构造出所谓 频谱图 。比如上述“skip”发音对应的信号的频谱图是:

(使用58毫秒的汉宁窗)

从若干帧信号中,我们又可以恢复出原始信号。只要我们适当选取窗口大小,以及窗口之间的平移距离L,得到 , w[n+2L], w[n+L], w[n], w[n-L], w[n-2L], ,使得对k求和有:

从而简单的叠加各帧信号便可以恢复出原始信号:

最后,注意窗函数也可以在频域作用到信号上,从而可以起到取出信号的某一频段的作用。

下面简单介绍一下3种音效。

1 扩音

要扩大信号的强度,只要简单的增大信号的“振幅”。比如给定一个信号x[n],用a>1去乘,便得到声音更大的增强信号:

同理,用系数0<a<1去乘,便得到声音变小的减弱信号。

2 去噪(降噪)

对于白噪音,我们可以简单的用“移动平均滤波器”来去除,虽然这也会一定程度降低声音的强度,但效果的确不错。但是,对于成分较为复杂,特别是频段能量分布不均匀的噪声,则需要使用下面的 噪声门 技术,它可以看作是一种“多带通滤波器”。

这个特效的基本思路是:对一段噪声样本建模,然后降低待降噪信号中噪声的分贝。

更加细节的说,是在信号的若干频段f[1], , f[M]上,分别设置噪声门g[1], , g[M],每个门都有一个对应的阈值,分别是t[1], , t[M]。这些阈值时根据噪声样本确定的。比如当通过门g[m]的信号强度超过阈值t[m]时,门就会关闭,反之,则会重新打开。最后通过的信号便会只保留下来比噪声强度更大的声音,通常也就是我们想要的声音。

为了避免噪声门的开合造成信号的剧烈变动,笔者使用了sigmoid函数做平滑处理,即噪声门在开-关2个状态之间是连续变化的,信号通过的比率也是在10-00之间均匀变化的。

实现中,我们用汉宁窗对信号进行分帧。然后对每一帧,又用三角窗将信号分成若干频段。对噪声样本做这样的处理后,可以求出信号每一频段对应的阈值。然后,又对原始信号做这样的处理(分帧+分频),根据每一帧每一频段的信号强度和对应阈值的差(diff = energy-threshold),来计算对应噪声门的开合程度,即通过信号的强度。最后,简单的将各频段,各帧的通过信号叠加起来,便得到了降噪信号。

比如原先的“skip”语音信号频谱图如下:

可以看到有较多杂音(在高频,低频段,蓝色部分)。采集025秒之前的声音作为噪声样本,对信号作降噪处理,得到降噪后信号的频谱图如下:

可以明显的看到大部分噪音都被清除了,而语音部分仍完好无损,强度也没有减弱,这是“移动平均滤波器”所做不到的。

3 静音剪切

在对音频进行上述降噪处理后,我们还可以进一步把多余的静音去除掉。

剪切的原理十分简单。首先用汉宁窗对信号做分帧。如果该帧信号强度过小,则舍去该帧。最后将保留的帧叠加起来,便得到了剪切掉静音部分的信号。

比如,对降噪处理后的“skip”语音信号做静音剪切,得到的新信号的频谱图为:

Python作为一门胶水语言,第三方库众多,下面我简单介绍几个好用的Python库:

tensorflow

这是谷歌非常著名的一个开源机器学习框架,在业界非常受欢迎,可以灵活、快速的构建大规模机器学习应用(如神经网络等),性能和可移植性都非常不错,支持GPU并行计算,如果你对机器学习比较感兴趣,也想深入了解一下的话,可以学习一下这个框架,非常不错:

pandas

如果你对数据分析比较感兴趣,那么pandas就是一个非常不错的选择,专门为数据分析而建,内置的函数和方法可以快速处理Excel,CSV等文件,而且提供了实时分析功能,代码量更少,使用起来也更方便,对于数据处理来说,是一个非常不错的分析工具:

matplotlib

这是Python的一个数据可视化库,可以快速制作我们常见的图表,如柱状图、饼状图、散点图等,当然,也不仅仅限于这些,还有很多,如果你想画出更多美丽的图表,可以考虑学习一下这个库,非常值得学习,当然,seaborn,pyecharts等这些可视化库也非常不错:

tushare

如果你对金融财经比较感兴趣,想快速获取股票等行情数据,也不想编写复杂的处理代码,那么tushare就是一个非常不错的选择,自动整合了国内大部分金融财经数据,完成了数据从采集、清洗和存储的全过程,只需简单的几行代码就可以实时快速获取到你所想要的数据,免费且开源:

PyQt

这是Python的一个GUI开发库,如果你想快速创建一个桌面GUI程序,想直接拖拽控件布局界面的话,那么PyQt就是一个非常不错的选择,基于Qt的QtDesigner设计工具,你可以直接拖拽Qt大量的控件快速构建出你自己的桌面应用,简单而又快捷:

Kivy

如果你想利用Python开发一个安卓应用,那么kivy就是一个非常不错的选择,这是Python的一个开源、跨平台的GUI库,只需要编写一套代码,即可运行在大部分桌面及移动平台上,包括winsows,linux,ios,android等,非常不错:

scrapy

这是Python的一个爬虫框架,在也就非常受欢迎,如果你想快速的定制自己的爬虫程序,又不想重复的造轮子的话,可以学习一下这个库,只需要添加少量的代码,就可启动属于自己的一个爬虫应用,非常方便:

django

这是一个流行的PythonWeb框架,如果你想快速构建一个自己的web应用,那么这个框架就非常值得学习,成熟稳重,基于MVC模式,使用起来非常方便,当然,也有轻量级的web框架,如flask,tornado等,也都非常不错:

pygame

如果你想快速开发一个小型游戏,又不想低级语言的束缚,可以考虑学习一下这个库,非常简单,只需要少量的代码便可构建一个游戏应用,当然,它也是一个非常不错的GUI库,对于桌面开发来说,也是一个不错的选择:

you-get

这是Python的一个视频、音频下载库,如果你想免费快速下载优酷、B站、腾讯等网站的视频,安装这个库后,只需要简单的一行命令就可直接下载,非常方便,而且还可以在线观看,查看视频文件格式及清晰度等,当然,也可直接下载:

就介绍这10个不错的Python库吧,对于日常学习开发来说,非常不错,当然,还有许多其他好用的Python库,这个可以到网上搜索一下,非常多,也欢迎大家留言补充。

这是个库的bug,上面报错是库里面报出来的,

它调用系统api打开音频出错,然后想打印出错误信息,但没想到错误信息解码失败

我在官方库提了个issue:网页链接

Python可以使用Twilio API来拨打电话,并提供一些自动回应的功能,例如语音转文字的自动回复服务。Twilio API还可以让Python应用程序直接拨打、接听和管理电话通话,以及播放语音信息、验证叫号码的来电、自动回复等功能。

是的,Python 37可以用于音频编程。Python有许多第三方库和工具可用于音频处理和生成,例如PyAudio、SoundDevice、SciPy等。这些库提供了易于使用的API,使得在Python中进行音频录制、播放、编辑和分析变得更加容易。

以上就是关于Python 简单的扩音,音频去噪,静音剪切全部的内容,包括:Python 简单的扩音,音频去噪,静音剪切、有哪些好用的Python库、如何调用python中的playsound在线播放声音等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9659556.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存