网络音频:Hz和Cents

时间:2013-10-26 06:09:16

标签: javascript html html5 audio web-audio

我正在尝试制作一个简单的振荡器程序,我可以改变Octave类型的Massive VST以正数和负数显示的方式:

Massive Oscillators

现在,我知道一个八度音程有1200美分(每个半音100美分)。我遇到的问题是,在制作Osc代码时,我意识到它的音高是用Cents测量的。

ctx = new webkitAudioContext(); 
function osc1(pitch){ 
osc = ctx.createOscillator(), 
osc.type = 2; //0 = sine, 1 = square, 2 = saw, 3 = triangle, 4 = custom
osc.frequency.value = pitch; //in cents
gainNode = ctx.createGainNode(); 
osc.connect(gainNode); 
gainNode.connect(ctx.destination);
gainNode.gain.value = 1; 
osc.noteOn(0); 
};

osc1 (20);

由于Pitch改变音符的频率,我很困惑的是,没有MIDI键盘我怎么知道

  1. 正在播放什么音符?
  2. 正在播放音符的频率是多少?
  3. 此外,我怎样才能从这些波形中获得低音?我做了几个测试,产生1美分,2美分,5美分,20美分等声音,看看它们是如何发声的,当Osc以1美分的速度产生音高时,我得到的只是一个低点点击而2美分,我在4/4节拍中得到几乎相同的点击。 根据我的理解,您可以在地图上查看像频率一样的频率,同样地,像这些点之间的距离一样。话虽如此,由于声音是直接从浏览器生成的,因此美分如何确定音符的频率? 另外,如果它只是移动振荡器的音高那么简单,那么振荡器的启动是什么?换句话说,你在说什么“投球”?

    我希望我写的内容很有意义,因为我自己很困惑。

    感谢您提供任何帮助和反馈!

2 个答案:

答案 0 :(得分:6)

音高以Hz(每秒周期数)来衡量,也可以作为音符和偏离该音符的分数给出。正如你所正确指出的那样,1分是半音的1/100或八度的1/1200。

翻译美分的关键是要意识到音高的进展不是线性的,而是几何的。 A定义为440 Hz。上面的A一个八度音程是880Hz,上面的下一个A是1760Hz,依此类推。请注意,对于每个八度音程,两个A音符之间的Hz差异会加倍。

数学上,从给定的音高开始,下一个半音不是以固定的Hz数而是以比率为大,这是2的第12根(2 1/12 )。由于分数小100倍,因此其比率为2的第1200根,或2 1/1200 。请记住,对于每个八度音阶,你加倍Hz。对于每个半音,你将频率乘以2 1/12 。如果这样做了12次,你的原始数量就会增加一倍(440 *(2 1/12 12 = 440 * 2 = 880)。同样,(440 *(2 1/1200 1200 = 880)。

在Excel中试用。

Cell A1: 440
Cell A2: =A1*2^(1/1200)
Cell A3: ...copy A2 down...
.
.
.
Cell A1201:

如果你这样做,单元格A1201将神奇地包含值880,其间的所有单元格将为您提供每分钱的频率(但请参阅下面的重要警告)。

不幸的是,它并不那么简单。我所描述的是基于数学的毕达哥拉斯量表,今天没人用。如果你这样调整钢琴C大调和A小调可能听起来不错,但其他键听起来会严重失调。其原因与听觉生理学有关。有关于气质的全部学术书籍,在巴洛克时期热烈争论,有几个系统争夺心灵分享,几乎直到巴赫“决定”让每个人都使用良好的气质,因为键盘不能轻易拥有它气质改变了。

今天的音乐家使用一种称为良好调节音阶的修改,其中一些音符从数学上完美地向上或向下调整,以便所有键都可以使用而无需重新调整。这是妥协,但我们都习惯听到它。我不再讨论它,只是说,由于间隔不完全是2 1/12 ,分的定义取决于每个间隔的每个间隔的实际宽度。将美分看作0到100之间的一组点,在两个音符之间平均间隔,但基于固定的比率(2 1/1200 )而不是固定的赫兹。

如果你想制作一个准确的振荡器来提供音符,你将不得不研究气质并调整Hz值以符合当前的音乐惯例。你需要一本关于气质的好书和/或一个不同气质的调音师。有几个iPhone应用程序会对扬声器产生不同的输入和输出气质。

祝你好运,玩得开心。

答案 1 :(得分:4)

或者做到这一点很容易 - 振荡器有一个"失谐" AudioParameter,允许你以分数向上或向下调整音高(基于振荡器的频率参数;简而言之,频率是基线(如你所说,默认为A-440Hz),detune是一个偏移量仙)。 :)