如何检测 iOS 中的音频瞬变

How to detect audio transients in iOS

好的,

让我尝试改写一下: 我正在寻找一种方法,它将音频文件作为输入,并根据给定的灵敏度输出瞬态列表(独特的峰值)。 音频是一段口语短语的录音,例如 5 个单词。该方法将 return 单词开始的数字列表(例如样本量或毫秒数)。我的最终目标是单独播放每个单词。

正如评论中所建议的那样(我在这里确实引起了一些负面的共鸣)我不会要求任何人为我编写任何代码。

我在这个论坛上已经有一段时间了,社区一直都非常乐于助人。最有帮助的答案是那些指出我僵化的思维方式,并根据他们自己的经验提供令人惊讶的替代方案或解决方法的答案。

我想这个话题太小众了。

编辑前: 对于我的 iOS 应用程序,我需要以编程方式将口语短语分割成单词以供进一步处理。我知道期望的词是什么,所以我可以对词的开始位置做出一些假设。 但是,无论如何,瞬态检测 algorithm/method 会很有帮助。


Google 将我指向商业产品或超出我的脑力的高度学术论文。 幸运的是,你比我聪明得多,知识渊博,所以你可以帮助和简化我的问题。 不要让我失望!

音频分析是一个非常复杂的话题。您可以轻松检测单个单词并将它们分开,但实际上识别它们需要大量处理和高级算法。

遗憾的是,除了没有办法解决它之外,我们能告诉你的不多。你说你找到了商业产品,我建议你去买那些。论文并不总是足够完整或适合您想要的 language/platform/usecase,并且对于没有事先了解该主题的人来说,通常缺乏正确实施的细节。

您可能很幸运,找到了适合您需求的开源实现。以下是一些研究的返回结果:

How to use Speech Recognition inside the iOS SDK?

free speech recognition engines for iOS?

您很快就会发现语音识别不是您应该从头开始的东西。选择一个库,稍微尝试一下,看看是否有效!

这里有几个简单的基本想法可以付诸实践。

首先,将输入音频分成小桶(大约 10 毫秒)。对于每个桶,通过对每个样本值的平方求和来计算其中样本的功效。

例如,假设您在名为 s 的数组中有 44.1 kHz 的 16 位样本。一秒钟的数据价值为 44100 个样本。 10 毫秒的桶大小将为您提供每个桶 441 个样本。要计算功率,您可以这样做:

float power = 0;
for (int i = 0; i < 441; i++) {
  float normalized = (float)s[i] / 32768.0f;
  power = power + (normalized * normalized);
}

构建功率值数组后,您可以查看桶与桶之间的功率相对变化,以进行基本信号检测。

祝你好运!