はじめに
本文の内容は AudioContext - Web API 接口 | MDN から整理したもので、古くなっている可能性がありますのでご注意ください(2015-06-24)
一.Web Audio API 各ノードの関係
[caption id="attachment_694" align="alignnone" width="300"]
Web Audio API 各ノード間の関係[/caption]
二.Web Audio API の役割
###1.audio タグでも実現可能な機能
-
複数のオーディオを同時再生
-
複数のオーディオをクロスフェード再生(同時再生を基に制御を追加)
-
音量調整(ゲイン値を調整)
-
フェードイン/フェードアウト(同上)
###2.特徴的な機能
-
オーディオ時間、周波数の取得、データ可視化の実現(音声再生:http://mdn.github.io/voice-change-o-matic/)
-
特定周波数のフィルタリング(フィルター、ローパスフィルター、ハイパスフィルター、バンドパスフィルター、ローシェルフフィルター、ハイシェルフフィルター、ピーキングフィルター、ノッチフィルター、オールパスフィルター。ローパスフィルターは低周波数の帯域幅を確保し、高周波数帯域の音波を破棄します)
-
リバーブ効果(エコー)
-
オーディオ空間化
-
オーディオストリーム内の各チャンネルにアクセスして個別処理
-
ステレオ効果
-
非線形歪み効果
-
音響の生成(電子オルガンのシミュレーション:http://cool.techbrood.com/fiddle/5644)
三.Web Audio API 概要
###AudioContext
####Properties
- AudioContext.currentTime
説明:double 秒を返します。AudioContext は作成されると 0 からカウント開始
役割:オーディオ再生に使用。例えば source.start(time); の time パラメータ
- AudioContext.destination
説明:AudioDestinationNode 型のオブジェクトを返します。AudioContext 内の全ノードの最終ノードを表し、通常はオーディオ出力デバイス(例:スピーカー)
役割:一連のノードを AudioContext.destination に接続しないと音が出ません
- AudioContext.listener
説明:AudioListener オブジェクトを返します
役割:【3D オーディオ空間化(3D audio spatialization)の実現】
- AudioContext.mozAudioChannelType
説明:非標準、互換性が悪く、使用非推奨
役割:
- AudioContext.sampleRate
説明:浮動小数点数を返します。サンプリングレートを表します
役割:同じ AudioContext 内の全ノードのサンプリングレートは同じため、サンプリングレート変換はサポートされません
####Methods
- AudioContext.close()
説明:AudioContext を閉じ、すべてのオーディオリソースを強制的に解放
役割:閉じた後はノードを作成できませんが、オーディオのデコード、buffer の作成は可能
備考:https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/close
- AudioContext.createAnalyser()
説明:AnalyserNode オブジェクトを返します
役割:【オーディオ時間、周波数の取得、データ可視化の実現(スペクトル図?)】
- AudioContext.createBiquadFilter()
説明:BiquadFilterNode オブジェクトを返します
役割:2 次フィルター。一般的なタイプのフィルターに設定可能
- AudioContext.createBuffer()
説明:空の AudioBuffer オブジェクトを返します
役割:オーディオデータを格納し、AudioBufferSourceNode オブジェクトで再生
- AudioContext.createBufferSource()
説明:AudioBufferSourceNode オブジェクトを返します
役割:AudioBuffer 内のオーディオデータを再生
- AudioContext.createChannelMerger()
説明:ChannelMergerNode オブジェクトを返します
役割:AudioContext.createChannelSplitter() と連携してチャンネルを操作。複数のオーディオストリームのチャンネルを単一のオーディオストリームに統合
- AudioContext.createChannelSplitter()
説明:ChannelSplitterNode オブジェクトを返します
役割:【オーディオストリーム内の各チャンネルにアクセスして個別処理】するために使用。通常 AudioContext.createChannelMerger() と連携
- AudioContext.createConvolver()
説明:ConvolverNode オブジェクトを返します
役割:【オーディオにリバーブ効果を追加】
- AudioContext.createDelay()
説明:DelayNode オブジェクトを返します
役割:遅延を設定。デフォルトパラメータは 0 秒
- AudioContext.createDynamicsCompressor()
説明:DynamicsCompressorNode オブジェクトを返します
役割:オーディオ信号の圧縮に使用
- AudioContext.createGain()
説明:GainNode オブジェクトを返します
役割:【全体の音量を制御】
- AudioContext.createJavaScriptNode()
説明:廃止済み
役割:
- AudioContext.createMediaElementSource()
説明:新しい MediaElementAudioSourceNode オブジェクトを返します
役割:ページ上の既存の audio または video 要素からデータを取得
- AudioContext.createMediaStreamDestination()
説明:WebRTC MediaStream に関連付けられた MediaStreamAudioDestinationNode オブジェクトを返します
役割:オーディオストリームを表し、ローカルファイルとして保存または他のコンピューターに送信可能
備考:Web RTC はネットワークリアルタイム通信で、ブラウザ間の audio/video データ共有を実現。ネイティブ API サポートがあり、サードパーティプラグインに依存しません。詳細:https://developer.mozilla.org/en-US/docs/Web/Guide/API/WebRTC
- AudioContext.createMediaStreamSource()
説明:新しい MediaStreamAudioSourceNode オブジェクトを返します
役割:MediaStream オブジェクトパラメータが必要。例:navigator.getUserMedia インスタンス
- AudioContext.createOscillator()
説明:OscillatorNode オブジェクトを返します
役割:周期波を表し、主に【一定のトーン(恒音?)の生成】に使用
- AudioContext.createPanner()
説明:PannerNode オブジェクトを返します
役割:入力オーディオストリームを 3 次元空間に空間化
- AudioContext.createPeriodicWave()
説明:PeriodicWave(周期波)を作成
役割:周期波形を定義し、OscillatorNode の出力を形成
- AudioContext.createScriptProcessor()
説明:ScriptProcessorNode オブジェクトを返します
役割:オーディオを直接処理
- AudioContext.createStereoPanner()
説明:StereoPannerNode オブジェクトを返します
役割:【ステレオ効果】を実現。入力オーディオストリームを等冪平移アルゴリズムでステレオ画像に定位
- AudioContext.createWaveShaper()
説明:WaveShaperNode オブジェクトを返します
役割:【非線形歪み効果】を実現
- AudioContext.createWaveTable()
説明:廃止済み
役割:
- AudioContext.decodeAudioData()
説明:ArrayBuffer 内のオーディオファイルデータを非同期でデコード
役割:ArrayBuffer は通常 XMLHttpRequest の response(送信時に responseType 属性を arraybuffer に設定すると arraybuffer 型のレスポンスが返る)
備考:戻り値は xhr.response であり、xhr.responseText ではありません
####Related pages for Web Audio API
- AnalyserNode
説明:分析ノード
役割:リアルタイムの周波数および時域分析情報を提供。データのみ取得し、入力は変更しない
備考:時域分析は信号関連の用語。時域内で信号のフィルタリング、増幅、統計特徴計算、相関分析などの処理を総称して信号の時域分析と呼びます。
- AudioBuffer
説明:オーディオバッファ
役割:AudioContext.decodeAudioData() または AudioContext.createBuffer() で作成可能。バッファに格納後、AudioBufferSourceNode で再生可能
- AudioBufferSourceNode
説明:オーディオバッファソースノード
役割:AudioBuffer 内のデータをオーディオ信号に変換
備考:AudioBufferSourceNode は 1 回しか再生できません。AudioBufferSourceNode.start() も 1 回しか呼び出せません。AudioBufferSourceNode は再利用不可(複数回再生するには複数の AudioBufferSourceNode を作成する必要あり)。ただし AudioBuffer は再利用可能
- AudioChannelManager
説明:非標準。現在 FF のみサポート。使用非推奨
役割:
- AudioDestinationNode
説明:オーディオデスティネーション(出力)ノード
役割:AudioContext 内の全ノードの終点を表し、通常はデバイスのスピーカー
備考:入力チャンネル数に制限あり。maxChannelCount を超えると例外が発生。おそらく 6
- AudioListener
説明:オーディオリスナー。人の位置と方向を表します
役割:オーディオ空間化に使用。AudioContext 内の全 PannerNode は AudioListener に空間化され、AudioContext.listener 属性に格納
- AudioNode
説明:オーディオノード
役割:最上位抽象インターフェース。継承関係は画像 rel.png を参照
- AudioParam
説明:オーディオパラメータ
役割:オーディオ関連のパラメータを表します。通常は AudioNode のパラメータ。例:GainNode.gain
- AudioProcessingEvent
説明:廃止予定。Audio Workers により代替
役割:
- BiquadFilterNode
説明:双二次フィルター
役割:単純な低次フィルター。AudioContext.createBiquadFilter() で作成可能
- ChannelMergerNode
役割:チャンネルマージャーノード
説明:ChannelSplitterNode と連携して、異なるモノラル入力を単一出力に統合
備考:各チャンネルを個別処理するために使用。例:チャンネルミックスの実現
- ChannelSplitterNode
説明:チャンネルスプリッターノード
役割:ChannelMergerNode と連携して、オーディオソースの各チャンネルを一組のモノラル出力に分離
備考:同上
- ConvolverNode
説明:コンボルバーノード
役割:線形畳み込みを実装。通常リバーブ効果の実現に使用
備考:畳み込みリバーブはオーディオの空間感(ホール感?)を強化。複雑なアルゴリズムで、比較的大きなオーバーヘッドが発生する可能性あり
- DelayNode
説明:ディレイノード
役割:入力から出力までの遅延を設定
- DynamicsCompressorNode
説明:ダイナミクスコンプレッサーノード
役割:圧縮効果を実装。クリッピング歪みを防止。AudioContext.createDynamicsCompressor で作成
備考:【音楽制作やゲームオーディオでよく使用】
- GainNode
説明:ゲインノード
役割:音量調整に使用。チャンネル数は変更しない
- MediaStreamAudioDestinationNode
説明:メディアストリームオーディオデスティネーション(出力)ノード
役割:単一オーディオストリームメディアトラック(AudioMediaStreamTrack)を含む WebRTC MediaStream のオーディオデスティネーションを表します。Navigator.getUserMedia で作成可能
- MediaStreamAudioSourceNode
説明:メディアストリームオーディオソースノード
役割:WebRTC MediaStream(例:ネットワークカメラやマイク)を含むオーディオソースを表します。オーディオソースに似た AudioNode
- NotifyAudioAvailableEvent
説明:非標準。互換性が悪く、使用非推奨
役割:
- OfflineAudioCompletionEvent
説明:オフラインオーディオ完了イベント
役割:OfflineAudioContext の処理終了時にトリガー
- OfflineAudioContext
説明:オフラインオーディオコンテキスト
役割:全 AudioNode を接続するオーディオ処理グラフを表します
備考:OfflineAudioContext はデバイスハードウェアをレンダリングせず、できるだけ早く処理を完了して AudioBuffer に出力
- OscillatorNode
説明:オシレーターノード
役割:周期波形(例:正弦波)を表します。指定された周波数の正弦波を作成し、トーンは一定
- PannerNode
説明:パンナーノード
役割:空間内のオーディオ信号源の位置と動作を表します
備考:右手デカルト座標系で位置を記述。速度ベクトルと方向コーンで動きを表します。Pan は声像、Phase は位相。声像とは音場内の楽器の発音位置点。���単に言えば、音の方位、左寄りか右寄りか。
- ParentNode
説明:親ノード
役割:特殊な Node。子を持つことができます
備考:ParentNode は抽象 DOM ノード。作成不可。Element、Document、DocumentFragment オブジェクトが実装
- PeriodicWave
説明:周期波
役割:周期波形を定義。OscillatorNode の出力の形成に使用可能
- ScriptProcessorNode
説明:スクリプトプロセッサーノード
役割:js によるオーディオの生成、処理、分析を実装。InputBuffer と OutputBuffer の 2 つの Buffer を含む
- StereoPannerNode
説明:ステレオパンナーノード
役割:オーディオフローを左または右にパン。低コスト等価アルゴリズムでオーディオフローをステレオ画像に配置
- WaveShaperNode
説明:ウェーブシェイパーノード
役割:非線形歪み増幅器。明らかな増幅効果の実現に加え、信号に暖かみを追加するためによく使用
コメントはまだありません