在iphone中比较两个音频文件的节拍/速度和评级

时间:2010-12-22 17:31:51

标签: iphone audio signal-processing

我想开发一个iPhone应用程序,它应该能够计算用户在麦克风上唱歌时收到的短语数量。

此应用程序还应能够解密用户短语是否在预设节拍的节奏中。当用户在麦克风上演唱时,只播放纯音乐。

所以我必须将用户录制的语音与乐器音乐合并 - 这是一个音频文件。我已经有原创歌曲文件了。我必须比较两者并给用户评分。

注意......乐器音乐没有原创歌曲的声音。

任何人都可以帮助我吗?谢谢,Vadivelu

2 个答案:

答案 0 :(得分:1)

首先,您需要一个音频分割和起始检测的解决方案。有几种不同的方法可以做到这一点,其中一些已经在堆栈溢出上进行了讨论。 Aubio是一个可以帮助您解决此问题的库。

第二部分,合并两个声音文件应该是传入麦克风声音的采样缓冲区与原始音频源的采样缓冲区之间的简单求和操作。

答案 1 :(得分:0)

让我试着了解您正在构建的应用程序。

  1. 我有一部iPhone,我扮演Lady Gaga:P。
  2. 播放原创歌曲(乐器+人声)。
  3. 当我开始唱歌时,应用程序必须检测到我正在尝试演唱这首歌。
  4. 如果它确定了这一点,它只会切换到演奏乐器(卡拉OK风格)。
  5. 同时,它记录了我的声音。在这首歌的最后,它对我演唱的情况做了一些分析。
  6. 如果这是正确的,那么让我试着去试一下第4步。基本的想法是,只有当我正在播放正在播放的歌曲的关闭时才会切换到卡拉OK模式。

    我会预先计算一首歌曲的声乐部分的能量包络(该人假设唱歌的部分)。要提取只有声乐的部分,你可能需要付一个好歌手来唱它,因为你可能无法从原始歌曲中提取它。

    为了计算能量包络,我会使用半波整流,然后是低通滤波器(绝对是因果和快速的东西)。

    然后,我会听麦克风并实时计算输入音频的能量包络。

    知道我2点进入“电话”,我会将1:55到2点的真实能量包络与我记录的最后5秒的能量包络进行比较。我会以某种方式规范化每个信封。根据重叠分数,我会决定该人是否试图唱“电话”。

    祝你好运!