Web AudioはWebブラウザ上で音楽を扱えるAPIですが、処理をメインスレッドで行う必要があります。それに対してAudioWorkletはオーディオ処理に特化したWorkerで、バックグラウンドで音声処理が可能になります。しかしオーディオ自体の処理は複雑なイメージがあります。 そうした処理をDSLでシンプルにしてくれるのがAudio DSLになります。

Audio DSLの使い方

Audio DSLのシンプルな例です。拡張子はdslで、シンプルな記述でAudioWorkletを定義できます。

void process() {
  float type = wave_type;
  loop {
    out_0[i] = (
      type == 0.0 ? calc_sin() :
      type == 1.0 ? calc_square() :
      type == 2.0 ? calc_saw() :
      type == 3.0 ? calc_triangle() :
      calc_noise()
    ) * gain[i];
    angle = angle + angle_per_sample(note_to_hz(note[i]));
    angle = angle > TWO_PI ? angle - TWO_PI : angle;
  }
}

デモサイトでは音楽を奏でられます。

Audio DSLを使えば複雑なAudioWorkletを手軽に扱えるようになります。利用時にはモジュール用のJavaScriptに変換します。dslというコマンドが用意されていますので、それを使って変換し、Webブラウザで読み込む仕組みです。後はJavaScriptのイベント内で実行します。

Audio DSLはTypeScript製のオープンソース・ソフトウェア(MIT License)です。

Audio DSL Example jinjor/audio-dsl: An experimental DSL for AudioWorklet