如何根据不同的扬声器分离音频文件

时间:2012-10-18 18:40:30

标签: c++ c linux audio speech

我有一堆关于电话交谈的音频文件。我想尝试将音频文件分成两个,每个只包含一个发言者的语音。也许我需要使用语音分类。但是我该怎么做呢?谁能给我一些线索?谢谢。 ps:Linux OS.C / C ++

2 个答案:

答案 0 :(得分:3)

是的,diarization就是你想要的。

你可以看一些工具,都是GPL。一个是LIUM spkdiarization(Java),另一个是SHoUT toolkit(C ++)。 LIUM有很好的文档,旁边有一个脚本,SHoUT有点神秘,所以你应该按照作者发布的here的说明进行操作。

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

答案 1 :(得分:2)

虽然分离单个扬声器是一个非常困难的问题,但您可以在有暂停的地方自动分割音频。这将产生一系列可能更容易管理的文件,因为扬声器经常在暂停之间交替。

这种方法需要开源Julius语音识别解码器包。这在许多Linux软件包存储库中都可用。我使用Ubuntu multiverse存储库。

以下是网站:http://julius.sourceforge.jp/en_index.php


第0步:安装Julius

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


根据我的经验,使用压缩和规范化对音频进行预处理可以获得更好的结果,并且需要较少调整Julius参数。建议采用这些初始步骤,但不是必需的。

这种方法需要开源SoX音频工具包。这在许多Linux软件包存储库中也可用。我使用的是Ubuntu Universe存储库。

以下是网站: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


虽然这不会给你识别每个扬声器,但它将大大简化通过耳朵进行操作的任务,这可能最终成为一段时间内唯一的选择。但我希望你找到实用的解决方案,如果它已经可用。