C语言 如何基于不同的扬声器分离音频文件

ryhaxcpt  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(171)

我有一堆关于电话交谈的音频文件。我想试着把一个音频文件分成两份,每份只包含一个说话人的讲话。也许我需要使用语音日记。但是我该怎么做呢?有人能给予我一些线索吗?谢谢。ps:Linux操作系统.C/C++

x4shl7ld

x4shl7ld1#

虽然分离单个扬声器是一个相当困难的问题,但你可以自动分割有停顿的音频。这将产生一系列文件,这可能更容易管理,因为扬声器经常在停顿之间交替。
这种方法需要开源的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
虽然这不会让你识别出每一个说话者,但它会大大简化用耳朵听的任务,这可能在一段时间内是唯一的选择。但我希望你能找到切实可行的解决方案,如果它已经可用。

5jvtdoz2

5jvtdoz22#

是的,日记化是你想要的。
有几个工具可以参考,都是GPL的。一个是LIUM spkdiarization(Java),另一个是SHoUT toolkit(C++)。LIUM有很好的文档,旁边有一个脚本,SHoUT有点神秘,所以你应该按照作者发布的here的说明操作。
虽然我可能来得有点晚。)

相关问题