有谁知道一个(最好是 C# .Net)库可以让我在录音中找到特定人正在讲话的那些片段?
可以使用工具包 SHoUT:http://shout-toolkit.sourceforge.net/index.html
它是用 C++ 编写的,并针对 Linux 进行了测试,但它也应该在 Windows 或 OSX 下运行。
该工具包是我在自动语音识别 (ASR) 方面的博士研究的副产品。将其用于 ASR 本身可能并不那么简单,但对于语音活动检测 (SAD) 和分类(查找一个特定人的所有语音)来说,它非常容易使用。这是一个例子:
创建 16KHz、16 位、小端、单声道的无头 pcm 音频文件。我使用 ffmpeg 创建原始文件: ffmpeg -i [INPUT_FILE] -vn -acodec pcm_s16le -ar 16000 -ac 1 -f s16le [RAW_FILE] 使用小端编码文件大小(4 字节)为无头数据添加前缀。确保文件具有 .raw 扩展名,因为shout_cluster 会根据扩展名检测文件类型。
执行语音/非语音分割: ./shout_segment -a [RAW_FILE] -ams [SHOUT_SAD_MODEL] -mo [SAD_OUTPUT] 输出文件将为您提供有人说话的片段(标有“SPEECH”。当然,因为这一切都是自动完成的,系统可能会出错..),其中有声音不是语音(“声音”),或沉默(“沉默”)。
执行二值化: ./shout_cluster -a [RAW_FILE] -mo [DIARIZATION_OUTPUT] -mi [SAD_OUTPUT] 使用shout_segment的输出,它将尝试确定录音中活跃的发言者数量,标记每个发言者(“SPK01”、“SPK02”等),然后找到每个发言者的所有语音片段。
我希望这会有所帮助!
虽然上述答案是准确的,但我在安装 SHoUT 时在 Linux 上遇到了安装问题的更新。
undefined reference to pthread_join
我发现的解决方案是从SHoUT安装zip中打开configure-make.sh并修改行
CXXFLAGS="-O3 -funroll-loops -mfpmath=sse -msse -msse2" LDFLAGS="-lpthread" ../configure
到
CXXFLAGS="-O3 -funroll-loops -mfpmath=sse -msse -msse2" LDFLAGS="-pthread" ../configure
注意在 Linux 系统上将 lpthread 更改为 pthread。
操作系统:Linux Mint 18 其中 SHoUT 版本:release-2010-version-0-3