pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音读取出来

# -*- coding: utf-8 -*-

'''
author:Decadence
email:leizhang9527@163.com
'''

import wave
import time
from datetime import datetime
from pyaudio import PyAudio, paInt16

chunk = 1024
framerate=8000   #采样率
NUM_SAMPLES=2000 #采样点
channels=1  #一个声道
sampwidth=2 #两个字节十六位
TIME=2      #条件变量,可以设置定义录音的时间
filename = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+".wav"
 
def save_wave_file(filename, data):
    wf = wave.open(filename, 'wb')  #二进制写入模式
    wf.setnchannels(channels)  
    wf.setsampwidth(sampwidth)  #两个字节16位
    wf.setframerate(framerate)  #帧速率
    wf.writeframes(b"".join(data))  #把数据加进去,就会存到硬盘上去wf.writeframes(b"".join(data)) 
    wf.close()

    
def my_record():
    pa = PyAudio()
    stream = pa.open(format = paInt16,channels = 1,
                     rate = framerate,input = True,
                     frames_per_buffer = NUM_SAMPLES)
    my_buf = []
    count = 0
    time.sleep(5)
    print('开始录音')

    while count < TIME*50:
        string_audio_data = stream.read(NUM_SAMPLES)
        my_buf.append(string_audio_data)
        count += 1
        # print('...')
    save_wave_file(filename, my_buf)
    stream.close()

def read_file():
    wf = wave.open(filename, 'rb')
    p = PyAudio()
    stream = p.open(format = p.get_format_from_width(wf.getsampwidth()),
                    channels = wf.getnchannels(),rate = wf.getframerate(),output = True,)
    print('开始放音')
    while True:
        data = wf.readframes(chunk)
        if data == b'': break
        stream.write(data)
        # print('...')
    wf.close()
    stream.close()
    p.terminate()

def main():
    my_record()
    print('录音完毕')
    read_file()
    print('放音完毕')

if __name__ == "__main__":
    main()
    

演示结果:

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值