2011-05-16 34 views
2

我想將麥克風的聲音轉換爲二進制,並從數據庫中匹配它(一種語音識別程序,但不知道如何?從麥克風獲得直接的聲音,這樣我可以將它轉換爲二進制代碼有可能還是不請指引我)我想將聲音從麥克風轉換爲二進制,並從數據庫匹配它

+0

你想在ASP.net中做到嗎?你可能需要編寫一個ActiveX。或一些客戶端控制..直接在ASP.net中,你不能在客戶端的計算機上做到這一點。 – 2011-05-16 06:59:02

回答

1

你不會要能夠通過對聲音數據進行二進制比較來識別聲音。特定聲音的二進制文件不會與該聲音的模擬相同,除非由於幾乎所有內容的細微差異而確實是相同的文件。你需要做一些信號處理來對數據進行模糊比較。您可以閱讀關於wikipedia上的信號處理。

您可能會發現使用第三方庫更容易爲您處理聲音。像this可能是一個好的開始。

1

您正在查看兩個非常不同的問題。

第一個技術非常嫺熟:從麥克風獲取聲音成數字波形。如何做到這一點完全取決於您使用的操作系統和API(在Windows上,您可能正在查看DirectX音頻或ASIO)。通常,這是你如何進行:

  1. 設置用於麥克風的記錄緩衝器,用合適的參數(信道數目,聲卡上的物理輸入,採樣率,位深度,緩衝器大小)
  2. 開始錄製。這通常涉及將聲音庫指向回調函數以處理記錄的緩衝區。
  3. 在回調中,讀取緩衝區,將其轉換爲合適的格式,然後將其附加到您選擇的音頻文件。 (您也可以只記錄到RAM,但更長的記錄可能會超過可用存儲空間)。
  4. 存儲在合適的數據庫字段錄製的音頻(某種二進制BLOB的)

這是比較容易的部分,雖然;更難的部分是將大塊音頻數據與其他塊匹配。一個天真的方法是嘗試找到精確的匹配,但這對你沒有多大的幫助,因爲你找到的機會幾乎爲零 - 錄音設備,甚至是最好的設備,會引入一些隨機噪聲,並且錄音設置會有所不同無論你是否願意,都可以略微提高一點,所以即使你有人說了兩遍,完全相同,你仍然可以在錄製的音頻中看到不同之處。

然後,您需要做的是找到波形的某些典型特徵。事情可以找有:

  • 總體幅度形狀
  • 基頻
  • 選擇的諧波(共振峯)

提取這些是不平凡的,涉及到相當嚴重的數學;然後你必須將它們壓縮成某種指紋,並找到一種方法將它們與一些模糊性進行比較(以便近似匹配足夠好,而不需要精確匹配)。找到正確的參數和比較算法並不容易,而且需要進行大量的調整和測試;你最好的選擇是去找一個能爲你做到這一點的圖書館。

相關問題