ミニゲーム: 電子楽器スタジオ
概要
電子鍵盤を自由に演奏し、押した音ごとにEXPを獲得できるトイ系ミニゲームです。4種類の音色を切り替えられ、マウス/タッチ操作とキーボード演奏の両方に対応しています。【F:games/electro_instrument.js†L170-L349】【F:games/electro_instrument.js†L584-L598】
- 白鍵と黒鍵を備えた2オクターブ相当の鍵盤で、最大10音分の演奏履歴がタグとして表示されます。【F:games/electro_instrument.js†L233-L352】【F:games/electro_instrument.js†L313-L349】
- 演奏するたびにセッションEXPが加算され、XPメーターにリアルタイムで反映されます。【F:games/electro_instrument.js†L218-L230】【F:games/electro_instrument.js†L390-L395】
- Web Audio API を使用しているため、初回の演奏時にオーディオコンテキストを起動します。【F:games/electro_instrument.js†L359-L372】
画面構成
ヘッダーブロック
タイトル行の右側に音色セレクター、マスターボリューム(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†L522-L574】
- 押した指をスライドして鍵盤外へドラッグした場合でも、押下状態のままなら指が離れるタイミングで音が止まります(pointercapture により操作が安定します)。【F:games/electro_instrument.js†L554-L573】
- ボリュームスライダーで全体の出力ゲインをリアルタイムに調整できます。【F:games/electro_instrument.js†L205-L216】【F:games/electro_instrument.js†L589-L592】
キーボード演奏
ブラウザフォーカスが入力欄に無い状態でキーを押すと音が鳴り、キーを離すと減衰が始まります。長押しの連打防止、入力欄への入力保護も実装されています。【F:games/electro_instrument.js†L501-L520】
ノート | 対応キー | ノート | 対応キー |
---|---|---|---|
C4 | A | C5 | K |
C#4 | W | C#5 | O |
D4 | S | D5 | L |
D#4 | E | D#5 | P |
E4 | D | E5 | ; |
F4 | F | F5 | ' |
F#4 | T | F#5 | ] |
G4 | G | G5 | Z |
G#4 | Y | G#5 | X |
A4 | H | A5 | C |
A#4 | U | A#5 | V |
B4 | J | B5 | B |
※対応キーは 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】