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中的多行注释文档编写风格汇总
Jun 16 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
Python实现的knn算法示例
Jun 14 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
python查看数据类型的方法
Oct 12 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
聊聊python中的异常嵌套
Sep 01 Python
python实现xml转json文件的示例代码
Dec 30 Python
python网络爬虫实现发送短信验证码的方法
Feb 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
vue mounted组件的使用
2018/06/18 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
TensorFlow实现模型评估
2018/09/07 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
Django实现基于类的分页功能
2019/10/31 Python
win10安装python3.6的常见问题
2020/07/01 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
个人廉政承诺书
2015/04/28 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS