pyAudioKits是基于librosa和其他库的强大Python音频工作流支持。

API速查手册

通过pip安装:

pip install pyAudioKits

pyAudioKits的GitHub地址,如果这个项目帮助到了你,请为它点上一颗star,谢谢你的支持!如果你在使用过程中有任何问题,请在评论区留言或在GitHub上提issue,我将持续对该项目进行维护。

在进行音频信号有关研究时,我们常常需要用到语谱图的分析。同时,我们也需要进行降噪或者有用的频率成分的提取。

常规情况下,为了实现降噪或者有用的频率成分的提取,我们会将整个音频信号通过一个时不变滤波器。如果噪声是平稳信号,该方法可以有效滤除噪声。然而实际情况下,噪声往往是非平稳的,这就意味着我们需要在不同时间点上使用参数不同的滤波器,即使用一个时变滤波器

短时傅里叶变换可以用于生成音频信号的语谱图,语谱图上包含了信号随时间变化的频率成分信息,因此我们完全可以将时变滤波器的设置和语谱图的分析进行结合

Filter-Artist基于pyAudioKits开发,实现了一个STFT语谱图定位滤波分析系统,这个系统旨在对音频信号进行短时傅里叶变换。而且,为了更好地对语谱图进行分析,我们让用户可以借助GUI,使用鼠标,在特定时间的特定频点设置巴特沃斯滤波器,交互性地提取自己感兴趣的信号成分、屏蔽噪声,观察滤波后的波形并实时播放滤波后的音频。

该项目的GitHub地址。如果它对你有用,请为它点上一颗star,谢谢!

运行环境:

Python ≥ 3.8.3

依赖:

pyAudioKits ≥ 1.0.6

PyQt5 ≥ 5.15.4

numpy ≥ 1.22.4

opencv-python ≥ 4.5.2.52

  1. 在命令行输入:

    python main.py
    

    以执行main.py,得到窗口如下图所示。

  2. 点按Load按钮,并读取预置的录音文件rec2_01.wav。

    此时显示了rec2_01.wav的语谱图。

  3. 可以选用多种窗型来显示语谱图。默认展示的是矩形窗的结果:

    使用汉明窗:

  4. 可以设置巴特沃斯滤波器的阶数和通带/阻带宽度。

  5. 不勾选Erase Mode的情况下,设置的是带通滤波器。在语谱图上点按鼠标并拖动,则鼠标初始位置决定滤波器设置的起始时间和中心频率,鼠标释放位置决定滤波器设置的结束时间。设置一个宽度较大的高频通带以提取蜂鸣器音。

  6. 勾选Erase Mode的情况下,设置的是带阻滤波器。在语谱图上点按鼠标并拖动,则鼠标初始位置决定滤波器设置的起始时间和中心频率,鼠标释放位置决定滤波器设置的结束时间。设置三个宽度较小的阻带以消除蜂鸣器音。

  7. 点击play按钮播放音频。

  8. 点击Save按钮对音频进行保存。

  9. 点击Redo按钮重置对音频的编辑。

核心代码:

核心代码位于audio.py文件内

from pyAudioKits.audio import read_Audio
from pyAudioKits.analyse import FFT
from pyAudioKits.filters import lowPassButterN, highPassButterN, bandPassButterN, bandStopButterN
import matplotlib.pyplot as plt
import numpy as npclass myspectrogram:def __init__(self,direction,window):self.__wav = read_Audio(direction)   #利用pyAudioKits的api读取音频self.__M=0.03    #设置窗长为0.03sself.__R=0.015  #设置步长为0.015sif window=="Hamming":self.__Window = "hamming"elif window=="Rectangle":self.__Window = Nonedef __stft(self):self.__freq = FFT(self.__wav.framing(self.__M, 1 - self.__R/self.__M, self.__Window))  #利用pyAudioKits的api进行短时傅里叶变换def save(self,direction):self.__wav.save(direction)  #利用pyAudioKits的api保存音频def play(self):self.__wav.sound() #利用pyAudioKits的api播放音频def drawFreq(self):self.__stft()#创建子图,并取消横纵坐标plt.figure(figsize=(8,2))plt.axis('off')plt.gca().xaxis.set_major_locator(plt.NullLocator())plt.gca().yaxis.set_major_locator(plt.NullLocator())plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)plt.margins(0,0)self.__freq.plot(ax=plt.gca(),cbar=False,freq_scale="mel",plot_type="dB")   #将子图传入pyAudioKits的频谱绘制apiplt.savefig("tmp.png")   #保存子图,后续通过PyQt读取并显示def filtering(self,n,sizeFreq,erase,xposeStart,yposeStart,xposeEnd,yposeEnd):def freq_transform(freq):    #将鼠标在频谱上点击的y轴位置,即一个[0,1]之间的数,映射到梅尔尺度频率sr = self.__wav.srlength = int(self.__M  * sr / 2)max_freq_point = int(sr / 2)max_freq = sr / 2freq_points = 700 * (np.power(10, np.linspace(0, 2595 * np.log10(1 + max_freq/700), length)/2595) - 1)freq_point = freq_points[int(length * freq)]freqs = np.linspace(0,max_freq,max_freq_point)return freqs[int(freq_point)]#将鼠标在频谱上点击的x轴位置,即一个[0,1]之间的数,映射到音频时间,后续用于音频切片xsize=self.__R * self.__freq.shape[0]xposeStart=xsize*xposeStartxposeEnd=xsize*xposeEndyposeNow=float(yposeStart)width=float(sizeFreq)/200   #将滤波器宽度映射到[0,1]的尺度上#计算滤波器的两个截止频率low=yposeNow-widthhigh=yposeNow+width#获取滤波器并进行滤波if erase:if low>0 and high<1:filt = lambda x: bandStopButterN(x, n, freq_transform(low), freq_transform(high))if low<=0:filt = lambda x: highPassButterN(x, n, freq_transform(high))if high>=1:filt = lambda x: lowPassButterN(x, n, freq_transform(low))else:if low>0 and high<1:filt = lambda x: bandPassButterN(x, n, freq_transform(low), freq_transform(high))if low<=0:filt = lambda x: lowPassButterN(x, n, freq_transform(high))if high>=1:filt = lambda x: highPassButterN(x, n, freq_transform(low))if xposeStart<xposeEnd:self.__wav[xposeStart:xposeEnd]=filt(self.__wav[xposeStart:xposeEnd])if xposeEnd<xposeStart:self.__wav[xposeEnd:xposeStart]=filt(self.__wav[xposeEnd:xposeStart])

【基于pyAudioKits的Python音频信号处理项目(一)】实现音频频谱分析仪并进行交互式滤波器设计相关推荐

  1. 【基于pyAudioKits的Python音频信号处理(一)】pyAudioKits安装与API速查手册

    文章目录 pyAudioKits 基本用法 创建或加载音频 来自NumPy数组 来自文件 录音 模拟 Audio对象 播放 绘制 转为NumPy数组 获取属性 保存 索引和切片 连接 合成 四则运算 ...

  2. pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

    pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...

  3. matlab音频信号处理实验报告,matlab音频信号处理实验报告.docx

    matlab音频信号处理实验报告 MATLAB音频信号处理实验 南昌航空大学信息工程学院 课程实验报告 实验名称:实验时间:2014年4月23日 指导教师: 班级: 学号: 姓名: 成绩: 南昌航空大 ...

  4. 【基于pyAudioKits的Python音频信号处理(七)】端点检测和语音识别

    pyAudioKits是基于librosa和其他库的强大Python音频工作流支持. API速查手册 通过pip安装: pip install pyAudioKits 本项目的GitHub地址,如果这 ...

  5. Python之音频信号处理(一)音频基础知识

    一.音频基础知识 1.声音的三要素 (1)音调 人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高.一般音频 儿童>女生>男生. 人耳听觉音频范围 ...

  6. python实时采集与处理声音信号_Python之音频信号处理(一)音频基础知识

    一.音频基础知识 1.声音的三要素 (1)音调 人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高.一般音频 儿童>女生>男生. 人耳听觉音频范围 ...

  7. 【基于pyAudioKits的Python音频信号处理项目(二)】深度学习语音识别

    pyAudioKits是基于librosa和其他库的强大Python音频工作流支持. API速查手册 通过pip安装: pip install pyAudioKits 本项目的GitHub地址,如果这 ...

  8. FPGA数字信号处理(20)单级半带(HB)滤波器设计

    本篇是FPGA数字信号处理的第20篇,前面介绍了多速率信号处理系统中用到的多速率FIR滤波器.CIC滤波器,本文将介绍另一种常用的半带滤波器(Half-Band Filter)的相关知识及设计方法.本 ...

  9. 数字信号处理——线性相位型(Ⅰ、Ⅲ型)FIR滤波器设计(1)

    目录 引言 设计说明 1.线性相位型FIR滤波器简介 2.线性相位型FIR滤波器的结构

  10. 基于MATLAB有噪声语音信号处理算法设计

    获取项目源文件,联系Q:1415736481,可指导毕设,课设 摘要 滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR滤波器是滤波器设计的重要组成部分.利用MATLAB信号处理工 ...

最新文章

  1. linux查看特定文件的位置
  2. python之常见问题集锦
  3. linux用户及权限操作
  4. 0623TP框架联系
  5. jQuery UI dialog插件出错信息:$(this).dialog is not a function
  6. openlayers3应用一:显示百度地图
  7. android 点击后退按钮,android – 按下后退按钮后重新选择正确的NavigationView菜单项...
  8. 虚拟机安装教程win10_Parallels Desktop如何安装windowns系统?PD虚拟机安装win10系统详细教程
  9. Maya界面编程入门:在Maya中使用Qt
  10. Empty paragraph passed to @param command
  11. Linux内核网络:实现与理论--介绍
  12. 视频剪辑一定要知道这6个免费视频素材库
  13. 安全测试(三) 服务器安全 渗透测试 常规服务器安全漏洞 高危端口暴露、弱口令密码、暴力破解、服务器提权、Mysql数据库提权等 浅谈《社会工程学》实战案例
  14. win10系统升级没有声音?老司机教你怎么重新安装声卡驱动
  15. 【GPU精粹与Shader编程】(四) 《GPU Gems 2》全书核心内容提炼总结 · 上篇
  16. LruCache的终极解析
  17. 黑苹果重置NVRAM方法,无法进入系统,丢失引导
  18. 【rk3399】AIO-3399J Linux_SDK Recovery按键无法进入Loader模式
  19. word2003快速排版工具栏_手机版编辑器上线!如何快速编辑微信图文?
  20. android xfire,XFire完整入门教程

热门文章

  1. 药企如何应对计算机系统验证?浪潮GMP管理保驾护航
  2. 华为云计算论述题解析(1)
  3. 线性分类器和非线性分类器总结
  4. TCP粘包分析与处理
  5. 数据库----如何将oracle语句转换成mysql语句
  6. 黑金花大理石_不同产地的黑金花大理石有哪些特点?
  7. 将java或javaweb项目打包为jar包或war包
  8. 如何用python修改安卓和iOS的微信和支付宝步数!
  9. java生成图表_【JAVA】POI生成EXCEL图表(柱状图、折线等)
  10. mariadb安装几个问题