,注釋, ,橫, ,乘, ,橫, 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 ,括回,