2012-10-18 39 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

虽然我可能有点太晚了。 ;)