想训练一套自己的语音识别系统(命令词识别系统),首先得准备一套自己的语料库,发动身边的帅哥美女们帮忙进行录音。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实现录音相关推荐

  1. pyaudio usb playback_苹果安卓手机充电器USB接口PSD源文件psd素材

    分类:详情页 类目:数码家电 格式:psd 体积: 尺寸:790*12168 编号:13182638 软件: Photoshop CS6(.psd) 颜色模式 : RGB 图像类型:位图 版权:独家版 ...

  2. pyaudio usb playback_电脑USB接口怎么禁用?系统禁用USB端口的两种方法

    如何禁用电脑的USB接口?一般电脑的USB接口都是默认开放使用的,但是如果电脑中有很多重要文件的话,为了防止泄露,一般会通过禁用USB的方式防止他人拷走,那么如何禁用电脑的USB接口功能?请看下文两种 ...

  3. pyaudio usb playback_「APPSO」苹果还会为 iPhone 换上 USB-C 吗?

    iPhone 首销日和往年一样,依然有大量的消费者在各地不同的 Apple Store 排起长龙,店里人头攒动,店员们都在忙着为这些首批顾客设置他们全新的 iPhone 12. 全新的机器也有老味道, ...

  4. pyaudio usb playback_【雅马哈(YAMAHA) UR22C声卡价格,参数】steinberg UR22C 专业录音外置声卡编曲混音USB音频接口 2019升级版–音平商城...

    UR-C系列音频接口 全新UR-C系列音频接口全部使用USB Type-C接口 可为音乐人提供改进的速度和灵活性,可连接PC/Mac,更可直连iOS设备 主要特性 • 32bit/192kHz USB ...

  5. pyaudio usb playback_苹果还会为 iPhone 换上 USB-C 吗?_详细解读_最新资讯_热点事件...

    编者按:本文来自微信公众号"APPSO"(ID:appsolution),作者 李晨,36氪经授权发布. iPhone 首销日和往年一样,依然有大量的消费者在各地不同的 Apple ...

  6. pyaudio usb playback_苹果还会为 iPhone 换上 USB-C 吗?

    原标题:苹果还会为 iPhone 换上 USB-C 吗? iPhone 首销日和往年一样,依然有大量的消费者在各地不同的 Apple Store 排起长龙,店里人头攒动,店员们都在忙着为这些首批顾客设 ...

  7. pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

    pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...

  8. python 循环播放音乐_pyaudio:基于pyaudio利用Python编程实现播放音频mp3、wav等格式文件...

    基于pyaudio利用Python编程实现播放音频mp3.wav等格式文件 T1.while循环输出数据流的方法def play(): chunk=1024 #2014kb wf=wave.open( ...

  9. pyaudio:基于pyaudio利用Python编程实现播放音频mp3、wav等格式文件

    基于pyaudio利用Python编程实现播放音频mp3.wav等格式文件 目录 输出结果 实现代码 输出结果 实现代码 T1.while循环输出数据流的方法 def play():chunk=102 ...

最新文章

  1. 【Android】Intent介绍及Intent在Activity中的使用方法
  2. Java 线程池框架核心代码分析
  3. [USACO12MAR]花盆Flowerpot 二分答案+单调队列
  4. Python笔记-假设检验之双样本T检验(两样本是否相似)
  5. python docx表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
  6. oracle11g分区表维护,Oracle11g维护分区(一)AddingPartitions
  7. dhcp 如何每次请求固定地址_无线覆盖:dhcp原理及其实现流程
  8. gaussian软件linux下载,Gaussian软件下载地址及安装说明
  9. 一套新能源汽车动力电池热管理热仿真攻略
  10. 迅雷“应版权方要求,文件无法下载”完美解决方法!(¥28)
  11. USYD悉尼大学INFO1110 详细作业解析Week3 all quizzes
  12. Python实现FP树
  13. python学法用法 自动刷分_使用python对微信小游戏跳一跳刷分
  14. python统计有几个单词_统计文件中单词的个数---Shell及python版
  15. Excel 2013 VlookUp函数使用
  16. VIM 快速参考指南
  17. Python3.9版本发布,不同领域的程序员如何学Python?
  18. 迅播Gvod最新版本去广告补丁,不留任何广告
  19. 雅虎+Adobe=微软?
  20. 干货 | 大数据处理技术的总结与分析

热门文章

  1. Spring - InstantiationAwareBeanPostProcessor 扩展接口
  2. SD/TF卡驱动(二)--------SD卡程序初始化流程以及读写
  3. 4章 RxJava基本响应类型
  4. 刘畊宏爆红,Keep巨亏,在线健身的冰与火
  5. java ref传引用_java引用传递
  6. 堡垒机前戏:paramiko模块
  7. 毕业设计 推荐系统设计与实现 协同过滤推荐算法
  8. 使用Jsch执行Shell脚本
  9. Tomcat的安装使用,修改默认8080端口号,查询端口号命令
  10. LogicFlow与原生BPMN的对比