2012-10-18 36 views
4

我有一堆關於電話交談的音頻文件。我想嘗試將音頻文件分成兩部分,每部分只包含一個發言者的發言。也許我需要使用語音diarization。但我該怎麼做?任何人都可以給我一些線索?謝謝。 ps:Linux OS.C/C++如何分離基於不同揚聲器的音頻文件

+1

這可能是非常困難的,甚至超前藝術水平(如果你想要一些完全自動的)。但我可能是錯的。 –

+2

如果他們在同一時間談話,它會非常非常艱難。如果他們輪流發言,則可以根據暫停對音頻進行分段,並通過頻率分析推斷髮言者的身份。 – nneonneo

+0

我知道。我嘗試了幾種工具,但性能非常糟糕。我只是想知道是否有任何工具可以提供較低的diarization錯誤率?這個問題幾乎殺了我。感謝您的時間。 –

回答

2

雖然分離個別揚聲器是一個相當困難的問題,您可以在暫停時自動分割音頻。這將產生一系列可能更容易管理的文件,因爲演講者經常在暫停之間切換。

這種方法需要開源的Julius語音識別解碼器包。這在許多Linux軟件包儲存庫中都可用。我使用Ubuntu multiverse存儲庫。

這裏是網站:http://julius.sourceforge.jp/en_index.php


步驟0:安裝朱利

sudo apt-get install julius 

步驟1:段音頻

adintool -in file -out file -filename myRecording.wav -startid 0 -freq 44100 -lv 2048 -zc 30 -headmargin 600 -tailmargin 600 
  • -startid是將被附加到文件名

  • -freq起始段號在源音頻文件的採樣率

  • -lv是水平語音檢測將被激活的音頻

  • -zc是語音檢測將超過的過零點要積極

  • -headmargin-tailmargin是沉默的量前後各音頻段後

注意-lv和-zc將不得不調整爲特定的音頻錄製的屬性,而-headmargin和-tailmargin必須根據您的特定演講者的風格進行調整。但是,上面給出的價值對我過去的錄音來說效果不錯。

下面是文檔:http://julius.sourceforge.jp/juliusbook/en/adintool.html


在我的經驗用預處理壓縮和正常化的音頻提供了更好的結果和需要的朱利葉斯·參數無級調整。這些初始步驟是推薦的,但不是必需的。

該方法需要開源SoX音頻工具包包。這在許多Linux軟件包儲存庫中也是可用的。我使用Ubuntu的宇宙庫。

這裏是網站:http://sox.sourceforge.net


步驟-2:安裝SOX

sudo apt-get install sox 

步驟-1:預處理音頻

sox myOriginalRecording.wav myRecording.wav gain -b -n -8 compand 0.2,0.6 4:-48,-32,-24 0 -64 0.2 gain -b -n -2 
  • 增益-b -n餘額和標準化音頻到給定電平

  • COMPAND壓縮(在此情況下)的基礎上的參數

注意COMPAND可以將音頻需要一些時間來完全理解參數。但是,上面給出的價值對我過去的錄音來說效果不錯。

下面是文檔:http://sox.sourceforge.net/sox.html


雖然這不會給你每次講話者的身份也將大大簡化耳朵做的任務,這最終可能在一段時間內唯一的選擇。但我希望你找到實用的解決方案,如果它已經可用。

+0

感謝您的方法 –

3

是的,diarization是你想要的。

有幾個工具你可以看看,都是GPL。一個是LIUM spkdiarization(Java),另一個是SHoUT toolkit(C++)。 LIUM有很好的文檔記錄,旁邊有一個腳本,SHOUT有點神祕,所以你應該遵循作者發佈的指示here

雖然我可能有點太晚了。 ;)