,注释, ,横, ,乘, ,横, coding ,冒号, utf ,横, 8 ,横, ,乘, ,横,
import os
import wave
from time import sleep
import numpy as np
,s ,u ,c ,c ,e ,s ,s ,等于, 0
,f ,A ,i ,l ,等于, 1
,注释, 需要添加录音互斥功能能 逗号, 某些功能开启的时候录音暂时关闭
,定义方法,Z ,c ,r ,括号, cur ,frame ,括回, ,冒号,
,注释, 过零率
tmp1 ,等于, cur ,frame ,方括号, ,冒号, ,横, 1 ,方括回,
tmp2 ,等于, cur ,frame ,方括号, 1 ,冒号, ,方括回,
sings ,等于, ,括号, tmp1 ,乘, tmp2 ,小于, ,等于, 0 ,括回,
diffs ,等于, ,括号, tmp1 ,横, tmp2 ,括回, ,大于, 0 ,点, 02
zcr ,等于, np ,点, sum ,括号, sings ,乘, diffs ,括回,
return zcr
,定义方法, ,s ,t ,e ,括号, cur ,frame ,括回, ,冒号,
,注释, 短时能量
amp ,等于, np ,点, sum ,括号, np ,点, abs ,括号, cur ,frame ,括回, ,括回,
return amp
,定义对象, ,vad ,括号, object ,括回, ,冒号,
,定义方法, 下划 下划 init 下划 下划 ,括号, self ,括回, ,冒号,
,注释, 初始短时能量高门限
self ,点, amp1 ,等于, 140
,注释, 初始短时能量低门限
self ,点, amp2 ,等于, 120
,注释, 初始短时过零率高门限
self ,点, zcr1 ,等于, 10
,注释, 初始短时过零率低门限
self ,点, zcr2 ,等于, 5
,注释, 允许最大静音长度
self ,点, maxsilence ,等于, 100
,注释, 语音的最短长度
self ,点, minlen ,等于, 40
,注释, 偏移值
self ,点, offsets ,等于, 40
self ,点, offsete ,等于, 40
,注释, 能量最大值
self ,点, max 下划 en ,等于, 20000
,注释, 初始状态为静音
self ,点, status ,等于, 0
self ,点, count ,等于, 0
self ,点, silence ,等于, 0
self ,点, frame 下划 len ,等于, 256
self ,点, frame 下划 inc ,等于, 128
self ,点, cur 下划 status ,等于, 0
self ,点, frames ,等于, ,空数组,
,注释, 数据开始偏移
self ,点, frames 下划 start ,等于, ,空数组,
self ,点, frames 下划 start 下划 num ,等于, 0
,注释, 数据结束偏移
self ,点, frames 下划 end ,等于, ,空数组,
self ,点, frames 下划 end 下划 num ,等于, 0
,注释, 缓存数据
self ,点, cache 下划 frames ,等于, ,空数组,
self ,点, cache ,等于, ""
,注释, 最大缓存长度
self ,点, cache 下划 frames 下划 num ,等于, 0
self ,点, end 下划 flag ,等于, ,false
self ,点, wait 下划 flag ,等于, ,false
self ,点, on ,等于, ,true
self ,点, callback ,等于, ,none
self ,点, callback 下划 res ,等于, ,空数组,
self ,点, callback 下划 kwargs ,等于, ,空对象,
,定义方法,clean ,括号, self ,括回, ,冒号,
self ,点, frames ,等于, ,空数组,
,注释, 数据开始偏移
self ,点, frames 下划 start ,等于, ,空数组,
self ,点, frames 下划 start 下划 num ,等于, 0
,注释, 数据结束偏移
self ,点, frames 下划 end ,等于, ,空数组,
self ,点, frames 下划 end 下划 num ,等于, 0
,注释, 缓存数据
self ,点, cache 下划 frames ,等于, ,空数组,
,注释, 最大缓存长度
self ,点, cache 下划 frames 下划 num ,等于, 0
self ,点, end 下划 flag ,等于, ,false
self ,点, wait 下划 flag ,等于, ,false
,定义方法,go ,括号, self ,括回, ,冒号,
self ,点, wait 下划 flag ,等于, ,false
,定义方法,wait ,括号, self ,括回, ,冒号,
self ,点, wait 下划 flag ,等于, ,true
,定义方法,stop ,括号, self ,括回, ,冒号,
self ,点, on ,等于, ,false
,定义方法,add ,括号, self 逗号, frame 逗号, wait ,等于, ,true ,括回, ,冒号,
if wait ,冒号,
print 'wait'
frame ,等于, self ,点, cache + frame
while len ,括号, frame ,括回, ,大于, self ,点, frame 下划 len ,冒号,
frame 下划 block ,等于, frame ,方括号, ,冒号, self ,点, frame 下划 len ,方括回,
self ,点, cache 下划 frames ,点, append ,括号, frame 下划 block ,括回,
frame ,等于, frame ,方括号, self ,点, frame 下划 len ,冒号, ,方括回,
if wait ,冒号,
self ,点, cache ,等于, frame
else ,冒号,
self ,点, cache ,等于, ""
self ,点, cache 下划 frames ,点, append ,括号, ,横, 1 ,括回,
,定义方法,run ,括号, self 逗号, has ,num ,括回, ,冒号,
print "开始执行音频端点检测"
step ,等于, self ,点, frame 下划 len ,横, self ,点, frame 下划 inc
num ,等于, 0
while 1 ,冒号,
,注释, 开始端点
,注释, 获得音频文件数字信号
if self ,点, wait 下划 flag ,冒号,
sleep ,括号, 1 ,括回,
continue
if len ,括号, self ,点, cache 下划 frames ,括回, ,小于, 2 ,冒号,
sleep ,括号, 0 ,点, 05 ,括回,
continue
if self ,点, cache 下划 frames ,方括号, 1 ,方括回, ,双等于, ,横, 1 ,冒号,
print ' ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, 没有声音 ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, ,横, '
break
,注释, 从缓存中读取音频数据
record 下划 stream ,等于, "" ,点, join ,括号, self ,点, cache 下划 frames ,方括号, ,冒号, 2 ,方括回, ,括回,
wave 下划 data ,等于, np ,点, fromstring ,括号, record 下划 stream 逗号, dtype ,等于, np ,点, int16 ,括回,
wave 下划 data ,等于, wave 下划 data ,乘, 1 ,点, 0 / self ,点, max 下划 en
data ,等于, wave 下划 data ,方括号, np ,点, arange ,括号, 0 逗号, self ,点, frame 下划 len ,括回, ,方括回,
speech 下划 data ,等于, self ,点, cache 下划 frames ,点, pop ,括号, 0 ,括回,
,注释, 获得音频过零率
zcr ,等于, Z ,c ,r ,括号, data ,括回,
,注释, 获得音频的短时能量 逗号, 平方放大
amp ,等于, ,s ,t ,e ,括号, data ,括回, ,乘乘, 2
,注释, 返回当前音频数据状态
res ,等于, self ,点, speech 下划 status ,括号, amp 逗号, zcr ,括回,
if res ,双等于, 2 ,冒号,
has ,num + ,等于, 1
if has ,num ,大于, 10 ,冒号,
print '+++++++++++++++++++++++++有声音++++++++++++++++++++++++'
break
num ,等于, num + 1
,注释, 一段一段进行检测
self ,点, frames 下划 start ,点, append ,括号, speech 下划 data ,括回,
self ,点, frames 下划 start 下划 num + ,等于, 1
if self ,点, frames 下划 start 下划 num ,双等于, self ,点, offsets ,冒号,
,注释, 开始音频开始的缓存部分
self ,点, frames 下划 start ,点, pop ,括号, 0 ,括回,
self ,点, frames 下划 start 下划 num ,横, ,等于, 1
if self ,点, end 下划 flag ,冒号,
,注释, 当音频结束后进行后部缓存
self ,点, frames 下划 end 下划 num + ,等于, 1
,注释, 下一段语音开始,或达到缓存阀值
if res ,双等于, 2 or self ,点, frames 下划 end 下划 num ,双等于, self ,点, offsete ,冒号,
speech 下划 stream ,等于, b"" ,点, join ,括号, self ,点, frames + self ,点, frames 下划 end ,括回,
self ,点, callback 下划 res ,点, append ,括号, self ,点, callback ,括号, speech 下划 stream 逗号, ,乘乘,self ,点, callback 下划 kwargs ,括回, ,括回,
,注释, 数据环境初始化
,注释, self ,点, clean ,括号, ,括回,
self ,点, end 下划 flag ,等于, ,false
self ,点, frames ,等于, ,空数组,
self ,点, frames 下划 end 下划 num ,等于, 0
self ,点, frames 下划 end ,等于, ,空数组,
self ,点, frames 下划 end ,点, append ,括号, speech 下划 data ,括回,
if res ,双等于, 2 ,冒号,
if self ,点, cur 下划 status in ,方括号, 0 逗号, 1 ,方括回, ,冒号,
,注释, 添加开始偏移数据到数据缓存
self ,点, frames ,点, append ,括号, b"" ,点, join ,括号, self ,点, frames 下划 start ,括回, ,括回,
,注释, 添加当前的语音数据
self ,点, frames ,点, append ,括号, speech 下划 data ,括回,
if res ,双等于, 3 ,冒号,
print '检测音频结束'
self ,点, frames ,点, append ,括号, speech 下划 data ,括回,
,注释, 开启音频结束标志
self ,点, end 下划 flag ,等于, ,true
self ,点, cur 下划 status ,等于, res
,注释, return self ,点, callback 下划 res
,定义方法,speech 下划 status ,括号, self 逗号, amp 逗号, zcr ,括回, ,冒号,
status ,等于, 0
,注释, 0 ,等于, 静音, 1 ,等于, 可能开始 逗号, 2 ,等于, 确定进入语音段
if self ,点, cur 下划 status in ,方括号, 0 逗号, 1 ,方括回, ,冒号,
,注释, 确定进入语音段
if amp ,大于, self ,点, amp1 ,冒号,
status ,等于, 2
self ,点, silence ,等于, 0
self ,点, count + ,等于, 1
,注释, 可能处于语音段
elif amp ,大于, self ,点, amp2 or zcr ,大于, self ,点, zcr2 ,冒号,
status ,等于, 1
self ,点, count + ,等于, 1
,注释, 静音状态
else ,冒号,
status ,等于, 0
self ,点, count ,等于, 0
self ,点, count ,等于, 0
,注释, 2 ,等于, 语音段
elif self ,点, cur 下划 status ,双等于, 2 ,冒号,
,注释, 保持在语音段
if amp ,大于, self ,点, amp2 or zcr ,大于, self ,点, zcr2 ,冒号,
self ,点, count + ,等于, 1
status ,等于, 2
,注释, 语音将结束
else ,冒号,
,注释, 静音还不够长,尚未结束
self ,点, silence + ,等于, 1
if self ,点, silence ,小于, self ,点, maxsilence ,冒号,
self ,点, count + ,等于, 1
status ,等于, 2
,注释, 语音长度太短认为是噪声
elif self ,点, count ,小于, self ,点, minlen ,冒号,
status ,等于, 0
self ,点, silence ,等于, 0
self ,点, count ,等于, 0
,注释, 语音结束
else ,冒号,
status ,等于, 3
self ,点, silence ,等于, 0
self ,点, count ,等于, 0
return status
,定义方法,read 下划 file 下划 data ,括号, filename ,括回, ,冒号,
,注释,
输入 ,冒号, 需要读取的文件名
返回 ,冒号, (声道,量化位数,采样率,数据 ,括回,
,注释,
read 下划 file ,等于, wave ,点, open ,括号, filename 逗号, "r" ,括回,
params ,等于, read 下划 file ,点, getparams ,括号, ,括回,
nchannels 逗号, sampwidth 逗号, framerate 逗号, nframes ,等于, params ,方括号, ,冒号, 4 ,方括回,
data ,等于, read 下划 file ,点, readframes ,括号, nframes ,括回,
return nchannels 逗号, sampwidth 逗号, framerate 逗号, data
,定义对象, ,file ,parser ,括号, ,vad ,括回, ,冒号,
,定义方法, 下划 下划 init 下划 下划 ,括号, self ,括回, ,冒号,
self ,点, block 下划 size ,等于, 256
,vad ,点, 下划 下划 init 下划 下划 ,括号, self ,括回,
,定义方法,read 下划 file ,括号, self 逗号, filename ,括回, ,冒号,
if not os ,点, path ,点, isfile ,括号, filename ,括回, ,冒号,
print "文件%s不存在" % filename
return ,f ,A ,i ,l
datas ,等于, read 下划 file 下划 data ,括号, filename ,括回, ,方括号, ,横, 1 ,方括回,
self ,点, add ,括号, datas 逗号, ,false ,括回,
if 下划 下划 name 下划 下划 ,双等于, " 下划 下划 main 下划 下划 " ,冒号,
stream 下划 test ,等于, ,file ,parser ,括号, ,括回,
filename ,等于, 'sf 下划 id001 下划 2017 ,横, 01 ,横, 11 下划 10 下划 53 下划 56 ,点, wav'
result ,等于, stream 下划 test ,点, read 下划 file ,括号, filename ,括回,
if result ! ,等于, ,f ,A ,i ,l ,冒号,
stream 下划 test ,点, run ,括号, 0 ,括回,