Hello, Sound
Last updated
Last updated
まずはサイン波を鳴らすだけのシンプルなコードを紹介します。
Codesandbox というクラウド上の IDE 兼実行環境に、デモを配置しましたので、以下のリンクから、実行内容を確認できます。
開くとすぐにかなりの音量がでますので注意してください!!
ここで重要なのは一行目の AudioContext
を作り出す部分です。この AudioContext
を通して、全ての Web Audio API にアクセスしていきます。例えば 4 行目では AudioContext
のメソッドである createOscillator()
を実行し、オシレーターを作成していますね。なお AudioContext
はブラウザに最初から組み込まれているオブジェクトなので、ウェブブラウザ以外の JavaScript の環境、例えば Node.js の環境では基本的に実行できません。(npm 等で明示的に用意することはできようです。)
Web Audio API は、ウェブブラウザでサウンドを扱うための API です。本書では主にシンセサイザーを作るために使用しますが、他にも音声の分析、サンプルファイルの再生等も可能です。実際の音楽機器のように単一の機能を持ったモジュール = Audio Node をつなげていくことでアプリケーションを作成します。
audioContext.createOscillator()
で「オシレーター」を作成します。
オシレーター一つは、一音を鳴らす機能を担当します。そのため、例えばピアノのように複数の音を鳴らす場合には、複数のオシレーターを作成する必要があります。
波形のタイプを指定します。文字列で指定できるのは以下の4つです。
sine
square
sawtooth
triangle
これ以外に Custom 波形も設定できるようですが、本書では扱いません。
周波数を Hz で指定します。音名では指定できませんので、後ほど音名 (正確には Midi Note Number) を周波数に変換するメソッドを作成します。なお 440 Hz は、標準位置の A = ラです。
オシレーター等、オーディオノードは、他のオーディオノードに .connect()
で接続できます。
上記サンプルコードでは、audioContext.destination
という最終出力先に接続しています。ここに最終的につなげることでブラウザから音が再生されます。
オシレーターを再生します。音が出ます。
オシレーターを停止させます。音が止まります。同時にこのオシレーターは破棄されます。ですので、再度音を出したい場合には、この止まったオシレーターを指定しても存在しませんので、エラーが出ます。正しくは、新たなオシレーターを作成します。
最終出力先です。このノードに接続することで、ブラウザから音を再生することができます。
new AudioContext()
で audioContect を作成する。ここから全ての Web Audio API の機能にアクセスする。
audioContext.createOscillator()
でオシレーターを作成する。その後、osc
に対して、.type
で波形の種類を、.frequency.value
で周波数を設定する。
最終出力先を audioContext.destination
で参照する。
osc.connect(destination)
でオシレーターを最終出力先につなぐ
osc.start()
で再生、osc.stop()
で停止をする。停止した場合、osc
は即破棄される。再度音を出したい場合には、もう一度 osc
を作成すること。