2013-08-02 50 views
3

我正在編寫一個識別語音的程序。它所做的是記錄來自麥克風的音頻並使用Sphinx將其轉換爲文本。我的問題是我只想在用戶說出某些內容時纔開始錄製音頻。Python中的語音檢測或無語音檢測

我通過從麥克風讀取音頻電平並僅在電平高於特定值時進行記錄來進行試驗。但它不是那麼有效。程序每當檢測到任何響亮的聲音時就開始錄製。這是我使用的代碼

import audioop 
import pyaudio as pa 
import wav 

class speech(): 
    def __init__(self): 
     # soundtrack properties 
     self.format = pa.paInt16 
     self.rate = 16000 
     self.channel = 1 
     self.chunk = 1024 
     self.threshold = 150 
     self.file = 'audio.wav' 

     # intialise microphone stream 
     self.audio = pa.PyAudio() 
     self.stream = self.audio.open(format=self.format, 
            channels=self.channel, 
            rate=self.rate, 
            input=True, 
            frames_per_buffer=self.chunk) 


    def record(self) 
     while True: 
      data = self.stream.read(self.chunk) 
      rms = audioop.rms(data,2) #get input volume 
      if rms>self.threshold: #if input volume greater than threshold 
       break 

     # array to store frames 
     frames = [] 
     # record upto silence only 
     while rms>threshold: 
      data = self.stream.read(self.chunk) 
      rms = audioop.rms(data,2) 
      frames.append(data) 

     print 'finished recording.... writing file....' 
     write_frames = wav.open(self.file, 'wb') 
     write_frames.setnchannels(self.channel) 
     write_frames.setsampwidth(self.audio.get_sample_size(self.format)) 
     write_frames.setframerate(self.rate) 
     write_frames.writeframes(''.join(frames)) 
     write_frames.close() 

有沒有一種方法可以區分人類語音和Python中的其他噪聲?希望有人能找到我一個解決方案。

+0

我正在測試你的代碼在ubuntu, 從哪裏wav包下載&測試? –

回答

4

我認爲你的問題是,此刻的你正在嘗試無需識別語音的錄製,所以它不是鑑別 - 識別語音是什麼,確認後給予有意義的結果 - 所以趕22.您可以通過簡化問題尋找一個開場關鍵字。您還可以根據voice frequency range對人耳和電話公司進行過濾,並且您可以查看標記空間比例 - 我相信有一些刊物可以回溯一下,但看起來不同 - 它因語言而異。快速Google可以提供豐富的信息。您也可能會發現this文章有趣。

+0

感謝您的回覆。這只是錄音部分。我將識別部分作爲一個單獨的模塊。如果你闡述了頻率範圍過濾的事情,那將是一件好事。我沒有聽說過。你能否建議我一些文檔或一些東西,以便我可以瞭解這些? – freeMinder

+0

在上面的答案中增加了一些更多細節。 –

+0

謝謝你的回覆史蒂夫。這些鏈接是信息。 – freeMinder

1

我想啥子,你要找的是VAD(語音活動檢測)。 VAD可用於預處理ASR的語音。這裏有一些VAD link實現的開源項目。願它幫助你。