from scipy.io import wavfile
import matplotlib.pyplot as plt
import numpy as np
import pyaudio
import wave

# 设置中文字体显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 录制语音信号参数设置
CHUNK = 1024  # 缓冲区大小
FORMAT = pyaudio.paInt16  # 采样位数
CHANNELS = 1  # 声道数
RATE = 16000  # 采样率
RECORD_SECONDS = 3  # 录制时长
WAVE_OUTPUT_FILENAME = 'C2_1_y_1.wav'  # 保存的WAV文件名

p = pyaudio.PyAudio()  # 创建PyAudio对象

# 打开音频流
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

print('* 录音开始')
frames = []  # 存储录音数据的列表
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK, exception_on_overflow=False)
    frames.append(data)

print('* 录音结束')

# 停止和关闭音频流
stream.stop_stream()
stream.close()
p.terminate()

# 保存录音数据为WAV文件
with wave.open(WAVE_OUTPUT_FILENAME, 'wb') as wf:
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))

# 读取WAV文件并显示波形图
sample_rate, data = wavfile.read(WAVE_OUTPUT_FILENAME)
duration = data.shape[0] / sample_rate

time = np.linspace(0., duration, data.shape[0])  # 时间轴
normalized_data = data / np.max(np.abs(data))  # 归一化幅度

plt.plot(time, normalized_data)  # 绘制波形图
plt.xlabel('时间 (秒)')
plt.ylabel('归一化幅度')
plt.title('录音信号波形图')
plt.show()

这段代码演示了如何使用Python录制语音信号,并将其保存为.wav文件,最后读取该文件并绘制信号的波形图。

代码解析:

  1. 导入库: 首先导入必要的库,包括scipy.io.wavfile用于处理.wav文件,matplotlib.pyplot用于绘图,numpy用于数值计算,pyaudio用于录音。

  2. 设置参数: 设置录音相关的参数,如采样率、声道数、录制时长等。

  3. 录音: 使用pyaudio库创建音频流,并循环读取音频数据存储到frames列表中。

  4. 保存WAV文件: 使用wave库将录音数据写入.wav文件。

  5. 读取WAV文件并绘制波形图: 使用wavfile.read函数读取.wav文件数据,计算信号时长,创建时间轴,对信号进行归一化处理,最后使用matplotlib.pyplot绘制波形图。

这段代码可以帮助你快速入门语音信号处理,并学习如何使用Python进行简单的录音和波形图绘制。

Python语音信号录制与波形图绘制

原文地址: https://www.cveoy.top/t/topic/nAK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录