pyaudio usb playback_利用python工具包pyaudio实现录音
想训练一套自己的语音识别系统(命令词识别系统),首先得准备一套自己的语料库,发动身边的帅哥美女们帮忙进行录音。Python无所不能,很多工具包能给让我们的工作变的简单、优雅。
今天就给大家分享一下基于PyAudio的录音工具,可以方便的利用我们的笔记本电脑进行录音。首先需要准备好环境,安装PyAudio:pip install pyaudio(pyhook不再累述),创建Python文件record.py:
#-*- coding:utf-8 -*-
#-*- author yangdengqiang -*-
import os
import sys
import threading
from time import ctime,sleep
import pyHook
import pythoncom
from pyaudio import PyAudio, paInt16
import numpy as np
from datetime import datetime
import wave
flag = False
NUM_SAMPLES = 1024*4 #pyaudio内置缓冲大小
SAMPLING_RATE = 16000 #取样频率,kaldi识别仅支持16KHz,16-bit位深
LEVEL = 500 #声音保存的阈值
COUNT_NUM = 20 #NUM_SAMPLES个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音
SAVE_LENGTH = 8 #声音记录的最小长度:SAVE_LENGTH * NUM_SAMPLES 个取样
TIME_COUNT = 20 #录音时间,单位s
Voice_String = []
SPEAKER_NO = '001' #录音者id,1,2,...,10
WAV_ID = 0 #录音文件ID
CONTENT = [] #录音内容list
SPEAKER_NAME = 'default'
def speech_recogniton(func):
for i in range(2):
print ("I was at the %s! %s" %(func,ctime()))
sleep(5)
def startHookManager():
# 创建一个:钩子“管理对象
hm = pyHook.HookManager()
# 监听所有的键盘事件
hm.KeyDown = onKeyboardEvent
#设置键盘”钩子“
hm.HookKeyboard()
# 进入循环侦听,需要手动进行关闭,否则程序将一直处于监听的状态。可以直接设置而空而使用默认值
pythoncom.PumpMessages()
def savewav(filename):
wf = wave.open(filename, 'wb')
wf.setnchannels(1)
wf.setsampwidth(2)#2
wf.setframerate(SAMPLING_RATE)
wf.writeframes(np.array(Voice_String).tostring())
# wf.writeframes(self.Voice_String.decode())
wf.close()
def recoder():
global flag, Voice_String;
pa = PyAudio()
stream = pa.open(format=paInt16, channels=1, rate=SAMPLING_RATE, input=True,
frames_per_buffer=NUM_SAMPLES)
save_count = 0
save_buffer = []
time_count = TIME_COUNT
while flag:
print('...')
time_count -= 1
# print time_count
# 读入NUM_SAMPLES个取样
string_audio_data = stream.read(NUM_SAMPLES)
# 将读入的数据转换为数组
audio_data = np.fromstring(string_audio_data, dtype=np.short)
# 计算大于LEVEL的取样的个数
large_sample_count = np.sum( audio_data > LEVEL )
# print(np.max(audio_data))
# 如果个数大于COUNT_NUM,则至少保存SAVE_LENGTH个块
if large_sample_count > COUNT_NUM:
save_count = SAVE_LENGTH
else:
save_count -= 1
if save_count < 0:
save_count = 0
Voice_String = save_buffer
if save_count > 0 :
# 将要保存的数据存放到save_buffer中
#print save_count > 0 and time_count >0
save_buffer.append( string_audio_data )
Voice_String = save_buffer
else:
#print save_buffer
# 将save_buffer中的数据写入WAV文件,WAV文件的文件名是保存的时刻
#print "debug"
if len(save_buffer) > 0 :
Voice_String = save_buffer
save_buffer = []
print("Recode a piece of voice successfully!")
return True
if time_count==0:
if len(save_buffer)>0:
Voice_String = save_buffer
save_buffer = []
print("Recode a piece of voice successfully!")
return True
else:
return False
stream.stop_stream()
stream.close()
pa.terminate()
def onKeyboardEvent(event):
global flag, WAV_ID, CONTENT, SPEAKER_NO
if event.Key == "Space": # 点击空格
if flag == False:
print("=======开始录音=======");
threading.Thread(target=recoder).start();
flag = True;
else:
WAV_ID = WAV_ID + 1
curSeq = '00' + str(WAV_ID)
wavename = str(SPEAKER_NO) + '_' + curSeq[-3:] + '.wav'
savewav(wavename);
print("========结束录音======");
print(wavename + '保存成功')
print("======================")
flag = False
if WAV_ID > len(CONTENT)-1:
print("录音完毕,程序将退出!")
exit()
print("下一条:" + CONTENT[WAV_ID])
return True
else:
if event.Key == "Q":
print("退出录音")
exit();
else:
return True
def printOneLine():
global CONTENT
fh = open("xiaozhi2.txt", "r", encoding="utf-8")
CONTENT = fh.readlines()
print("命令总长度为:%s"%len(CONTENT))
print("第%s条:%s"%(WAV_ID,CONTENT[WAV_ID]))
os.chdir(SPEAKER_NAME)
if __name__ == "__main__":
if len(sys.argv) != 3:
print("usage: python record.py username startIndex....")
exit()
SPEAKER_NAME = sys.argv[1] #用户名,用于保存目录
WAV_ID = int(sys.argv[2])#开始录音index
if os.path.exists(SPEAKER_NAME):
print("your dir is already exists...")
else:
try:
os.mkdir(SPEAKER_NAME)
except OSError as exc:
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else: raise
print("it will started from: %s"%WAV_ID)
printOneLine() #读取录音内容
startHookManager(); #开始录音
保存文件,直接执行python record.py即可进行录音操作,按一次空格键录一条语音,可以方便快速的完成实验所需的语料库录音工作。
欢迎语音识别爱好者一起学习交流。
pyaudio usb playback_利用python工具包pyaudio实现录音相关推荐
- pyaudio usb playback_苹果安卓手机充电器USB接口PSD源文件psd素材
分类:详情页 类目:数码家电 格式:psd 体积: 尺寸:790*12168 编号:13182638 软件: Photoshop CS6(.psd) 颜色模式 : RGB 图像类型:位图 版权:独家版 ...
- pyaudio usb playback_电脑USB接口怎么禁用?系统禁用USB端口的两种方法
如何禁用电脑的USB接口?一般电脑的USB接口都是默认开放使用的,但是如果电脑中有很多重要文件的话,为了防止泄露,一般会通过禁用USB的方式防止他人拷走,那么如何禁用电脑的USB接口功能?请看下文两种 ...
- pyaudio usb playback_「APPSO」苹果还会为 iPhone 换上 USB-C 吗?
iPhone 首销日和往年一样,依然有大量的消费者在各地不同的 Apple Store 排起长龙,店里人头攒动,店员们都在忙着为这些首批顾客设置他们全新的 iPhone 12. 全新的机器也有老味道, ...
- pyaudio usb playback_【雅马哈(YAMAHA) UR22C声卡价格,参数】steinberg UR22C 专业录音外置声卡编曲混音USB音频接口 2019升级版–音平商城...
UR-C系列音频接口 全新UR-C系列音频接口全部使用USB Type-C接口 可为音乐人提供改进的速度和灵活性,可连接PC/Mac,更可直连iOS设备 主要特性 • 32bit/192kHz USB ...
- pyaudio usb playback_苹果还会为 iPhone 换上 USB-C 吗?_详细解读_最新资讯_热点事件...
编者按:本文来自微信公众号"APPSO"(ID:appsolution),作者 李晨,36氪经授权发布. iPhone 首销日和往年一样,依然有大量的消费者在各地不同的 Apple ...
- pyaudio usb playback_苹果还会为 iPhone 换上 USB-C 吗?
原标题:苹果还会为 iPhone 换上 USB-C 吗? iPhone 首销日和往年一样,依然有大量的消费者在各地不同的 Apple Store 排起长龙,店里人头攒动,店员们都在忙着为这些首批顾客设 ...
- pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...
- python 循环播放音乐_pyaudio:基于pyaudio利用Python编程实现播放音频mp3、wav等格式文件...
基于pyaudio利用Python编程实现播放音频mp3.wav等格式文件 T1.while循环输出数据流的方法def play(): chunk=1024 #2014kb wf=wave.open( ...
- pyaudio:基于pyaudio利用Python编程实现播放音频mp3、wav等格式文件
基于pyaudio利用Python编程实现播放音频mp3.wav等格式文件 目录 输出结果 实现代码 输出结果 实现代码 T1.while循环输出数据流的方法 def play():chunk=102 ...
最新文章
- 【Android】Intent介绍及Intent在Activity中的使用方法
- Java 线程池框架核心代码分析
- [USACO12MAR]花盆Flowerpot 二分答案+单调队列
- Python笔记-假设检验之双样本T检验(两样本是否相似)
- python docx表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
- oracle11g分区表维护,Oracle11g维护分区(一)AddingPartitions
- dhcp 如何每次请求固定地址_无线覆盖:dhcp原理及其实现流程
- gaussian软件linux下载,Gaussian软件下载地址及安装说明
- 一套新能源汽车动力电池热管理热仿真攻略
- 迅雷“应版权方要求,文件无法下载”完美解决方法!(¥28)
- USYD悉尼大学INFO1110 详细作业解析Week3 all quizzes
- Python实现FP树
- python学法用法 自动刷分_使用python对微信小游戏跳一跳刷分
- python统计有几个单词_统计文件中单词的个数---Shell及python版
- Excel 2013 VlookUp函数使用
- VIM 快速参考指南
- Python3.9版本发布,不同领域的程序员如何学Python?
- 迅播Gvod最新版本去广告补丁,不留任何广告
- 雅虎+Adobe=微软?
- 干货 | 大数据处理技术的总结与分析