Javascript 网络音频:赫兹和美分
我正在尝试制作一个简单的振荡器程序,在这里我可以改变倍频程,就像大质量VST用正数和负数显示的那样: 现在,我知道一个八度音阶有1200美分(每个半音100美分)。我遇到的问题是,在编写Osc代码时,我意识到它的音高是以美分为单位测量的Javascript 网络音频:赫兹和美分,javascript,html,audio,web-audio-api,Javascript,Html,Audio,Web Audio Api,我正在尝试制作一个简单的振荡器程序,在这里我可以改变倍频程,就像大质量VST用正数和负数显示的那样: 现在,我知道一个八度音阶有1200美分(每个半音100美分)。我遇到的问题是,在编写Osc代码时,我意识到它的音高是以美分为单位测量的 ctx = new webkitAudioContext(); function osc1(pitch){ osc = ctx.createOscillator(), osc.type = 2; //0 = sine, 1 = square, 2 = s
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);
由于音高会改变音符的频率,我感到困惑的是,如果没有MIDI键盘,我怎么知道呢
Cell A1: 440
Cell A2: =A1*2^(1/1200)
Cell A3: ...copy A2 down...
.
.
.
Cell A1201:
如果你做得对,单元格A1201将神奇地包含值880,中间的所有单元格将为你提供每分的频率(但请参见下面的重要注意事项)
不幸的是,事情并不那么简单。我描述的是基于数学的毕达哥拉斯量表,今天没有人使用。如果你用这种方式调一架钢琴,C大调和a小调可能会听起来很好,但其他的调子会严重走调。原因很微妙,与听觉生理有关。关于气质的学术书籍比比皆是,在巴洛克时期曾引起激烈的争论,有几个系统在争夺思想份额,直到巴赫“决定”让每个人都使用好气质,因为键盘不容易改变它的气质
今天的音乐家们使用一种称为“调和音阶”的改进,在这种音阶中,一些音符在数学上完美的基础上稍微向上或向下调整,这样所有的键都可以使用,而无需重新调谐。这是一种妥协,但我们都习惯于听到它。我不想再讨论它了,只想说,因为区间不完全是21/12,所以分的定义取决于每个区间的实际宽度。可以将美分想象为0到100之间的一组点,两个音符之间的间距相等,但基于固定的比率(21/1200),而不是固定的频率
如果你想制作一个精确的振荡器来提供音符,你必须研究性情并调整Hz值以匹配当前的音乐惯例。你需要一本关于性情的好书,和/或一个调谐器,调谐器可以调出不同的性情。有几种iPhone应用程序可以对扬声器进行不同的输入和输出
祝你好运,玩得开心。或者用简单的方法来做-振荡器有一个“detune”音频参数,允许你以美分为单位调整音调的上下(基于振荡器的频率参数;简而言之,频率是基线(如你所说,默认值是a-440Hz),detune是以美分为单位的偏移量)。:) 显然,我得到的信息是不正确的。频率不是以美分为单位,而是以赫兹为单位,默认情况下,振荡器的起始频率为440Hz(中间C上方的A)。然而,我想仍然存在的问题是,既然频率不是用美分来衡量的,我怎么能得到一个正在播放的音符的视觉显示,并做一些像音高待定这样的事情呢?谢谢Jim!这可能是我所能要求的最有用的答案了,效果更好!我天生是一个音乐家(主要是电子音乐),但我也做了几年的编程工作,但几个月前我的电脑坏了,我被女朋友的Mac电脑卡住了,我开始研究基于浏览器的DAW,比如Soundation,几周前我通过你的Google I/O 2012演讲偶然发现了Web音频API,从那以后我就迷上了它!刚刚结束了2013年的I/O演讲&伙计,你喜欢你的声码器吗哈哈。谢谢你的帮助,克里斯!