Linear ArchiveArchived issues viewer
← Back to list
INS-828

バトルを繰り返すと(?)音量がだんだん下がるバグを修正する

StatusDone
TeamInstansys
Assigneeasuki.uehata@instansys.co.jp
PriorityNo priority
Created2026/06/01 04:32
Completed2026/06/03 09:28
Archived2026/06/11 04:24
Bug

Comments (9)

asuki.uehata@instansys.co.jp2026/06/03 04:00

まだ仮説なので、ログ差し込みながら解析する

月曜日 種々検討した結果、、

以下、2点の問題の共通点、と仮説を見出す

  • バトルのBGMがだんだん小さくなる問題
  • HOME画面にもどったらBGMが静か

上記2点は、いずれも、「ducking の restore 取りこぼし」が生じていることによる問題か?確認する。

asuki.uehata@instansys.co.jp2026/06/03 04:01

既存14箇所の this._dbg(...) 呼び出しは編集せず、_dbg メソッド本体に return; を1行入れて静かにする 。復活はその1行を消すだけ。

編集案

sound.ts

  1. 既存 _dbg を一時無効化 — 1行追加するだけ
  2. 新ヘルパー _dbgVol を追加 — [INS-831 VOL] プレフィックス
  3. setBGMVolume 入口にログ追加 — 引数, 前値, stack

Battle.tsx

  1. ducking 開始(line 343-348): originalBgmVolumeconsole.log で出力
  2. restore scheduleTimeout 登録時: 登録時刻と duration をログ
  3. restore scheduleTimeout 発火時(line 350): 発火時の _bgmVolume をログ
  4. Battle unmount cleanup(line 266-273): キャンセルした timeout 数をログ

ーーー

ーーー

asuki.uehata@instansys.co.jp2026/06/03 04:04

編集まとめ

ファイル変更内容
sound.ts_DBG_FLOW_ENABLED = false で既存 Flow ログを一括 OFF(復活はこの行を true に)
sound.ts_dbgVol ヘルパー([INS-831 VOL] プレフィックス)
sound.tssetBGMVolume 入口で _dbgVol 呼び出し
Battle.tsxducking 開始ログ
Battle.tsxrestore scheduleTimeout 登録ログ
Battle.tsxrestore scheduleTimeout 発火ログ
Battle.tsxBattle unmount cancel ログ
asuki.uehata@instansys.co.jp2026/06/03 04:04

ログ採取

[Log] [INS-831 VOL] BATTLE duck – {originalBgmVolume: 0.5, duckTo: 0.15} (index-CaeLuZPg.js, line 16)
[Log] [INS-831 VOL] setBGMVolume enter – {bgmVol: 0.5, bgmBase: 0.5, final: 0.25, …} (index-CaeLuZPg.js, line 16)
{bgmVol: 0.5, bgmBase: 0.5, final: 0.25, instVol: 0.25, curAlias: "sounds/bgm/battle01.m4a", …}Object
[Log] [INS-831 VOL] BATTLE restore SCHEDULED – {durationMs: 7804.875, willRestoreTo: 0.5} (index-CaeLuZPg.js, line 16)
[Log] native FirebaseAuthentication.getIdToken (#89537897) (user-script:2, line 344)
[Log] {callbackId: "89537897", pluginId: "FirebaseAuthentication", methodName: "getIdToken", options: {}}ObjectcallbackId: "89537897"methodName: "getIdToken"options: {}ObjectpluginId: "FirebaseAuthentication"type: "message"Objectプロトタイプ (user-script:2, line 345)
[Log] result FirebaseAuthentication.getIdToken (#89537897) (user-script:2, line 324)
[Log] {token: "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg1NGFhNGMyM2VkZTdiOG…B7MpbnuiIHIlgNHl_jZoR5qoFEx_xnwB3ut_g3-uvao82lnVA"}Objecttoken: "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg1NGFhNGMyM2VkZTdiOGNhODc1OWZiMDZlNmExZDU4OTI0MjVkMDYiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoi5a6J6aCI6LydIOS4iueVkSIsI…"Objectプロトタイプ (user-script:2, line 329)
[Log] native CapacitorHttp.request (#89537898) (user-script:2, line 344)
[Log] {callbackId: "89537898", pluginId: "CapacitorHttp", methodName: "request", options: Object}ObjectcallbackId: "89537898"methodName: "request"options: {method: "POST", url: "https://ultemist-api-staging.instansys-inc.workers.dev/trpc/mainQuest.completeStage?batch=1", headers: Object, data: Object}ObjectpluginId: "CapacitorHttp"type: "message"Objectプロトタイプ (user-script:2, line 345)
[Log] result CapacitorHttp.request (#89537898) (user-script:2, line 324)
[Log] {headers: Object, data: Array, url: "https://ultemist-api-staging.instansys-inc.workers.dev/trpc/mainQuest.completeStage?batch=1", status: 200}Objectdata: [Object]Array (1)headers: {server-timing: "cfExtPri", x-app-update-required: "true", alt-svc: "h3=\":443\"; ma=86400", priority: "u=3,i=?0", access-control-allow-headers: "", …}Objectstatus: 200url: "https://ultemist-api-staging.instansys-inc.workers.dev/trpc/mainQuest.completeStage?batch=1"Objectプロトタイプ (user-script:2, line 329)
[Log] [INS-831 VOL] BATTLE restore FIRED – {restoreTo: 0.5, currentBgmVolume: 0.15} (index-CaeLuZPg.js, line 16)
[Log] [INS-831 VOL] setBGMVolume enter – {bgmVol: 0.15, bgmBase: 0.5, final: 0.075, …} (index-CaeLuZPg.js, line 16)
{bgmVol: 0.15, bgmBase: 0.5, final: 0.075, instVol: 0.075, curAlias: "sounds/bgm/result_win.m4a", …}Object
asuki.uehata@instansys.co.jp2026/06/03 04:05

(発見)

  • clearSoundDurationMs = 7805ms ← かなり長い(battle_clear.mp3 の実長)
  • 一方、Battle → Result UI 遷移は約 3〜5秒(transitionAtMs = slowEndAtMs + 3000)
  • 遷移 〜 restore発火 の差: 約 3〜5秒の余裕

ここがクリティカル。今回ユーザーが Result UI を 「3秒以上眺めてから」 次へ進んだので restore が間に合った。

もし Result の「次へ」を 3秒以内に押す と:

  • Battle が unmount → pendingTimeoutsRef の全 timeout が clearTimeout
  • restore timer がキャンセル
  • _bgmVolume が 0.15 のまま残る
  • 次のホーム/章選択/バトルで全 BGM が 0.075 (= 0.15 × 0.5) 相当の小音量
asuki.uehata@instansys.co.jp2026/06/03 04:05

そこで、意図的に「Result 画面で次へを爆速タップ」 すると仮説確定するか?

asuki.uehata@instansys.co.jp2026/06/03 04:06
  1. バトルクリア
  2. Result UI 出現と同時に 即座に次へタップ(2秒以内)
  3. ホームに戻る
  4. [INS-831 VOL] BATTLE unmount cancelTimeoutsBATTLE restore FIRED より に出る → 仮説確定
  5. ホーム着いた後の _bgmVolume が縮んだままか確認
asuki.uehata@instansys.co.jp2026/06/03 04:21

バトル中からのログになってしまいましたが、バトル中→クリア → skip駆使して 速攻で ステージ選択画面へ → BGM Volume ダウン問題再現。

[Log] [INS-831 VOL] BATTLE duck – {originalBgmVolume: 0.5, duckTo: 0.15} (index-CaeLuZPg.js, line 16)
[Log] [INS-831 VOL] setBGMVolume enter – {bgmVol: 0.5, bgmBase: 0.5, final: 0.25, …} (index-CaeLuZPg.js, line 16)
{bgmVol: 0.5, bgmBase: 0.5, final: 0.25, instVol: 0.25, curAlias: "sounds/bgm/battle01.m4a", …}Object
[Log] [INS-831 VOL] BATTLE restore SCHEDULED – {durationMs: 7804.875, willRestoreTo: 0.5} (index-CaeLuZPg.js, line 16)
[Log] native FirebaseAuthentication.getIdToken (#60762035) (user-script:2, line 344)
[Log] {callbackId: "60762035", pluginId: "FirebaseAuthentication", methodName: "getIdToken", options: {}}ObjectcallbackId: "60762035"methodName: "getIdToken"options: {}ObjectpluginId: "FirebaseAuthentication"type: "message"Objectプロトタイプ (user-script:2, line 345)
[Log] result FirebaseAuthentication.getIdToken (#60762035) (user-script:2, line 324)
[Log] {token: "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg1NGFhNGMyM2VkZTdiOG…B7MpbnuiIHIlgNHl_jZoR5qoFEx_xnwB3ut_g3-uvao82lnVA"}Objecttoken: "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg1NGFhNGMyM2VkZTdiOGNhODc1OWZiMDZlNmExZDU4OTI0MjVkMDYiLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoi5a6J6aCI6LydIOS4iueVkSIsI…"Objectプロトタイプ (user-script:2, line 329)
[Log] native CapacitorHttp.request (#60762036) (user-script:2, line 344)
[Log] {callbackId: "60762036", pluginId: "CapacitorHttp", methodName: "request", options: Object}ObjectcallbackId: "60762036"methodName: "request"options: {method: "POST", url: "https://ultemist-api-staging.instansys-inc.workers.dev/trpc/mainQuest.completeStage?batch=1", headers: Object, data: Object}ObjectpluginId: "CapacitorHttp"type: "message"Objectプロトタイプ (user-script:2, line 345)
[Log] result CapacitorHttp.request (#60762036) (user-script:2, line 324)
[Log] {url: "https://ultemist-api-staging.instansys-inc.workers.dev/trpc/mainQuest.completeStage?batch=1", status: 200, headers: Object, data: Array}Objectdata: [Object]Array (1)headers: {access-control-expose-headers: "X-App-Version", vary: "Origin", access-control-allow-methods: "GET,HEAD,POST,OPTIONS", content-type: "application/json", x-app-version: "dev", …}Objectstatus: 200url: "https://ultemist-api-staging.instansys-inc.workers.dev/trpc/mainQuest.completeStage?batch=1"Objectプロトタイプ (user-script:2, line 329)
[Log] [INS-831 VOL] BATTLE restore FIRED – {restoreTo: 0.5, currentBgmVolume: 0.15} (index-CaeLuZPg.js, line 16)
[Log] [INS-831 VOL] setBGMVolume enter – {bgmVol: 0.15, bgmBase: 0.5, final: 0.075, …} (index-CaeLuZPg.js, line 16)
{bgmVol: 0.15, bgmBase: 0.5, final: 0.075, instVol: 0.075, curAlias: "sounds/bgm/result_win.m4a", …}Object
[Log] [preload] unloadBundle done: "battle-prologue-normal-battle-2" (released 66 images, 48 sounds) (index-CaeLuZPg.js, line 16)
[Log] [preload] unloadBundle done: "stage-result" (released 0 images, 2 sounds) (index-CaeLuZPg.js, line 16)
asuki.uehata@instansys.co.jp2026/06/03 05:26

INS-828 INS-831 この2つの問題は、それぞれ、Fade関連の問題で根本共通点があるかもしれないということで解析を進めたが、、共通点は見出せなかった。

それか、見ているVolume が 複数あるがそのいずれでもないか。 _bgmVolume _bgmBaseVolume _bgmFinalVolume() instance.volume per-sound volumeAll compressor reduction filters

FinalVolume あたり注目か