python pyaudio显示音频波形图

python pyaudio显示音频波形图

代码如下:

import numpy as np
import matplotlib.pylab as plb
import wave

# 读取 wav
wf = wave.open("./output.wav", "rb")

# 获取音频相关参数:声道数、量化位数、采样频率、采样帧数
nchannels, sampwidth, framerate, nframes = wf.getparams()[:4]

# 将音频转为可处理形式,nframes 是帧数,函数返回的是 str 数据
str_datas = wf.readframes(nframes)

# 关闭文件流 wave
wf.close()

# 转换为 1 维短整型数组,np.short 8 位
w_datas = np.fromstring(str_datas, dtype=np.short)
print(w_datas.shape)

# 维度修改为 2,分离左右声道
w_datas.shape = -1, 2
print(w_datas.shape)

# -1 表示自动适配,根据另一个维度的数量进行分割,得到 n 行 2 列的数组
w_datas = w_datas.T
time = np.arange(0, nframes) * (1 / framerate)
plb.subplot(211)
plb.plot(time[0:220160], w_datas[0], c="g")
plb.xlabel("time")
plb.ylabel("amplitude")
plb.subplot(212)
plb.plot(time[0:220160], w_datas[1], c="b")
plb.xlabel("time")
plb.ylabel("amplitude")
plb.show()

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用Pyaudio进行录音和实时波形显示的过程中,首先需要导入Pyaudio库并创建一个音频流对象。可以通过设置相关参数,如采样率、声道数、采样格式等来配置音频流。接下来,可以使用Pyaudio提供的start_stream()方法来开始录音。 在录音的同时,我们可以通过不断地读取音频流中的数据来实现实时波形显示。可以使用Pyaudio的read()方法来从音频流中读取指定数量的音频数据。读取到的音频数据可以通过matplotlib库中的plot()方法来绘制波形图。只需要将读取到的数据传入plot()方法即可将其显示出来。 但是需要注意的是,Pyaudio读取到的音频数据是以二进制形式存储的。因此,在绘制波形图之前,我们还需要将其转换为可识别的格式。可以使用numpy库中的frombuffer()方法将二进制数据转换为数组格式。这样便可以方便地进行波形绘制。 另外,在进行实时波形显示的过程中,为了实现连续的波形显示,我们需要不断地更新绘制的数据。可以使用matplotlib库中的ion()和draw()方法来实现动态的图像显示效果。ion()方法用于启动交互模式,使得绘制的图像可以实时更新。而draw()方法则用于更新绘制的图像。 综上所述,使用Pyaudio录音和实时波形显示的步骤如下: 1. 导入Pyaudio库和其他相关库。 2. 创建音频流对象,并配置相关参数。 3. 使用start_stream()方法开始录音。 4. 处理音频流中的数据,将其转换为可识别的格式。 5. 利用matplotlib库中的plot()方法绘制波形图。 6. 使用ion()方法启动交互模式,使用draw()方法实现动态更新。 7. 循环处理步骤4-6,实现实时波形显示。 8. 使用stop_stream()方法停止录音。 通过以上步骤,我们可以实现Pyaudio录音和实时波形显示的功能。 ### 回答2: Pyaudio是一个功能强大的Python库,可以用于录音和播放音频。要实现录音与波形实时显示,可以按照以下步骤进行操作: 1. 导入必要的库:首先需要导入pyaudio库和其他必要的库,比如numpy和matplotlib。 2. 创建录音流:使用pyaudio库创建一个音频流对象,并设置音频流的参数,如采样率、声道数等。 3. 定义回调函数:为音频流设置一个回调函数,该函数会在每次读取到音频数据时被调用。在回调函数中,可以对音频数据进行处理或保存。 4. 创建图形界面:使用matplotlib库创建一个图形界面,用于显示波形数据。 5. 实时显示波形:在回调函数中,将读取到的音频数据转换为波形数据,并通过图形界面实时显示出来。 6. 开始录音:调用音频流对象的start_stream()方法,开始录音和实时显示波形。 7. 结束录音:调用音频流对象的stop_stream()方法,停止录音。 8. 关闭音频流:调用音频流对象的close()方法,关闭音频流。 9. 关闭图形界面:调用图形界面的关闭函数,关闭图形界面。 总结起来,实现pyaudio录音与波形实时显示的过程主要包括设置音频流参数、定义回调函数、创建图形界面、实时显示波形、开始录音、结束录音和关闭流和界面等步骤。按照这个流程,就可以实现录音过程中的波形实时显示。 ### 回答3: 使用pyaudio模块可以实现音频录制功能,并利用matplotlib库来实时显示音频波形。 首先需要安装pyaudio和matplotlib库,可以通过以下命令安装: ``` pip install pyaudio matplotlib ``` 接下来,可以使用以下代码来录制音频并实时显示波形: ```python import pyaudio import matplotlib.pyplot as plt import numpy as np chunk = 1024 # 缓冲区大小 format = pyaudio.paInt16 # 采样位数 channels = 1 # 声道数 rate = 44100 # 采样率 p = pyaudio.PyAudio() stream = p.open(format=format, channels=channels, rate=rate, input=True, frames_per_buffer=chunk) fig, ax = plt.subplots() x = np.arange(0, 2 * chunk, 2) line, = ax.plot(x, np.random.rand(chunk), 'r') ax.set_ylim(0, 255) ax.set_xlim(0, chunk) plt.xlabel('Sample') plt.ylabel('Amplitude') while True: data = stream.read(chunk) data_int = np.frombuffer(data, dtype=np.int16) line.set_ydata(data_int) fig.canvas.draw() fig.canvas.flush_events() plt.close() stream.stop_stream() stream.close() p.terminate() ``` 在这段代码中,首先定义了一些参数,包括缓冲区大小、采样位数、声道数和采样率等。 然后使用pyaudio模块创建一个输入流,并打开该流进行录制。通过pyaudio.PyAudio()可以创建一个PyAudio对象,用来初始化和终止音频流。使用stream.read(chunk)可以读取指定大小的音频数据。 接下来,利用matplotlib库创建一个图形窗口,其中包含一个坐标轴对象和一个初始的空线对象。通过设置x轴和y轴的范围、添加标签等参数,可以使图形显示更加合理。 在循环中,不断从输入流中读取音频数据,将数据转换为整型数组,并赋给线对象的ydata属性。然后通过调用fig.canvas.draw()和fig.canvas.flush_events()可以更新并刷新图形窗口,实现实时显示音频波形。 最后需要关闭输入流、结束PyAudio对象,并关闭图形窗口。可以通过stream.stop_stream()、stream.close()和p.terminate()实现。 以上就是使用pyaudio录音并实时显示波形的基本方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值