タグ別アーカイブ: Web Audio API

WebAudio.tokyo #4

2017 年 3 月 28 日 (火) に WebAudio.tokyo #4 に参加してきました.

私は, 5 分の LT 枠で, 自作の Web Audio API ライブラリの概要を話してきました.

発表では, Chrome の Web MIDI API の実装をされた @toyoshim さんから, レコーディング機能の実装について質問されたり, 発表後には, Web Music Hackathonのボスである @g200kg さんとお話をできたりと非常に楽しい勉強会でした.

また, 自分が制作した 「Web Audio API の解説サイトを参考にさせてもらってます」
という方もいらっしゃってとてもうれしかったです.

Google の @agektmr さんに, X Sound をツイートしてもらえたのも感激でした.

最後に, 関連リンクを紹介しておきます.

XSound.js 1.13.0 リリース

XSound.js 1.13.0 をリリースしました.
今回のリリースで, Microsoft Edge にもおおよその機能は対応しました.

といっても, 大した対応はしていません.

Edge の ScriptProcessorNode のバグに対応しただけです.

ScriptProcessorNode インスタンスを生成するには, AudioContext インスタンスの createScriptProcessor を利用します. 例えば, 以下のような感じ

const context = new AudioContext();
const processor = context.createScriptProcessor(2048, 2, 2);

第1引数は, 必須で onaudioprocess イベントのバッファサイズを指定します.
第2引数, 第3引数はオプションで, それぞれ, 入力チャンネル数 / 出力チャンネル数を指定します.
省略した場合は, どちらもデフォルト値 2 が適用されると仕様では定義されています.

実は, Edge はこの仕様に反していて, 明示的に入力チャンネル数 / 出力チャンネル数を指定しないとダメなのです.

ここを省略していたので, 1.13.0 より前のバージョンにおいて Edge でエラーが出ていました.

これを, PR 送って修正したいのですが, Edge の Web Audio API のソースが公開されていないようなのです…
(誰かご存知でしたら教えていただけると助かります〜)

ちなみに, WebKit と Gecko の Web Audio API のソースは公開されているのですが…

Microsoft Edge でも X Sound を楽しんでください~

Web Music Hackathon #5

Web Music Hackathon #5に参加してきました.

「Twitterを楽器にする」というコンセプトで, MMLを書き込んで投稿すると音楽が再生されるChrome Extensionを作成しました.

過去にツイートされたMMLも演奏可能にし, ビジュアライゼーション機能や, WebSocketによるセッション機能もつけました.

GitHubリポジトリ : Music Tweet

そして…なぜかわからないけど表彰されました〜

Web MIDI API MIDIメッセージの受信

MIDIデバイスからのMIDIメッセージを受信するには, MIDIInputインスタンスのonmidimessageイベントハンドラを定義します.

onmidimessageイベントハンドラには,MIDIMessageEventイベントオブジェクトが引数に渡されます.

MIDIMessageEventイベントオブジェクトには,Number型のreceivedTimeプロパティとサイズが3のUint8Arrayのdataプロパティが定義されています.

そして, MIDIメッセージはこのUint8Arrayのdataプロパティに格納されています. MIDIメッセージの詳細はこちらを参照してください.

インデックス0のデータは,  音を鳴らす (9nH ノートオン) or 止める (8nH ノートオフ) メッセージが格納されています.

サンプルコードでは, この値 (のマスク値) で分岐して, noteOn関数かnoteOff関数のどちらを呼び出すかを決定しています.

インデックス1のデータは,ピッチ (音の高さ) を表すメッセージとなります (ノートナンバーと呼ばれます). 最も低い音が0, 最も高い音が127となります. また, ピアノ88鍵に対応するノートナンバーは, 22 〜 109となります.

サンプルコードでは, この値をWeb Audio APIのOscillatorNodeに反映させています.

インデックス2のデータは, 音の強弱を表すメッセージとなります (ベロシティと呼ばれます). 1 〜 127までの値をとり, 127が最も強い音となります.

サンプルコードでは, この値をWeb Audio APIのGainNodeに反映させています.

Web Audio API 次期仕様

http://webaudio.github.io/web-audio-api/

これをみると, AnalyserNodeにgetFloatTimeDomainDataメソッドが追加されているようです. 時間ドメインでもdB単位で波形描画可能になるみたい…と思ったら既にChromeには実装されていて驚きです.

現状の仕様からの変更で言えば, AudioListenerのsetVelocityメソッドはなくなるようです. また, PannerNodeのpanningModelプロパティに設定可能な音響アルゴリズムが ‘HRTF’ と ‘equalpower’ のみになるようです (つまり, ‘soundfield’ が削除されるようです).

新しく追加されるノードとしては,  AudioWorkerノードがあります. これは, まだどのブラウザにも実装されていないようなので, 実際にどういうものなのかはわかりませんが, オーディオ処理に特化したWebWorkersのようなものなのでしょうか ?

とにかく, これらの変更がブラウザに実装されるのが楽しみです.