音の裏側
小さなオーケストラ。
すべてコードから。
chipvoice は、懐かしいゲーム機のサウンドチップを再現するオープンソースの JavaScript ライブラリです。このサイトでは、実際に音を鳴らしながら、その機能を体験できます。
楽譜から音へ。
楽譜は音符に、音符はチップへの命令になり、再現したチップが音を生成します。ゲーム機を変えると、同じ曲も違う響きに。全パートプレイヤーでは、各エンジンで生成したロスレス音源を最初に再生します。テンポ・音程・パートの変更や自分の MIDI の音声生成は、今の音楽を止めずにブラウザー内のワーカーで行います。
ファミコンはパルス波とノイズ。ゲームボーイは波形メモリー。メガドライブは FM 音源。スーパーファミコンはサンプル再生、エンベロープ、エコー。各エンジンは実機のルールに従い、スーパーファミコンでは実機と同じように小さなサンプルバンクを使います。
エンジンは TypeScript で書かれ、JavaScript として動きます。「作る」と「デスク」では AudioWorklet でその場で鳴らします。曲を言葉で説明し、キーボードで音を弾き、テイクを録音し、効果音を鳴らし、譜面を編集できます。同じライブラリが、これらのライブ楽器と曲全体のレンダリングを動かしています。
制約も音楽の一部。
当時のゲーム機が同時に鳴らせる音はほんの数音でした。ジャンプやコインの音は、音楽からチャンネルを借りて鳴ることがありました。「作る」の効果音パッドは、そうした音を曲と同じゲーム機の音で、音楽に重ねて鳴らします。目指しているのは、こうした制約を組み込んだ、ゲームや楽器、遊び心のあるサイトで使える小さく再利用しやすいオーディオエンジンです。
再生を押すまで音は鳴りません。ブラウザは音を出すために最初の操作を必要とします。再生中にゲーム機やテンポを変えても、音楽は止まらずに続きます。一時停止すると、次に再生するまでその位置を保ちます。
おなじみの曲で、正確に比較。
マリオ、ゼルダ、ソニックは原作のゲーム機を選んだ状態で開き、ゲームのチップ命令を再生します。独立したリファレンス音源と比較できます。NES の命令は CPU サイクル単位で検証し、メガドライブは元の VGM 記録に従います。他機種への移植や音楽的な編集には、命令から抽出したアレンジを使います。元にない伴奏は追加しません。
試聴ラボ では、バージョンを記録したロスレス音源を音量をそろえて比較できます。再生ボタンを押すまで音は出ません。ソースの検証では音程、リズム、休符を比較し、エンジンの検証ではレジスターの再生や、スーパーファミコンのネイティブ DSP リファレンスを比較します。検証結果も音源と一緒に公開しています。
現在、画面から選べるのは日本のゲーム機 4 機種です。ライブラリと保存済みの楽譜では引き続き C64 を使えます。
あなたのプロジェクトにも。
npm install chipvoice
曲を作って「プロジェクトをダウンロード」を選べば、自分のページで再生できます。方法は 開発者向けドキュメントにあります。ライブラリ、サンプル、忠実度の検証手法、開発予定はすべてこちら: GitHub。各チップの 計測された精度 も公開しています。
クレジットと出典。
作曲は近藤浩治(マリオ、ゼルダ)と中村正人(ソニック)。各アレンジの出典、採譜またはネイティブリファレンス、収録範囲はコンソールの下に表示しています。詳しくはこちら: 楽譜の制作手法と参照記録.
ゲーム機のロゴはサイト内に同梱し、形を変えずに一色で表示しています。ファミコン、ゲームボーイ、スーパーファミコンは Wikimedia Commons から、メガドライブのロゴは次の素材集から取得しています: HVR88’s Monochrome Gaming Logos。各ファイルと出典の一覧: 素材一覧.
ロゴは再現対象のゲーム機を示すものです。商標は任天堂およびセガに帰属し、この独立したプロジェクトは両社とは関係ありません。