资源简介
百度语音api实现语音识别小程序,通过判断当前音量大小自动识别判断是否该结束录音,原理还是挺简单的,就是遇到一些小坑,自己学习了也分享给大家
代码片段和文件信息
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from time import sleep
from aip import AipSpeech
from numpy import frombuffershort
import wave
#from wave import open #这样写就重名了
from pyaudio import PyAudiopaInt16
#import pyaudio
from threading import Thread
import pygame
import os
import tkinter
#由于百度语音识别最大时长为60s,所以我们创建这个计时的方法
timeout = False
def timeclock():
global timeout
timeout = True
#循环里面的全局变量要加global
for x in range(60):
print(‘ticking...‘ timeout)
sleep(1)
#如果标志位为False,则停止计时
if timeout == False:
return 0
#超过60秒赋值为false,停止录音
timeout = False
#录音
def my_record(path = ‘01.wav‘):
#规定声音属性
framerate=16000 #采样频率
NUM_SAMPLES=2000 #内部缓存块的大小,每次读取的采样数据块的个数
channels=1 #声道
sampwidth=2 #采样大小/采样宽度/位深2B 16bit
pa=PyAudio()
#创建输入流
stream=pa.open(format = paInt16channels=1
rate=framerateinput=True
frames_per_buffer=NUM_SAMPLES)
#help(stream)
Buf_Data=[]
‘‘‘
#定时录制语音模式, 录音时间公式:1/频率*采样点数*20 = 1/16000*2000*20 = 2.5s
for count in range(20):
string_audio_data = stream.read(NUM_SAMPLES)
#print(string_audio_data ‘\n‘)
#将录制的数据存放到数组中
Buf_Data.append(string_audio_data)
print(‘....‘)
‘‘‘
#按需录音模式,连续2.5秒不出声,就停止录音
#测试:
#datalistfile = ‘‘
coutif = 0
print(‘正在聆听.....‘)
#计时功能启动
tc = Thread(target = timeclock name = ‘loopwall‘)
tc.deamon = True
tc.start()
#刚开始录音的时候可能有比较长的时间做准备,所以我们先录制1.25秒钟
for xtime in range(10):
string_audio_data = stream.read(NUM_SAMPLES)
Buf_Data.append(string_audio_data)
print(‘..‘)
#一般人这时候已经开始说话了
#当没超时录音
global timeout
while timeout:
#循环一圈用时约0.125s
string_audio_data = stream.read(NUM_SAMPLES)
Buf_Data.append(string_audio_data)
print(‘..‘)
#将数据转换为数组
data_list = frombuffer(string_audio_data dtype=short)
#判断是否有声音
if max(data_list)<5000: #5000:分贝阈值,小于5000视为环境噪音或静音
coutif += 1
else:
coutif = 0
#如果连续15个采样点都小于5000,退出循环,即连续1/16000*2000*15=1.875秒没声,就不录音了
if coutif > 15:
timeout = False
break
#录音结束
#timeout = True
‘‘‘
#用于测试
datalistfile += str(max(data_list))
datalistfile += ‘\t‘
with open(‘datalist.txt‘ ‘a‘) as fd:
datalistfile += ‘\n‘
fd.write(datalistfile)
‘‘‘
#将存储的数据保存成wav文件
#filepath = r‘E:\\python practice\\{}.wav‘.format(time.strftime(“%Y%m%d%H%M%S“))
wf=wave.open(path‘wb‘) #注意,文件名中不能带:等特殊符号
#wf=wave.open(‘.\\myrecord\\{}.wav‘.format(time.strftime(“%Y%m%d%H:%M:%S“))‘wb‘)
#设置声道、采样频率、采样大小
wf.setnchannels(channels)
#help(wave)
wf.setsampwidth(sampwidth)
wf.setframerate(framerate)
wf.writeframes(b““.join(Buf_Data))
wf.close()
stream.close()
#chunk=2014
#播放wav文件
def play_wav(path = ‘01.wav‘):
wf=wave.open(path‘rb‘)
p=PyAudio()
#创建输出流
stream=p.open(format=p.get_format_from_width(wf.getsampwidth())channels=
wf.getnchannels()rate=wf.getfr
相关资源
- 企业微信api接口实现
- Python,通过Googlemap API获取地点信息
- 【官方文档】TensorFlow Python API docume
- 高德API + Python 解决租房问题_实验楼
- python3.6 API
- 《Rapid GUI Programming with Python and Qt》
- 3ds Max Python API
- Python标准库查询手册最新Python 3.3
- Web Scraping with Python_Collecting Data from
- Packt-Web.Scraping.with.Python.Richard Lawson
- Python语言开发RESTful API指南
- CherryPy Essentials - Rapid Python Web Applica
- 百分百汉化Python2与Python3的中文版AP
- Blender Python API
- Python3.8.0 官方中文帮助文档 API参考手
- Python实现的GMM用于语音识别
- Python深度学习实战 基于tensorflow和k
- wxPython4.0 api && doc
- poketsphinx的普通话识别模块-cmusphinx-
- python爬取摩拜单车API数据并做可视化
- API — ffn 0.3.0 中文.pdf
- 全套视频课:Python RESTful API 开发
- Python连接数据库学习之DB-API详解
- win32 API 中文版,适用于所有的python版
- Qt调用python解析百度云API实现人脸图像
- SL4A之Python_API_中英文参考
- 租房API调用
- Python包:baidumapAPI
- python版本selenium webdriver api
- Python-通过百度语音API实现文本转语音
评论
共有 条评论