pyaudio简介

Python有个很强大的处理音频的库pyqudio, 使用pyaudio库可以进行录音,播放,生成wav文件等等。更多介绍可以查阅官方文档。

pyaudio安装

各平台安装方法

windows平台下直接使用pip安装即可:pip install pyqudio

录音

import wave

import pyaudio

# 定义数据流块

CHUNK = 1024

FORMAT = pyaudio.paInt16

CHANNELS = 2

RATE = 44100

# 录音时间

RECORD_SECONDS = 5

# 要写入的文件名

WAVE_OUTPUT_FILENAME = "output.wav"

# 创建PyAudio对象

p = pyaudio.PyAudio()

# 打开数据流

stream = p.open(format=FORMAT,

channels=CHANNELS,

rate=RATE,

input=True,

frames_per_buffer=CHUNK)

print("* recording")

# 开始录音

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):

data = stream.read(CHUNK)

frames.append(data)

print("* done recording")

# 停止数据流

stream.stop_stream()

stream.close()

# 关闭PyAudio

p.terminate()

# 写入录音文件

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')

wf.setnchannels(CHANNELS)

wf.setsampwidth(p.get_sample_size(FORMAT))

wf.setframerate(RATE)

wf.writeframes(b''.join(frames))

wf.close()

这里设置的录音时间是5秒,运行后结果如下:

recording

音频分析

import wave

import numpy

from pyaudio import PyAudio

import matplotlib.pyplot as plt

# 只读方式打开WAV文件

wf = wave.open('./output.wav', 'rb')

# 创建PyAudio对象

p = PyAudio()

stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),

channels = wf.getnchannels(),

rate = wf.getframerate(),

output = True)

nframes = wf.getnframes()

framerate = wf.getframerate()

# 读取完整的帧数据到str_data中,这是一个string类型的数据

str_data = wf.readframes(nframes)

wf.close()

# 将波形数据转换成数组

wave_data = numpy.fromstring(str_data, dtype=numpy.short)

# 将wave_data数组改为2列,行数自动匹配

wave_data.shape = -1,2

# 将数组转置

wave_data = wave_data.T

def time_plt():

# time也是一个数组,与wave_data[0]或wave_data[1]配对形成系列点坐标

time = numpy.arange(0, nframes)*(1.0/framerate)

# 绘制波形图

plt.subplot(211)

plt.plot(time, wave_data[0], c='r')

plt.subplot(212)

plt.plot(time, wave_data[1], c='g')

plt.xlabel('time (seconds)')

plt.show()

def freq():

# 采样点数,修改采样点数和起始位置进行不同位置和长度的音频波形分析

N = 44100

start = 0 # 开始采样位置

df = framerate/(N-1) # 分辨率

freq = [df*n for n in range(0, N)] # N个元素

wave_data2 = wave_data[0][start:start+N]

c = numpy.fft.fft(wave_data2)*2/N

# 常规显示采样频率一半的频谱

d = int(len(c)/2)

# 仅显示频率在4000以下的频谱

while freq[d] > 4000:

d -= 10

plt.plot(freq[:d-1], abs(c[:d-1]), 'r')

plt.show()

def main():

time_plt()

freq()

if __name__ == '__main__':

main()

代码中的注释比较详细,这里我录了等间隔按顺序念的 “1,2,3,4”。

先读取刚刚录制的wav文件,频谱分析中利用numpy包进行FFT(快速傅里叶变换)处理,最后利用matplotlib库进行绘图,依次绘制了波形图和频谱图。

波形图如下:

频谱图如下:

python实现录音并去燥_python实现录音并去燥_利用Python进行录音和音频分析相关推荐

  1. python怎么筛选excel数据_python筛选数据excel表格-如何利用python提取两个excel对比后的重复值的信息?...

    怎么用python读取excel表格的数据 import xlrd #open the .xls file xlsname="test.xls" book = xlrd.open_ ...

  2. python编写递归函数、求斐波那契数列_利用Python实现斐波那契数列的方法实例

    今天我们来使用Python实现递归算法求指定位数的斐波那契数列 首先我们得知道斐波那契数列是什么? 斐波那契数列又叫兔子数列 斐波那契数列就是一个数列从第三项开始第三项的值是第一项和第二项的和依次类推 ...

  3. python通过内置的什么函数打开一个文件_利用python进行文件操作

    这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...

  4. python取余还是相乘_python取余还是相乘_基于python 取余问题(%)详解

    取余的公式: 余数=除数-被除数*商 python的的余数是按照整除(向下取整)得到的商来计算的. 取余问题主要分为 : 正数与正数,负数与负数,正数与负数 ,0 正数与正数 #大数/小数:因为得出的 ...

  5. python编程求长方体体积_python编程求长方体体积_【Python编程特训连载80】答案公布:圆柱体体积计算...

    80 [本期题目↓↓↓] 圆柱也称为圆柱体,是三维几何体的一种.一个圆柱所占空间的大小,叫作这个圆柱的体积.圆柱体积公式为: 其中,S 是底面积,h 是高,r 是底面半径.编写一个程序,用户输入底面半 ...

  6. 如何用python计算年龄_python如何对年龄分段_利用python把年龄分段 - CSDN

    实验内容设计一个数据结构来存储整个学校的基本情况.基本信息应该包括:学号.姓名(可能存在相同的名称).性别.年龄.该计划旨在发现学生的名字.你可以数一数每个年龄段的人.这个想法是为了创建一个字典作为一 ...

  7. python爬取王者皮肤别人可以看见效果吗_利用python爬取王者荣耀英雄皮肤图片

    前两天看到同学用python爬下来LOL的皮肤图片,感觉挺有趣的,我也想试试,于是决定来爬一爬王者荣耀的英雄和皮肤图片. 然后,简单的分析一下结构,看看是否有反爬机制. 之后,在上网查阅资料后,发现所 ...

  8. python计算并返回任意多个整数的和_利用Python的多重处理方法计算一个长输入lin的整数和...

    使用Unix系统的一个名为forking的功能,您可以从父进程读取(而不是写入)数据,开销为零.通常,您将不得不复制数据,但是在Unix中分叉一个进程允许您绕过这个问题. 使用此方法,池中的作业可以访 ...

  9. 如何用python赚钱_利用python能怎么挣钱

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 6年python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫 ...

最新文章

  1. python多个判断条件_Python基础介绍 | 条件判断Conditionals
  2. linux查看文件夹个球,[原创]linux下面的打小球游戏
  3. 自由自在珍珠奶茶以市场细分来创新品牌
  4. Linux 小知识翻译 - 「单CD 的linux」
  5. OpenCV C++ 02 - Create a Blank Image Display
  6. JAVA实现WC.exe功能
  7. RUNOOB python练习题33 使用join方法实现用逗号分隔列表
  8. 52、基于模块化方式安装LAMP
  9. matlab slope函数,Matlab常用函数汇总
  10. jQuery点击行选中或者取消CheckBox
  11. Apache Shiro官方构架文档中文翻译
  12. php商城教学视频教程,布尔教育ThinkPHP商城实战视频教程的课件源码分享
  13. 远程连接端口修改,使用注册表修改
  14. 软件定义数据中心:双态IT的基石
  15. 2020中北大学计算机调剂名额,2020年中北大学考研调剂信息
  16. ios开发之MPNowPlayingInfoCenter 锁屏显示正在播放的音乐
  17. 我的组会内容分享(部分)CDR+CTLE+DFE
  18. 编写函数,实现对身份证号码最后一位的验证
  19. java中的“属性”:property、attribute、parameter
  20. 【Mac 环境配置】--安装git及使用

热门文章

  1. 基于51单片机的LCD1602电子钟闹钟proteus仿真设计
  2. u大师u盘装系统win7_微软电脑U盘重装win7系统教程
  3. AD9361整体介绍
  4. 【毕业设计】深度学习车道线检测系统 - python 机器视觉
  5. html5桌面录制,使用HTML5录制屏幕(屏幕录像),例如getUserMedia什么的?
  6. Java根据txt文件数据得到list_java中如何将一个txt文件中的数字读取到一个ArrayList集合中?...
  7. (狂神)ElasticSearch 7.x.x学习笔记
  8. 阿里云OSS云存储删除(单个,指定的多个文件)删除文件
  9. PHP 对接管易ERP
  10. 4.泛型类:什么是泛型类???