所以,我试图检测从麦克风录制的声音的平均频率。可以假设这个声音将是 mp3 或 wav 形式。我的最终目标是现场直播(或足够接近),但现在只需找到 mp3 或 wav 的平均频率就足够了。
我很难在 actionscript 3.0 中找到任何可以帮助我完成这项任务的类。任何人都可以通过建议 AS3.0 中的类或算法让我查看这个特定任务来帮助我吗?
提前感谢大家。
所以,我试图检测从麦克风录制的声音的平均频率。可以假设这个声音将是 mp3 或 wav 形式。我的最终目标是现场直播(或足够接近),但现在只需找到 mp3 或 wav 的平均频率就足够了。
我很难在 actionscript 3.0 中找到任何可以帮助我完成这项任务的类。任何人都可以通过建议 AS3.0 中的类或算法让我查看这个特定任务来帮助我吗?
提前感谢大家。
最佳方法因您正在分析的音频而异。对于单声道输入,例如歌手、长笛或小号,自相关方法可以很好地工作。这里的想法是,您试图通过在不同的时间间隔将其与自身进行比较来找到波形的周期,以找到最佳匹配。想象一下,您有一个声波,其周期在每 400 个样本后重新开始。如果您要迭代一些样本,总是将索引 i 处的样本与索引 (i + 400) 处的样本进行比较,也许通过从另一个中减去并将这个结果添加到运行总数中,您会发现您的如果波浪在这个 400 的间隔内完美匹配,那么总将为 0。当然,你不知道 400 是你的幻数,所以你需要检查你可能范围内的各种间隔。您可以排除可能导致频率低或高的间隔。您显然也不会期望找到完美的匹配,但一般来说,匹配最接近的间隔是您的单声道音高频率。
对于复音源,或音色非常丰富的乐器(如小提琴或吉他),您可能需要使用不同的方法。基于 FFT 的方法被广泛用于此,以便将音频片段分解为其谐波音高内容。然后,应用您想出的一些规则来决定从 FFT 出来的哪些频率是您的最佳选择。