python 通过麦克风录音 生成wav文件的方法


Posted in Python onJanuary 09, 2019

如下所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
########################################################################
# 
# Copyright (c) 2017 aibot.me, Inc. All Rights Reserved
# 
########################################################################
 
"""
File: gen_wav.py
Date: 2017/03/24 12:36:27
Brief: 通过麦克风录音 生成 wav文件
"""

import os
import sys
import wave
import numpy as np 
from datetime import datetime
from pyaudio import PyAudio, paInt16



class GenAudio(object):
    def __init__(self):
        self.num_samples = 2000    #pyaudio内置缓冲大小
        self.sampling_rate = 8000  #取样频率
        self.level = 1500          #声音保存的阈值
        self.count_num = 20        #count_num个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音
        self.save_length = 8       #声音记录的最小长度:save_length * num_samples 个取样
        self.time_count = 8        #录音时间,单位s
        self.voice_string = []

    
    #保存文件
    def save_wav(self, filename):
        wf = wave.open(filename, 'wb') 
        wf.setnchannels(1) 
        wf.setsampwidth(2) 
        wf.setframerate(self.sampling_rate) 
        wf.writeframes(np.array(self.voice_string).tostring())
        wf.close()
    
    
    def read_audio(self):
        pa = PyAudio() 
        stream = pa.open(format=paInt16, channels=1, rate=self.sampling_rate, input=True, 
                frames_per_buffer=self.num_samples) 
        
        save_count = 0
        save_buffer = [] 
        time_count = self.time_count

        while True:
            time_count -= 1
            
            # 读入num_samples个取样
            string_audio_data = stream.read(self.num_samples)     
            # 将读入的数据转换为数组
            audio_data = np.fromstring(string_audio_data, dtype = np.short)
            #计算大于 level 的取样的个数
            large_sample_count = np.sum(audio_data > self.level)
            
            print(np.max(audio_data)),  "large_sample_count=>", large_sample_count

            # 如果个数大于COUNT_NUM,则至少保存SAVE_LENGTH个块
            if large_sample_count > self.count_num:
                save_count = self.save_length
            else: 
                save_count -= 1
            if save_count < 0:
                save_count = 0
            
            if save_count > 0:
                save_buffer.append(string_audio_data)
            else:
                if len(save_buffer) > 0:
                    self.voice_string = save_buffer
                    save_buffer = [] 
                    print("Recode a piece of  voice successfully!")
                    return True
            
            if time_count == 0: 
                if len(save_buffer) > 0:
                    self.voice_string = save_buffer
                    save_buffer = []
                    print("Recode a piece of  voice successfully!")
                    return True
                else:
                    return False
        return True




if __name__ == "__main__":
    r = GenAudio()
    r.read_audio()
    r.save_wav("./test.wav")

以上这篇python 通过麦克风录音 生成wav文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
python图像常规操作
Nov 11 Python
Python中property函数用法实例分析
Jun 04 Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 Python
分析经典Python开发工程师面试题
Apr 08 Python
简单了解python反射机制的一些知识
Jul 13 Python
python 操作hive pyhs2方式
Dec 21 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
python简单利用字典破解zip文件口令
Sep 07 Python
python 模拟登陆163邮箱
Dec 15 Python
Python 利用pydub库操作音频文件的方法
Jan 09 #Python
Python简单过滤字母和数字的方法小结
Jan 09 #Python
使用python批量化音乐文件格式转换的实例
Jan 09 #Python
python+ffmpeg批量去视频开头的方法
Jan 09 #Python
Python实现简易过滤删除数字的方法小结
Jan 09 #Python
python 实现视频流下载保存MP4的方法
Jan 09 #Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 #Python
You might like
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP求最大子序列和的算法实现
2011/06/24 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
详解Python pygame安装过程笔记
2017/06/05 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Django中的Model操作表的实现
2018/07/24 Python
Python Series从0开始索引的方法
2018/11/06 Python
python解析含有重复key的json方法
2019/01/22 Python
Python 自由定制表格的实现示例
2020/03/20 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
前台接待的工作职责
2013/11/21 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
大学生社团活动总结
2014/04/26 职场文书
努力学习演讲稿
2014/05/10 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书