Oscillatorとは
javascriptには「WebAudio API」という技術があります。
WebAudio APIではブラウザ上で音を扱うための機能がたくさんあります。
今回作成するのはWebAudio APIの中の「Oscillator」というものを使用して、ブラウザ上で音を出力するサンプルです。
Oscillatorの生成
Oscillatorは「AudioContext」のインスタンスから生成します。
window.addEventListener( 'DOMContentLoaded', function( ){
var audioCtx = new (window.AudioContext || window.webkitAudioContext )();
var oscillator = audioCtx.createOscillator();
} );
これでは生成しただけなので音は出ませんが、この様に「AudioContext」からcreateOscillatorメソッドを使用して取得します。
Oscillatorによる音の出力
Oscillatorの生成で説明した通り、まずはAudioContextからOscillatorを取得します。
今回は440Hzの音(ラ音)を出力するために、Oscillator.frequencyに440Hzの値を設定します。
取得したOscillatorをAudioContext.destinationに接続してあげると、音を出力する準備が整います。
最後にstartメソッドを呼び出して音を出力し、stopメソッドで音の出力を止めます。
window.addEventListener( 'DOMContentLoaded', function( ){
var audioCtx = new (window.AudioContext || window.webkitAudioContext )();
var sample268Btn = document.querySelector( '#sample-268' );
sample268Btn.addEventListener( 'click', function(){
var oscillator = audioCtx.createOscillator();
oscillator.frequency.value = 440;
oscillator.connect( audioCtx.destination );
oscillator.start();
oscillator.stop( audioCtx.currentTime + 0.5 );
} );
} );
※ボタンを押すと音が出ますのでご注意ください。
ここで気を付けたいのが、Oscillatorをstartしてstopして再度startする…事はできません。
ですので、ボタンを押すたびにOscillatorを生成してstartとstopを呼び出すようにしています。
サンプル
では音を出力する方法がわかったので、ピアノの鍵盤のサンプルを作ってみました。
鍵盤をクリックするとその音階の音が出力されます。
window.addEventListener( 'DOMContentLoaded', function( ){
var audioCtx = new (window.AudioContext || window.webkitAudioContext )();
var sample268Keys = document.querySelectorAll( '#keyboard-268 .key' );
for( var i = 0; i < sample268Keys.length; i++ ){
sample268Keys[ i ].addEventListener( 'click', function( e ) {
var oscillator = audioCtx.createOscillator();
var hz = e.target.dataset.hz || e.target.parentNode.dataset.hz;
oscillator.frequency.value = hz;
oscillator.connect( audioCtx.destination );
oscillator.start();
oscillator.stop( audioCtx.currentTime + 0.5 );
} );
}
} );
※音が出ますのでご注意ください。
ド
レ
ミ
ファ
ソ
ラ
シ
ド
