代码之家  ›  专栏  ›  技术社区  ›  Daniel MoÅ¡mondor

声音样本识别库/代码

  •  13
  • Daniel MoÅ¡mondor  · 技术社区  · 16 年前

    我不想要语音到文本软件。我需要的是:

    • 我要录制多个(比如50多个)音频流(电台的录制)
    • 从这些录音中,我会标记一些有趣的音频片段-它们的长度从2到60秒不等-这样的音频片段将有几千个
    • 库应该能够从录制的声音流中找到相同音频剪辑的其他实例。
    • 应将置信系数报告给已使用的,并提供额外的输入,以便下次识别效果更好。

    你知道这种软件库吗?LGPL对我来说是最有价值的,但我也可以申请商业许可证。

    音频剪辑将包含音乐、文本、效果或其任何组合。所以,文本识别是不可能的。

    架构:C++C,用于CULL,CUDA,如果可能的话。

    6 回复  |  直到 16 年前
        1
  •  9
  •   mdma    16 年前

    我还没有找到任何库,但有两篇有趣的论文,可以为您提供术语和背景来完善您的搜索:

    编辑:搜索“音频指纹”来到了一个实现页面,既有开源的,也有商业的。

    这里是一个 introduction to Audio fingerprinting

        2
  •  7
  •   Tim Kryger    16 年前

    你所描述的是 matched filter 你只需要一个 cross-correlation 功能应该是任何合理的DSP库的一部分。 根据您对处理器体系结构和语言的选择,您甚至可以找到一个可以更有效地执行此操作的矢量化库。

    如果您不太关心性能,可以使用python…

    $ python
    Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
    [GCC 4.4.1] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import scipy
    >>> interesting_clip = [ 5, 7, 2, 1]
    >>> full_stream = [ 1, 5, 7, 2, 1, 4, 3, 2, 4, 7, 1, 2, 2, 5, 1]
    >>> correlation = scipy.correlate (full_stream, interesting_clip)
    >>> print correlation
    [56 79 55 28 41 49 44 53 73 48 28 35]
    >>> for offset, value in enumerate(correlation) :
    ...     if (value > 60) :
    ...         print "match at position", offset, "with value of", value
    ... 
    match at position 1 with value of 79
    match at position 8 with value of 73
    

    我的门槛是任意的。你应该在实验上决定什么适合你。

    请记住,“有趣的片段”越长,计算相关性所需的时间就越长。虽然较长的剪辑将有助于实际比赛从非比赛中脱颖而出,但您可能不需要超过几秒钟。

        3
  •  4
  •   Michael Chinen    16 年前

    AudioDB 是一个开源的C++项目,它搜索音频的相似部分,处理嘈杂的流,并且可以给你一个相似性的度量。它可以作为客户机/服务器运行,但我相信您可以做一个独立的程序。
    关于DSP相关的其他答案是正确的,但一般来说,这些DSP算法希望比较两个相同长度的流,它们具有相似的部分重叠。
    您需要的是它在流的任意段上工作;这就是构建audiodb的目的。(一个应用程序是查找隐藏的引用/采样或明显的版权滥用。)我使用它来查找向后播放的声音,它还发现了引入一些噪音或语音变化的情况。
    请注意,尽管主页上的日期似乎已关闭,但它仍在开发中。我会订阅邮件列表,并询问当前的状态以及如何合并它。

        4
  •  3
  •   gingerbreadboy    16 年前

    你可能想看看 this paper 王立春关于 www.shazam.com .

    它不是一个API,但它提供了如何开发算法的详细信息。

        5
  •  0
  •   Joel Martinez    16 年前

    请看一下Microsoft语音API(SAPI):
    http://msdn.microsoft.com/en-us/library/ee125077%28VS.85%29.aspx

    您列出的所有其他需求基本上都是您必须自己实现的实现细节。例如,当软件解释音频流时,它可以使用全文索引将它们存储在SQL Server中…从中搜索类似/相同的音频剪辑。

    当然,还有其他方法可以实现这一点,这只是一个想法:—)

        6
  •  0
  •   metakermit    14 年前

    我会按照蒂姆·克里格的回答去做,使用简单的统计相关函数,因为你想让内容不可知。

    至于功能,我肯定会尝试mfcc,因为它被用于语音处理和音乐识别(流派,歌曲)。您可以在优秀的开放源代码中找到mfcc和大量其他音频功能 Vamp plugins (或者更高级的捆绑包,一个名为 Sonic Annotator )或者在 Marsyas 框架。