plonk
コードで作るゲーム音楽。 1 曲は数百バイトのテキストです。楽器と音符のパターンを書くと、Web Audio がその場で鳴らします。エンジン全体は brotli で約 2 kB です。圧縮した音楽ループは 1 本でたいてい 300 kB〜1 MB あるので、plonk のサウンドトラックは曲 1 本ぶんより小さく、何もダウンロードせずに鳴り始めます。
ts
import { Player } from "plonkjs";
new Player().play({
bpm: 112,
instruments: { lead: { wave: "square", decay: 0.15, sustain: 0.3, echo: 0.3 } },
sections: { a: { lead: "C5 . E5 G5 . E5 C5 . | D5 . F5 A5 . F5 D5 ." } },
order: ["a"],
});はじめる · 曲とパターン · プレイグラウンド · API リファレンス
なぜ plonk なのか
- 小さい。 エンジンは brotli で約 2 kB、曲は 1 曲あたり数百バイトです。Poki 向けのマッチ 3 ゲーム gloop では、サウンドトラック全部を入れてもビルドの増加は 2.2 kB でした。
- ゲームに反応する音楽。 テンポを途切れずに変えたり、トラックを 1 本ずつフェードイン・アウトしたりできます。メニューではドラムを抜き、残り時間が少なくなったら速くする、といった具合です。
- 編集できるテキスト。
"C5 . E5 G5"はメロディ、"x . . ."はキックドラムです。人とコーディングエージェントのどちらでも、曲を直接書いて直せます。 - どのエンジンでも。 Phaser、PixiJS、three.js、KAPLAY、Excalibur、手書きのループ、そして debuff。エンジンのオーディオコンテキストを渡せば、音量とミュートも共有します。
- スピーカーなしでテストできる。
notes()は曲をデータに変えるので、テストやエージェントが聴けない音楽を確かめられます。
どんな音がするのか
plonk が作るのはシンセの音楽です。矩形波、のこぎり波、三角波、サイン波、ドラム用のフィルターをかけたノイズ、エンベロープ、音符ごとにスイープできるレゾナンス付きフィルター、デチューンしたユニゾン、ビブラート、テンポに同期したエコー。チップチューンに少し今風の味を足したもの、と考えてください。プレイグラウンドで試すと、音を聴きながら曲をその場で編集できます。
録音したオーケストラ曲の代わりにはなりませんし、オーディオファイルは再生しません。