音のしくみ

小さなオーケストラ。
すべてコードから。

chipvoice は、懐かしいゲーム機のサウンドチップを再現するオープンソースの JavaScript ライブラリです。このサイトでは、実際に音を鳴らしながら、その機能を体験できます。

楽譜から音へ。

楽譜は音符に、音符はチップへの命令になり、再現したチップが音を生成します。ゲーム機を変えると、同じ曲も違う響きに。全パートプレイヤーでは、各エンジンで生成したロスレス音源を最初に再生します。テンポ・音程・パートの変更や自分の MIDI の音声生成は、今の音楽を止めずにブラウザー内のワーカーで行います。

ファミコンはパルス波とノイズ。ゲームボーイは波形メモリー。メガドライブは FM 音源。スーパーファミコンはサンプル再生、エンベロープ、エコー。各エンジンは実機のルールに従い、スーパーファミコンでは実機と同じように小さなサンプルバンクを使います。

エンジンは TypeScript で書かれ、JavaScript として動作します。「ループを作る」では AudioWorklet でリアルタイムに音を合成し、演奏、効果音、録音、楽譜の編集ができます。リアルタイム演奏も全パートの音声生成も、同じライブラリが支えています。

制約も音楽の一部。

当時のゲーム機で同時に鳴らせる音はごくわずかでした。ジャンプやコインの効果音が、音楽のチャンネルを一時的に使うことも。「ループを作る」の効果音パッドで確かめてみてください。そんな制約を備えた、小さく再利用しやすい音声エンジンを、ゲームや楽器、遊び心のあるウェブサイトに届けるのが目標です。

メロディーやゲーム機を選ぶと演奏が始まります。ブラウザーで音を鳴らすには、この最初の操作が必要です。再生中のゲーム機やテンポの変更は、滑らかに次の音につながります。「一時停止」を押すと、再開するまで再生位置が保持されます。

おなじみの曲で、正確に比較。

マリオ、ゼルダ、ソニックは原作のゲーム機を選んだ状態で開き、ゲームのチップ命令を再生します。独立したリファレンス音源と比較できます。NES の命令は CPU サイクル単位で検証し、メガドライブは元の VGM 記録に従います。他機種への移植や音楽的な編集には、命令から抽出したアレンジを使います。元にない伴奏は追加しません。

試聴ラボ では、バージョンを記録したロスレス音源を音量をそろえて比較できます。再生ボタンを押すまで音は出ません。ソースの検証では音程、リズム、休符を比較し、エンジンの検証ではレジスターの再生や、スーパーファミコンのネイティブ DSP リファレンスを比較します。検証結果も音源と一緒に公開しています。

現在、画面から選べるのは日本のゲーム機 4 機種です。ライブラリと保存済みの楽譜では引き続き C64 を使えます。

あなたのプロジェクトにも。

npm install chipvoice

プレイグラウンドで曲を作り、「コードを見る」を開けば、自分のプロジェクトでその楽譜を使えます。ライブラリ、サンプル、忠実度の検証手法、開発予定はすべてこちら: GitHub.

音で遊ぶ →

クレジットと出典。

作曲は近藤浩治(マリオ、ゼルダ)と中村正人(ソニック)。各アレンジの出典、採譜またはネイティブリファレンス、収録範囲はコンソールの下に表示しています。詳しくはこちら: 楽譜の制作手法と参照記録.

ゲーム機のロゴは Wikimedia Commons から取得し、元の色のまま同梱しています: ファミコン, ゲームボーイ, メガドライブ(日本版)スーパーファミコン。ゲームボーイのロゴは元画像がモノクロです。

ロゴは再現対象のゲーム機を示すものです。商標は任天堂およびセガに帰属し、この独立したプロジェクトは両社とは関係ありません。保存している旧ロゴ集: HVR88’s Monochrome Gaming Logos の出典も記載しています: 素材一覧.