网络音频:Hz和Cents

rya*_*agz 3 html javascript audio html5 web-audio-api

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

大规模振荡器

现在,我知道一个八度音程有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);
Run Code Online (Sandbox Code Playgroud)

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

  1. 正在播放什么音符?
  2. 正在播放音符的频率是多少?

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

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

感谢您的任何帮助和反馈!

Jim*_*son 6

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

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

数学上,从给定的音高开始,下一个半音不是通过固定的Hz数而是通过比率,即2的2(2 1/12)的第12根.由于分数小100倍,因此其比率为2的第1200根,即2 1/1200.请记住,对于每个八度音程,你加倍Hz.对于每个半音,你将频率乘以2 1/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:
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

祝好运并玩得开心点.