Tone.jsの続きです。前回はシンセでリズム音を流す方法を調べました。今回はこれをもとにドラムパッドを作ってみました。それではいきましょう!
【目次】
前回記事
※参考:【Tone.js】シンセでリズム音を作る方法を調べた - クモのようにコツコツと
※参考:Tone.jsを習得するためにやった事まとめ
qiita.com
作ってみたもの
作ってみたものこちら。
See the Pen tone.js-Drum Pad by イイダリョウ (@i_ryo) on CodePen.
「Kick」「Snare」「Hi-Hat」の三つのパッドがある。
昔持っていたAKAIのサンプラーのパッド部分を意識してみましたw
※参考:サンプラーで無限の可能性を手に入れよう、おすすめのハードサンプラーを紹介 | 人人振動
HTMLコード
<h1>ドラムパッド</h1> <ul id="pad"> <li id="kick">Kick</li> <li id="snare">Snare</li> <li id="hihat">Hi-Hat</li> </ul>
ul
タグの中のli
リストに#kick
、#snare
、#hihat
のid名を振ってある。
JSコード
DOM取得
最初にパッドのDOMを取得する。
//DOM const kick = document.querySelector('#kick'); const snare = document.querySelector('#snare'); const hihat = document.querySelector('#hihat');
変数kick
で#kick
、変数snare
で#snare
変数hihat
で#hihat
のDOMを取得
シンセ音設定
次にシンセ音のインスタンスを作成
//シンセ生成 const membrane = new Tone.MembraneSynth().toMaster(); const noise = new Tone.NoiseSynth().toMaster(); const metal = new Tone.MetalSynth().toMaster();
変数membrane
でMembraneSynth()
、変数noise
でNoiseSynth()
、変数metal
でMetalSynth()
のインスタンスを作成。
このシンセ音は前回みたブーツカットのCodePenを参考にした。
See the Pen EDM by Matt Farmer (@mrfarmer777) on CodePen.
しかし、ハイハットの音はあまりハイハットらしくないため、メタル音にしてみた。
See the Pen tone.js-12 by イイダリョウ (@i_ryo) on CodePen.
パッドのイベント設定
パッドのクリックイベントでシンセ音を鳴らす。
まずキック音
kick.addEventListener('click', () => { membrane.triggerAttackRelease('C0','2n'); }, false);
kick
を押した時にmembrane
を鳴らす。C0
の高さで2分音符の長さ。
※参考:MembraneSynth
キック音をもっと伸ばしたくて2分音符まで伸ばしてみたけど、あまり変わらないっぽい。
次にスネア音
snare.addEventListener('click', () => { noise.triggerAttackRelease('8n'); }, false);
snare
を押した時にnoise
を鳴らす。8分音符の長さ。どうやらノイズシンセには音階はないっぽい。
※参考:https://tonejs.github.io/docs/13.8.25/NoiseSynth
最後はハイハットの音
hihat.addEventListener('click', () => { metal.triggerAttackRelease('32n'); }, false);
hihat
を押した時にmetal
を鳴らす。32分音符の長さ。
こちらは逆に「ピシー」って音をもっと短くしたくて32分音符にしてみたが、あまり変わらないっぽい。
そしてメタルシンセも音階はないっぽい。
※参考:https://tonejs.github.io/docs/13.8.25/MetalSynth
JSコード全体
今回の時点ではここまで。
//DOM const kick = document.querySelector('#kick'); const snare = document.querySelector('#snare'); const hihat = document.querySelector('#hihat'); //シンセ生成 const membrane = new Tone.MembraneSynth().toMaster(); const noise = new Tone.NoiseSynth().toMaster(); const metal = new Tone.MetalSynth().toMaster(); kick.addEventListener('click', () => { membrane.triggerAttackRelease('C0','2n'); }, false); snare.addEventListener('click', () => { noise.triggerAttackRelease('8n'); }, false); hihat.addEventListener('click', () => { metal.triggerAttackRelease('32n'); }, false);
最後に
ということで懐かしのAKAIのサンプラーチックなドラムパッドを作ってみましたが、まだ音の長さや音量などをコントロールできていない。次回はここら辺の調整を試みたいと思います。それではまた!
※参考:Tone.jsを習得するためにやった事まとめ
qiita.com