我是靠谱客的博主 忧虑鸭子,最近开发中收集的这篇文章主要介绍python实现录音并去燥_利用Python进行录音和音频分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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实现录音并去燥_利用Python进行录音和音频分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部