【问题标题】:How can I Compare 2 Audio Files Programmatically?如何以编程方式比较 2 个音频文件?
【发布时间】:2011-10-22 04:51:43
【问题描述】:

我想以编程方式比较 2 个音频文件。 例如:我的 iPhone 应用程序中有一个声音文件,然后我录制了另一个。我想检查现有声音是否与录制的声音匹配( - 类似于语音识别)。

我怎样才能做到这一点?

【问题讨论】:

    标签: iphone ipad audio-processing


    【解决方案1】:

    让服务器进行音频指纹计算,但无论如何都不适合移动设备。然后您的移动应用程序将您的文件上传到服务器并获取分析结果进行显示。所以我认为实现它的编程语言并不重要。以下是一些 AF 实现。

    Java:http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/

    VC++:http://code.google.com/p/musicip-libofa/

    C#:https://web.archive.org/web/20190128062416/https://www.codeproject.com/Articles/206507/Duplicates-detector-via-audio-fingerprinting

    【讨论】:

      【解决方案2】:

      我知道很久以前就有人问过这个问题,但一个明确的答案可以帮助其他人。

      1. Echoprint 的库(网站:echoprint.me/start)将帮助您解决以下问题:

        • 删除大集合的重复数据
        • 识别(曲目、艺术家...)硬盘或服务器上的歌曲
        • 使用您的数据运行 Echoprint 服务器
        • 在 iOS 设备上识别歌曲

        PS:更多面向音乐的功能,您可以查看APIhere列表。

      2. 1234563 /strong>

      希望这会有所帮助;)

      【讨论】:

        【解决方案3】:
        • 应用带通滤波器降低噪音
        • 幅度归一化
        • 计算互相关

        它可能相当密集。

        DSP 详细信息在众所周知的文本中:

        • 数字信号处理 Alan V. Oppenheim 和 Ronald W. Schafer

        【讨论】:

        • 这不会考虑口音和说话速度的差异
        【解决方案4】:

        我认为您也可以尝试从两个音轨中选择几秒钟的样本,将它们的幅度标准化并使用带通滤波器降低噪声,然后尝试使用相关器。

        例如,您可以对其中一个进行 5 秒的采样,并使其滑过第二个样本,以便在您移动的任何时候计算交叉相关性。 (请注意,如果您使用的数据包太小,您可能会在未预料到的情况下具有很高的相关性,并且由于信号的裁剪和互相关,您会减轻副作用)。 之后你就可以收集一个数组与所有的互相关结果,并得到最大值的索引。

        然后,您应该通过实验设置阈值,以决定何时假设 pachet 与 b 相同。这将根据您正在比较的音轨的质量而改变。

        我实现了一个校正器来接收和区分无线通信中的前导码。我的脚本实际上是在 matlab 中完成的。如果您有兴趣,我可以尝试找到共同的部分并将其发送给您。

        在论坛中粘贴的代码太长了。如果你想告诉我,我会尽快寄给你。

        干杯

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-19
          • 2012-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多