我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python声音处理入门

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python声音处理入门

注:本文加入了译者的理解,并非严谨的译作,仅供参考。


原文Basic Sound Processing with Python描述了怎样在Python中通过pylab接口对声音进行基本的处理。

准备工作

安装库

确保库numpy、matplotlib和scipy已正确安装。

导入包

from pylab import*
from scipy.io import wavfile

读取wav文件

读取wav文件
下载文件440_sine.wav,文件中加入了基频(F0)为440Hz的噪声。

sampFreq, snd = wavfile.read('440_sine.wav')

函数scipy.io.wavefile.read以int16或int32(32位wav)格式读入wav文件。16位.wav文件对应int16,32位.wav文件对应int32,不支持24位.wav。

查看wav文件类型

>>>snd.dtype
dtype('int16')

这表示原始声压值在wav文件中一一映射到区间[-2^15, 2^15 -1]。我们把声压值归一化,即映射到区间[-1, 1):

snd = snd / (2.**15)

查看wav文件的通道数和采样点数

>>> snd.shape
(5060, 2)

表示文件包含2个通道,5060个采样点。结合采样率(sampFreq = 44110),可得信号持续时长为114ms:

>>> 5060.0 / sampFreq
0.11473922902494331

下文我们只处理其中一个通道

s1 = snd[:, 0]

python自身不支持播放声音,假如你想在python中回放声音,参考pyalsaaudio(Linux)或PyAudio。

2 绘制音调图

以时间(单位ms)为x轴,声压值为y轴,绘制音调图。先创建时间点数组

timeArray = arange(0, 5060.0, 1)   #[0s, 1s], 5060个点
timeArray = timeArray / sampFreq   #[0s, 0.114s]
timeArray = timeArray * 1000       #[0ms, 114ms]

然后绘图

plot(timeArray, s1, color='k')
ylabel('Amplitude')
xlabel('Time (ms)')

3 绘制频谱图

频谱图也是一种很有用的图形表示方式。用函数fft对声音进行快速傅立叶变换(FFT),得到声音的频谱。让我们紧跟技术文档的步伐,得到声音文件的功率谱:

n = len(s1)
p = fft(s1)         #执行傅立叶变换

技术文档中指定了执行fft用到的抽样点数目,我们这里则不指定,默认使用信号n的采样点数。不采用2的指数会使计算比较慢,不过我们处理的信号持续时间之短,这点影响微不足道。

nUniquePts = ceil((n+1)/2.0)
p = p[0:nUniquePts]
p = abs[p]

fft变换的返回结果为复合形式,比如复数,包含幅度和相位信息。我们获取傅立叶变换的绝对值,得到频率分量的幅度信息。

p = p / float(n)    #除以采样点数,去除幅度对信号长度或采样频率的依赖
p = p**2            #求平方得到能量

#乘2(详见技术手册)
#奇nfft排除奈奎斯特点
if n % 2 > 0:       #fft点数为奇
p[1:len(p)] = p[1:len(p)]*2
else:               #fft点数为偶
p[1:len(p)-1] = p[1:len(p)-1] * 2

freqArray = arange(0, nUniquePts, 1.0) * (sampFreq / n)
plot(freqArray/1000, 10*log10(p), color='k')
xlabel('Freqency (kHz)')
ylabel('Power (dB)')

绘制的频谱图如下所示。注意图中y轴是能量的对数10*log10(p),单位分贝;x轴是频率/1000,单位kHz。

Python声音处理入门

为了检验计算结果是否等于信号的能量,我们计算出信号的均方根rms。广义来说,可以用rms衡量波形的幅度。如果直接对偏移量为零的正弦波求幅度的均值,它的正负部分相互抵消,结果为零。那我们先对幅度求平方,再开方(注意:开方加大了幅度极值的权重?)

rms_val = sqrt(mean(s1**2))
rms_val
0.0615000626299

信号的rms等于总能量的平方根,那么把fft在所有频率上的能量值相加然后求平方根,应该等于rms。

>>> sqrt(sum(p))
0.0615000626299

完整代码

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python声音处理入门

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python声音处理入门

注:本文加入了译者的理解,并非严谨的译作,仅供参考。原文Basic Sound Processing with Python描述了怎样在Python中通过pylab接口对声音进行基本的处理。准备工作安装库确保库numpy、matplotli
2023-01-31

win10后没有声音怎么处理

重做系统非常方便。例如,应用u盘可以重新安装计算机系统。实际操作也非常方便。然而,许多人在重做系统后遇到了许多问题。最常见的是没有声音。如果笔记本重新安装系统软件win10后没有声音怎么办?接下来,小编将向您介绍10后笔记本重新安装系统软件
2023-07-16

电脑风扇声音大如何处理

如果电脑风扇声音变大,可以尝试以下方法进行处理:1. 清洁风扇:电脑风扇可能因为灰尘或其他杂质的堆积而导致噪音变大。可以使用吹风机或者专业的风扇清洁工具将风扇上的灰尘清理干净。2. 更换风扇:如果清洁后风扇噪音仍然较大,可能需要考虑更换风扇
2023-09-07

JAVA的声音处理方法是什么

这篇文章主要介绍“JAVA的声音处理方法是什么”,在日常操作中,相信很多人在JAVA的声音处理方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA的声音处理方法是什么”的疑惑有所帮助!接下来,请跟
2023-06-03

重装系统后没声音如何处理

  重装系统后虽然说是十分的方便,但是有时候还是会遇到一些问题,比如说重装系统后没声音,那么我们系统重装后没声音怎么办呢,接下来小编就把重装系统后没声音的解决方法带给大家。  重装系统后没声音:  1.首先我们右键打开桌面上的此电脑,选择”
2023-07-24

Python入门级报错的处理方法

Python入门级报错的处理方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。问题1:Missing parentheses in call to print原因:因为Pyth
2023-06-05

Python入门教程(三十四)Python的文件处理

这篇文章主要介绍了Python入门教程(三十四)Python的文件处理,在Python中处理文件的主要是open()函数,接下来我们就来一起看看open()函数的用法吧,需要的朋友可以参考下
2023-05-18

电脑风扇一直发出声音如何处理

今天小编给大家分享一下电脑风扇一直发出声音如何处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体原因:1.软件原因。用手
2023-06-27

win10插耳机一边有声音的处理方法

这篇文章给大家分享的是有关win10插耳机一边有声音的处理方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。处理办法如下:耳机本身的问题,建议更换耳机测试一下是不是耳机线路问题。如果耳机线路没问题的话那就是电脑声
2023-06-10

python处理音频文件(mp3)

今天aiping点读笔的MP3源文件出现声音大小不一致,而且需要将英文单词MP3与单词翻译MP3文件连接起来,刚开始使用ffmpeg效果很差。万能的gitgub再次证明了它的万能,我找到了pydub1 网址:https://github.c
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录