ミニゲーム: 電子楽器スタジオ

概要

電子鍵盤を自由に演奏し、押した音ごとにEXPを獲得できるトイ系ミニゲームです。4種類の音色を切り替えられ、マウス/タッチ操作とキーボード演奏の両方に対応しています。【F:games/electro_instrument.js†L170-L349】【F:games/electro_instrument.js†L584-L598】

画面構成

ヘッダーブロック

タイトル行の右側に音色セレクター、マスターボリューム(0〜100%)、セッションEXPメーターが並びます。難易度やローカライズに応じてラベルが更新される設計です。【F:games/electro_instrument.js†L185-L349】

鍵盤セクション

白鍵は幅64px・黒鍵は幅44pxで配置され、押下中はハイライトされます。黒鍵は対応する白鍵の間に絶対配置され、押すと対応音の再生・ハイライト・履歴更新が行われます。【F:games/electro_instrument.js†L233-L552】【F:games/electro_instrument.js†L374-L388】

インフォメーションパネル

説明文と白鍵/黒鍵の凡例が表示され、右下には最新10音のタグ一覧が並びます。演奏履歴が空の場合はプレースホルダーが表示されます。【F:games/electro_instrument.js†L248-L349】

操作方法

マウス/タッチ操作

キーボード演奏

ブラウザフォーカスが入力欄に無い状態でキーを押すと音が鳴り、キーを離すと減衰が始まります。長押しの連打防止、入力欄への入力保護も実装されています。【F:games/electro_instrument.js†L501-L520】

ノート対応キーノート対応キー
C4AC5K
C#4WC#5O
D4SD5L
D#4ED#5P
E4DE5;
F4FF5'
F#4TF#5]
G4GG5Z
G#4YG#5X
A4HA5C
A#4UA#5V
B4JB5B

※対応キーは Shift なしの英字入力を想定しています。【F:games/electro_instrument.js†L59-L88】

EXPと難易度

難易度設定によって音1回あたりの獲得EXPが変動します。EASYは0.6、NORMALは0.9、HARDは1.2ポイントが加算され、合計値はセッションEXPとして小数1桁表示されます。外部のXPシステムに渡すためのフックも用意されています。【F:games/electro_instrument.js†L153-L395】

最新10音を超えると古い音から自動的に削除されるため、EXPの伸びと演奏履歴が連動して確認できます。【F:games/electro_instrument.js†L381-L388】

音源エンジン

各音色は複数オシレーターとエンベロープ、任意のビブラートで構成されています。スタジオピアノ/シンセパッド/エレクトリックオルガン/デジタルストリングスの4種類から選択でき、セレクター変更時に使用中の楽器定義が切り替わります。【F:games/electro_instrument.js†L90-L139】【F:games/electro_instrument.js†L430-L495】【F:games/electro_instrument.js†L584-L586】

音の発音時にはアタック→ディケイ→サステインの包絡制御、ビブラートの遅延スタート、キーアップ時のリリース減衰とオシレーター停止処理が行われます。【F:games/electro_instrument.js†L430-L488】【F:games/electro_instrument.js†L398-L428】

セッション管理

ゲーム開始時にキーボードリスナーが登録され、停止・破棄時にはリスナーやアクティブな発音が解除されます。音声リソースは明示的にクローズされるため、他ミニゲームへの切り替えでもリソースリークを起こしません。【F:games/electro_instrument.js†L600-L641】

ミニゲームはID electro_instrument として登録され、カテゴリ「トイ」に分類されます。スタンドアロンでもミニゲームAPIからでも呼び出せる構造です。【F:games/electro_instrument.js†L644-L656】