【家で遊ぶ】Javascript で簡易サンプラー

Photo by Kofi Nuamah Barden on Unsplash

Javascript を使ってブラウザの Chrome で鳴らせる簡易サンプラーを作ってみます。

こんなの。

DJブースの隅やイベント会場に置いてあるやつです。

爆発音を鳴らしてみたり、録音機能があったり、パターンを保存して再生する機能が付いてあったり、利用場面に合わせて様々な使われ方をされます。

ビートボックス、リズムマシンとも呼ばれたりします。

Tone.js

今回は、簡易版ということで、音が3つ鳴るだけのサンプラーです。

作成に当たっては、偉大なる Web Audio framework の Tone.js を利用します。

A Web Audio framework for making interactive music in the browser.
https://github.com/Tonejs/Tone.js/

動作デモ

まずは見ていただいた方が早いと思うので、 作ったものを netlify に上げておきました。

netlify.app

Chrome 以外では確認していません。
音が出るので注意。
PC、最近のスマートフォンなら動くと思いますが、環境によってはブラウザの「音声」を許可する必要あり。

やってること

主要部分はこんな感じになります。

!function(){
	Tone.Transport.bpm.value = 80;
	Tone.Transport.loop = false;
	const sampler = new Tone.Sampler({
		'C1' : '/bd.mp3',
		'E1' : '/sd.mp3',
		'F#1': '/hh.mp3'
	}, ()=>{
		console.log('initialized')
	}).toMaster();
	const sound = note => {
		const cell = document.querySelector('[data-note="'+note+'"]');
		sampler.triggerAttackRelease(note, .3);
		cell.style.animationName = 'fade1';
		setTimeout(()=>{
			cell.style.animationName = '';
		}, 300)
	}
	const beatbox = document.getElementById('petit-beatbox');
	beatbox.querySelectorAll('div').forEach(div=>{
		div.onclick = e => {
			sound(e.currentTarget.dataset.note)
		};
	});
	document.body.onkeypress = e => {
		if (e.code === 'KeyA') {
			sound('C1');
		} else if (e.code === 'KeyS') {
			sound('E1');
		} else if (e.code === 'KeyD') {
			sound('F#1')
		}
	}
}();

赤、黄、緑の四角をクリックするか、キーボードのASDでそれぞれ鳴らしたい音が再生されるようイベントリスナーをセットします。

ほぼこれだけです。

ボタンを追加して効果音や音色を設定していけば色々遊べます。

Javascript なので、その気になれば、その場でソースコードごと変更してしまうことも可能です。

(ラグがある場合は音自体の軽量化までやらないと駄目かも…)

家で遊ぶ

Tone.js には様々な API が用意されているので、頑張ればエフェクターやシーケンサーとしての機能も追加できます。

Tone.js っょぃ。

逆に、Tone.js のない標準の Web Audio API は、かなりしんどいです。
「シンプルなサイン波を440Hzで3秒間ほどほどの音量にして鳴らす」だけでもう再起不能に陥り寝込んでしまいます。

おうちで自家生産、サンプラーを作って遊んでみるのはいかがでしょうか。

Related Post