Linear ArchiveArchived issues viewer
← Back to list
INS-806

Phase 4 修正案検討

StatusDone
TeamInstansys
Assigneeasuki.uehata@instansys.co.jp
PriorityMedium
Created2026/05/22 08:10
Completed2026/05/22 08:13
Archived2026/05/30 03:54

Description

Phase 4**:** setBGMVolume 改修(P5 部分対応)

  • 走行中の fade timer があれば clear(fade の目標音量がユーザー設定と矛盾するので)
  • 現状の _bgmInstance.volume = volume 設定はそのまま

ただしこれは挙動変更を伴う(fade 途中で音量変えると即時反映になる)ので、慎重判断:

  • 案A: setBGMVolume では fade を止めない(最終 _bgmVolume を更新するだけ、fade interval が this._bgmVolume を読みに行く設計に変える)
  • 案B: setBGMVolume で fade を止める(即時反映優先)

Comments (1)

asuki.uehata@instansys.co.jp2026/05/22 08:12

setBGMVolume の実用途は以下の3つだけです。「fade 中に音量を変える」という意図的な設計は存在しません。たまたまタイミングが重なる可能性があるだけです。

setBGMVolume 呼び出し全実態

#呼び出し元目的発火タイミング
1sound-settings.ts:80ユーザーが設定モーダルで BGM 音量スライダーを動かした / mute トグルユーザー操作(任意のタイミング)
2Battle.tsx:382バトルクリア時の ダッキング: CLEAR_SE 再生中 BGM を 30% に下げるバトルクリア演出開始時
3Battle.tsx:386ダッキング解除: 元の音量に戻すCLEAR_SE 再生終了時
4Battle.tsx:499クリア演出スキップ時のダッキング即解除ユーザータップ

各ケースが fade と衝突しうるか?

#crossfade 進行中と重なる現実的確率
1 (設定変更): ただしシーン遷移直後に開いて即操作する可能性ゼロではない
2-4 (ダッキング)ほぼゼロ: バトル開始時の crossfade はとっくに完了している。Battle 内で BGM 切替は起きない

「fade 途中で音量変える」のは設計上想定された挙動ではなく、タイミングが重なった時の偶発的事故

紛らわしさを根絶する設計案

_bgmVolume「ユーザー意図の目標値」 として位置づけ、fade と volume の責務を分離します:

_bgmVolume       : "今の目標音量"(ユーザー設定 or ダッキング値)

setBGMVolume は ここだけ更新する

fadeIn/fadeOut : 「0 ⇄ _bgmVolume の間を ramp する」役割

各 step で _bgmVolume を都度参照(目標値追従)

非fade時の volume: _bgmInstance.volume = _bgmVolume を直接書く

これが達成されると:

  • fade 中に setBGMVolume が来ても → ramp の目標が動的に変わるだけ。衝突しない。
  • ダッキング中に crossfade が来ても → 新 BGM は _bgmVolume (= 0.3) を目標に fadeIn する。これも自然。
  • 「fade を止める / 止めない」の判断自体が不要になる。

副次効果

  • P5 (setBGMVolume race) が構造的に消滅: 「fade と volume の責務が分かれている」ので衝突概念がない
  • ダッキング後に crossfade が完了したとき、新 BGM が duck 状態のまま再生される(自然な挙動)

注意点

  • 現状のダッキングは「_bgmInstance.volume = 0.3 を直接書く」挙動なので、即座に音量が下がる
  • 新設計でも同じ即時性を保つには、fade 中でなければ _bgmInstance.volume = _bgmVolume を即座に反映する処理を入れる(=現状維持)
  • fade 中なら ramp 目標が変わるだけで、聴感上はスムーズに 30% へ収束する → むしろ自然

「fade 中の setBGMVolume」は 意図された機能ではないので、衝突しない設計(責務分離)にするのが筋。Phase 4 の論点A/B のうち、論点A(fade を止めず、fade が _bgmVolume を都度参照) がこの方向に一致するか?

volume の責務分離 を推進していく