Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 网络音频:赫兹和美分_Javascript_Html_Audio_Web Audio Api - Fatal编程技术网

Javascript 网络音频:赫兹和美分

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

我正在尝试制作一个简单的振荡器程序,在这里我可以改变倍频程,就像大质量VST用正数和负数显示的那样:

现在,我知道一个八度音阶有1200美分(每个半音100美分)。我遇到的问题是,在编写Osc代码时,我意识到它的音高是以美分为单位测量的

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键盘,我怎么知道呢

  • 正在演奏什么音符
  • 音符的播放频率是多少
  • 此外,我怎样才能从这些波形中获得低音er音?我做了两个测试,分别产生1分、2分、5分、20分等的声音。看看它们的声音如何,当Osc产生1分的音高时,我得到的只是一个低点击,而2分时,我在4/4拍中得到几乎相同的点击。 根据我的理解,你可以像地图上的点一样观察频率,也可以像这些点之间的距离一样观察美分。也就是说,既然声音是直接从浏览器生成的,那么美分如何确定音符的频率呢? 同样,如果它只是简单地移动振荡器的音调,那么振荡器从什么音符开始呢?换句话说,你每说一句话都在“投”什么音符

    我希望我写的东西有意义,因为我自己也很困惑

    感谢您的帮助和反馈

    音高以Hz(每秒循环数)为单位测量,也可以作为音符给出,与该音符的偏差以美分为单位。正如你正确指出的,1分是半音的1/100或八度的1/1200

    翻译美分的关键是要认识到音高的级数不是线性的,而是几何的。A被定义为440 Hz。第一个八度音阶高于880Hz,第二个八度音阶高于1760Hz,依此类推。请注意,两个A音符之间的赫兹差在每一个八度以上加倍

    从数学上讲,从给定的音高开始,下一个半音的大小不是固定的Hz数,而是一个比率,即2(21/12)的第十二根。因为一美分比它小100倍,所以它的比率是2的1200次方,即21/1200。记住,对于每一个倍频程,你的频率是倍频。对于每个半音,将频率乘以21/12。如果你这样做12次,你将使原来的数字翻倍(440*(21/12)12=440*2=880)。同样,(440*(21/1200)1200=880)

    在Excel中尝试一下

    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演讲&伙计,你喜欢你的声码器吗哈哈。谢谢你的帮助,克里斯!