ToneJS:多音调键盘输入

时间:2018-04-21 03:37:17

标签: javascript web-audio

This pen使用ToneJS库在计算机键盘上播放音高。但是,它一次只能播放一个音符。如何对此进行编码以便一次播放多个音符?

代码:

var keyToPitch = { "z":"C3", "s":"C#3", "x":"D3", "d":"D#3", "c":"E3", "v":"F3", "g":"F#3", "b":"G3", "h":"G#3", "n":"A3", "j":"A#3", "m":"B3", ",":"C4" }

var synth = new Tone.Synth()
synth.oscillator.type = "sawtooth"
synth.toMaster()

window.addEventListener('keydown', this.onkeydown) 
window.addEventListener('keyup', this.onkeyup)

function onkeydown(e){
synth.triggerAttack(keyToPitch[e.key], Tone.context.currentTime)        
}
function onkeyup(e){
    synth.triggerRelease()
}

1 个答案:

答案 0 :(得分:1)

ToneJS中的振荡器是音频源,Master是输出连接到它的所有输入的输出。因此,要播放多个重叠声音,您只需创建多个振荡器并将它们全部连接到Master。

对于你要链接的那种演示,一个典型的事情可能是制作一个固定数字(比方说5个)振荡器,当你想要触发声音时依次旋转它们:

var synthIndex = 0
function startSound(){
    synthIndex = (synthIndex + 1) % voices
    var synth = synths[synthIndex]
    synth.triggerAttack(/* ... */)        
}

或类似的。原则上你可以为每个音调制作一个单独的振荡器,但这可能会在一个不那么简单的演示中损害性能。