← 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
- 既存
_dbgを一時無効化 — 1行追加するだけ - 新ヘルパー
_dbgVolを追加 —[INS-831 VOL]プレフィックス setBGMVolume入口にログ追加 — 引数, 前値, stack
Battle.tsx
- ducking 開始(line 343-348):
originalBgmVolumeをconsole.logで出力 - restore scheduleTimeout 登録時: 登録時刻と duration をログ
- restore scheduleTimeout 発火時(line 350): 発火時の
_bgmVolumeをログ - 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.ts | setBGMVolume 入口で _dbgVol 呼び出し |
Battle.tsx | ducking 開始ログ |
Battle.tsx | restore scheduleTimeout 登録ログ |
Battle.tsx | restore scheduleTimeout 発火ログ |
Battle.tsx | Battle 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
- バトルクリア
- Result UI 出現と同時に 即座に次へタップ(2秒以内)
- ホームに戻る
[INS-831 VOL] BATTLE unmount cancelTimeoutsがBATTLE restore FIREDより 前 に出る → 仮説確定- ホーム着いた後の
_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)