• 大小: 7KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-08
  • 语言: Python
  • 标签: 语音识别  api  

资源简介

百度语音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

评论

共有 条评论