本文へスキップ

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 が作るのはシンセの音楽です。矩形波、のこぎり波、三角波、サイン波、ドラム用のフィルターをかけたノイズ、エンベロープ、音符ごとにスイープできるレゾナンス付きフィルター、デチューンしたユニゾン、ビブラート、テンポに同期したエコー。チップチューンに少し今風の味を足したもの、と考えてください。プレイグラウンドで試すと、音を聴きながら曲をその場で編集できます。

録音したオーケストラ曲の代わりにはなりませんし、オーディオファイルは再生しません。