首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web Audio API -获取正确频率

Web Audio API -获取正确频率
EN

Stack Overflow用户
提问于 2017-03-06 05:18:07
回答 2查看 1.9K关注 0票数 2

我使用Web Audio API来获取来自麦克风的声音的频率。为此,我在这个github代码库中找到了一些有用的代码:https://gist.github.com/giraj/250decbbc50ce091f79e

现在我的问题是,我得到了很多不同的频率,只有一个小小的声音。这个声音可能来自我的声音,也可能来自一种乐器。

这些频率大约在90到4000赫兹之间。但据我所知,人声或乐器的一个音符只能有一个以赫兹为单位的单频量。我很确定,我只演奏了一个音调。

那么,我如何知道,每个音调的3或4个频率中的哪个频率是我正在搜索的频率。我需要这个值,以便从它们的频率识别C,D,E这样的音符。我希望这个问题不是离题的,因为我真的很努力地寻找解决方案,我不知道这是一个可以从API本身解决的问题,还是我必须以某种方式消除一些频率。任何形式的帮助我都会很感激。

编辑:我想补充的是,我从来没有达到这个频率列表中列出的音符的相同值:http://www.phy.mtu.edu/~suits/notefreqs.html。我正在使用一个钢琴应用程序,它总是在play商店的频率应用程序上提供正确的频率。所以我甚至怀疑我收到的结果。

EN

回答 2

Stack Overflow用户

发布于 2017-03-29 00:13:18

我一直在处理同样的问题,并得到了一些有趣的部分答案。这个网站http://www.phy.mtu.edu/~suits/Physicsofmusic.html有大量的用数学术语解释音乐的信息,并且非常有帮助。

我写了一些东西,使用网络音频分析器,并简单地将fft结果按音乐音高放入桶中-它为您提供了fft结果的图形,并在某种程度上指示了声音中的实际频率。它在https://aerik.github.io/NoteDetector.htm上。

在我开始之后,我发现了另一个人的代码,它使用“自相关”来检测基本原理。这可能更接近你正在寻找的:https://github.com/cwilso/PitchDetect我遇到的问题是,虽然它在相当纯净的音调下工作得很好,但它仍然有很多噪音。

我正在考虑将他的方法与我的方法结合起来,将自相关结果与fft的信号强度进行比较。

这是一个有趣的项目,但我不认为有任何简单的答案。

票数 2
EN

Stack Overflow用户

发布于 2017-07-07 03:11:43

我是一名专业的歌手、钢琴家和声乐教师,正在过渡到代码,所以我想我可以对您在这里得到的一些令人困惑的结果发表意见。

结论:当你在乐器上演唱或演奏音符时,你实际上同时产生了许多不同的频率,所以你看到的结果很可能是准确的。然而,你的目标几乎肯定是基本音高,也就是最低的音高。

更长,更复杂的物理学答案:除非你看到的是正弦波(听起来像机械嘟嘟声,不会从一件像样的乐器中发出),否则你听到的声音可能包含许多不同的频率。声音由基本音高(最低频率,通常是我们在音乐中命名音高时所说的频率)和大量的泛音(其他组成乐器特有声音的高频,或者对歌手来说,甚至元音)组成。

让我们选择一个容易处理的数字:假设你的基音是100 to。为了便于讨论音乐含义,我们将其称为C1 (尽管它实际上不是C),并且数字表示八度跳跃,八度范围从C到B。您可以在以下任何音高使用泛音:200 hz (C2)、300 hz (G2)、400 hz (C3)、500 hz (E3)、600 hz (G3)、700 hz (Bb3)、800 hz (C4)、900 hz (D4)、1000 hz (E4)等。不同的乐器可能会使一些泛音比其他泛音更突出,或者完全跳过其中的一些泛音(许多会跳过其他泛音)。但是所有的言外之意都在这个模式之内。

请注意,所有的泛音都是基本音的倍数。这意味着你可以在你看到的所有其他音高中使用这个模式来计算出下面的基本音高。从音乐的角度来看,你可能也注意到,你在这个泛音系列中第一次看到的音高是我们认为最多的辅音-八度,完美的5度,大调3度,大调三和弦。这不是巧合,而且几乎可以肯定的是,这些泛音与其他音高的排列方式就是为什么我们觉得它们听起来很漂亮的原因。

把这一切归结为你如何确定基音,给定一系列的泛音,大概是由相同的基调产生的:你本质上是在寻找你将看到的各种频率的最大公因子。这可能也是您检测到的最低频率,但请谨慎使用此启发式方法,因为您的信号中可能存在不相关的噪声。任何不属于你漂亮的倍数列表的东西都可能是噪音。

当然,当你同时使用多个(基本)音高时,所有这些都会变得复杂得多。我自己也在思考和弦检测,在寻找人们在这一领域已经做了什么以及如何在此基础上进行构建的同时,我发现了您的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42614146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档