我有一堆关于电话交谈的音频文件。我想尝试将一个音频文件分成两个,每个文件只包含一个演讲者的讲话。也许我需要使用语音分类。但我怎样才能做到这一点呢?有人可以给我一些线索吗?谢谢。 ps: Linux OS.C/C++
虽然分离各个扬声器是一个相当困难的问题,但您可以在有停顿的地方自动分割音频。这将产生一系列可能更容易管理的文件,因为扬声器经常在暂停之间交替。
此方法需要开源 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
gain -b -n 将音频平衡并标准化到给定级别
compand 根据参数压缩(在本例中)音频
请注意,compand 可能需要一些时间才能完全理解参数。但上面给出的值对于我过去的录音效果很好。
这里是文档:http://sox.sourceforge.net/sox.html
虽然这不会让您识别每个说话者,但它将大大简化通过耳朵进行识别的任务,这可能最终成为一段时间内唯一的选择。但我确实希望您能找到实用的解决方案(如果已经可用)。
是的,二值化就是你想要的。
您可以查看几个工具,它们都是 GPL。一个是LIUM spkdiarization(Java),另一个是SHoUT工具包(C++)。 LIUM 有很好的文档记录,旁边有一个脚本,SHoUT 有点神秘,所以你应该按照作者在这里发布的说明进行操作。
虽然我可能有点太晚了。 ;)