首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ToneJS:多音高键盘入口

ToneJS:多音高键盘入口
EN

Stack Overflow用户
提问于 2018-04-21 03:37:16
回答 1查看 68关注 0票数 1

这支笔使用ToneJS库在计算机键盘上播放音高。然而,它一次只能播放一个音符。我如何将它编码为一次播放多个音符?

守则:

代码语言:javascript
复制
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()
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-27 04:35:23

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

对于链接到的演示,一个典型的方法可能是对振荡器做一个固定的数字(例如,5),然后当你想触发声音时依次旋转:

代码语言:javascript
复制
var synthIndex = 0
function startSound(){
    synthIndex = (synthIndex + 1) % voices
    var synth = synths[synthIndex]
    synth.triggerAttack(/* ... */)        
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49952128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档