使用麦克风录制语音并保存为wav文件,程序如下所示:
# -*- coding: utf-8 -*-
import pyaudio
import time
import wave
import os
import sys
import keyboard
# 定义数据流块
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
def play_sound(sound_file):
"""
播放声音
:param sound_file:
:return:
"""
# 只读方式打开wav文件
wf = wave.open(sound_file, 'rb')
p = pyaudio.PyAudio()
# 打开数据流
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# 读取数据
data = wf.readframes(CHUNK)
# 播放
while data != '':
stream.write(data)
data = wf.readframes(CHUNK)
# 停止数据流
stream.stop_stream()
stream.close()
# 关闭 PyAudio
p.terminate()
def record_sound(save_filename, record_seconds=60):
"""
录制声音
:param save_filename:
:return:
"""
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)):
if keyboard.is_pressed('q'):
print("提前录制结束。")
break
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(save_filename, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
if __name__ == "__main__":
save_name = "./output1.wav"
record_seconds = 30 # 最长录制30秒
record_sound(save_name, record_seconds)