注释 杠 * 杠 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 括回
读代码 判断音频是否有声音
最新推荐文章于 2022-07-12 11:48:03 发布