從哪裏?sys?進口?字節序
從哪裏?數組?進口?排列
從哪裏?struct?進口?包裝
進口?pyaudio
進口?波浪
門檻?=?500
CHUNK_SIZE?=?1024
格式?=?pyaudio.paInt16
率?=?44100
def?is_silent(snd_data):
“回報?真的嗎?如果?下面?那個?沈默?閾值"
回歸?max(snd_data)?& lt?閾值
def?規格化(snd_data):
“壹般?那個?音量?出去"
最大?=?16384
時代?=?浮動(最大)/最大(abs(i)?為了什麽?我?在?snd_data)
r?=?數組(“h”)
為了什麽?我?在?snd_data:
r.append(int(i*times))
回歸?r
def?trim(snd_data):
“修剪?那個?空白?斑點?在哪裏?那個?開始?然後呢。結束"
def?_trim(snd_data):
snd_started?=?錯誤的
r?=?數組(“h”)
為了什麽?我?在?snd_data:
如果?不是嗎?snd_started?然後呢。ABS(I)& gt;閾值:
snd_started?=?真實的
r .追加(I)
埃利夫?snd_started:
r .追加(I)
回歸?r
#?修剪?去哪?那個?左邊的
snd_data?=?_trim(snd_data)
#?修剪?去哪?那個?正確
snd_data.reverse()
snd_data?=?_trim(snd_data)
snd_data.reverse()
回歸?snd_data
def?add_silence(snd_data,?秒):
“補充?沈默?去哪?那個?開始?然後呢。結束?的?snd_data '?的?長度?秒鐘?(浮動)"
r?=?數組(' h ',?[0?為了什麽?我?在?xrange(int(秒*速率))])
r.extend(snd_data)
r.extend([0?為了什麽?我?在?xrange(int(秒*速率))])
回歸?r
def?記錄():
"""
記錄?答?詞?還是?文字?從哪裏?那個?麥克風?然後呢。
回歸?那個?數據?作為?安?數組?的?簽了?短褲。
正常化?那個?音頻,?trims?沈默?從哪裏?那個?
開始?然後呢。結束,?然後呢。護墊?用什麽?0.5?秒?的?
空白?聲音?去哪?制造?確定嗎?VLC?et?艾爾。可以嗎?玩?
它?沒有?變得?剁碎?關了。
"""
p?=?pyaudio。PyAudio()
溪流?=?p.open(format=FORMAT,?通道=1,?費率=費率,
輸入=真,?輸出=真,
幀每緩沖區=塊大小)
num_silent?=?0
snd_started?=?錯誤的
r?=?數組(“h”)
什麽時候?1:
#?小?endian,?簽了?短的
snd_data?=?數組(' h ',?stream.read(CHUNK_SIZE))
如果?byteorder?==?大':
snd_data.byteswap()
r.extend(snd_data)
沈默?=?is_silent(snd_data)
如果?沈默?然後呢。snd_started:
num_silent?+=?1
埃利夫?不是嗎?沈默?然後呢。不是嗎?snd_started:
snd_started?=?真實的
如果?snd_started?然後呢。num_silent?& gt?30:
破裂
樣本_寬度?=?p.get_sample_size(格式)
stream.stop_stream()
stream.close()
p .終止()
r?=?正常化(r)
r?=?修剪(r)
r?=?add_silence(r,0.5)
回歸?樣本寬度?r
def?記錄到文件(路徑):
“記錄?從哪裏?那個?麥克風?然後呢。輸出?那個?結果呢?數據?去哪?路徑'"
樣本寬度?數據?=?記錄()
數據?=?打包(' & lt'?+?(' h'*len(data)),?*數據)
wf?=?wave.open(路徑,?WB’)
wf.setnchannels(1)
setsampwwidth(sample _ width)
wf.setframerate(速率)
wf.writeframes(數據)
wf.close()
如果?__name__?==?__main__ ':
print("拜托?說話?答?詞?變成?那個?麥克風”)
記錄到文件(' demo.wav ')
打印(“完成?-?結果?寫的?去哪?demo.wav ")