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下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
谈谈python中GUI的选择
Mar 01 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
python with语句的原理与用法详解
Mar 30 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
解决Django Haystack全文检索为空的问题
May 19 Python
对Keras自带Loss Function的深入研究
May 25 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
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
php伪静态之APACHE篇
2014/06/02 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
Python3解释器知识点总结
2019/02/19 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
励志演讲稿3分钟
2014/08/21 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
毕业实习计划书
2015/01/16 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书