python+wave+pyaudio:调用电脑麦克风进行声音录制

pyaudio:用于音频输入。
wave:用于音频文件的读写。

import wave, pyaudio

p = pyaudio.PyAudio()

# 获取设备上的所有麦克风设备
info = p.get_host_api_info_by_index(0)
num_devices = info.get('deviceCount')
for i in range(0, num_devices):
    if p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels') > 0:
        # print(p.get_device_info_by_host_api_device_index(0, i))
        print(f'麦克风设备--{p.get_device_info_by_host_api_device_index(0, i).get("name")}')

# 设置录音参数
FORMAT = pyaudio.paInt16  # 表示使用16位整数格式
CHANNELS = 2  # 声道,1为单声道,1为双声道(立体声)
RATE = 44100  # 采样率,44100为CD音质的标准采样率
CHUNK = 1024  # 缓存区大小,每次读取音频的帧数
AudioTimeLong = 10  # 录音时长

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

print('开始录音')
frames = []
for _ in range(0, int(RATE / CHUNK * AudioTimeLong)):
    data = stream.read(CHUNK)
    frames.append(data)
print('结束录音')

# 关闭媒体和释放资源
stream.stop_stream()  # 停止媒体流
stream.close()  # 关闭媒体流
p.terminate()  # 释放PortAudio资源

# 将音频数据流写入到文件中
with wave.open(r'E:\桌面\dm0.wav', 'wb') as wf:
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))

你可能感兴趣的:(python,音视频,python,开发语言,ffmpeg)