Linear ArchiveArchived issues viewer
← Back to list
INS-795

タイトル画面 消音モードでもBGM、ボイスが再生される

StatusDone
TeamInstansys
Assigneeasuki.uehata@instansys.co.jp
PriorityMedium
Created2026/05/18 05:17
Completed2026/05/19 06:09
Archived2026/05/27 04:17

Description

確認した機種

  • iPhone 12 mini iOS26.4.2

バージョン

https://ultemist-alpha-guide.vercel.app/

こちらから開始したtest flight

v0.1.1-284

Comments (9)

asuki.uehata@instansys.co.jp2026/05/18 05:57

タイトル画面以外でも、同様の問題を確認しました。

また、本問題はコミット番号 9ba731c4 で、生じた問題である可能性が高そう。

修正前 実機 確認します

asuki.uehata@instansys.co.jp2026/05/18 07:01

コミット 9ba731c4 問題点

スリープ復帰修正の本体(_recreateAudioContext)自体は問題ない。補助 hack として追加した _configureAudioSession() が想定外の副作用を持っていた。


具体的にまずかった点

navigator.audioSession.type = "playback" を設定したこと

  • iOS 内部でこれは AVAudioSession のカテゴリを .playback(音楽アプリ相当)に切り替える
  • .playback カテゴリはハードウェアのマナーモードスイッチを無視する仕様
  • その結果、ゲームが Spotify や Music.app と同じ扱いになり、マナーモードでも音が鳴り続けるようになった

なぜ見落としやすかったか

コード内のコメントには「これだけで完全に治るわけではないが、WebKit に継続再生したいと伝えるシグナルになる」と書いてあり、あくまで軽い補助として追加された。スリープ復帰という別の問題を解決しようとした副産物として、マナーモードという全く別の挙動が壊れた。


一旦、 _configureAudioSession() を削除して、根本解決の糸口を模索します。

asuki.uehata@instansys.co.jp2026/05/18 07:02

古いバージョンでは生じていなかった本問題、最新develop 実機 でも 現象を問題再現しました。

asuki.uehata@instansys.co.jp2026/05/18 08:11

コミット番号9ba731c4 でまずかった点は3つか?

変更問題
_configureAudioSession().playback カテゴリ宣言でマナーモード無視(削除済み)
_kickAudioSession()new Audio().play() が同様にカテゴリを .playback に変える
_recreateAudioContextImpl()BGM再起動時の音量処理が不完全
asuki.uehata@instansys.co.jp2026/05/18 08:31

マナーモード問題

根本原因は AppDelegate.swift.playback カテゴリです。これはコミット 9ba731c4 より前から存在 か? .playback はマナーモードスイッチを無視する仕様

コミット番号9ba731c4 で追加された _configureAudioSession()(削除済み)と _kickAudioSession()new Audio().play())が、これをさらに積極的に再アサートするようになったため、症状が顕在化・悪化した

スリープ復帰後の無音問題

コミット 2b372240(revert)で interruptionNotification 購読が消えたことで、ネイティブ層での割り込み復帰処理がなくなったか?9ba731c4 はその穴をJS側のハックで埋めようとしたが、副作用だらけになったか?

asuki.uehata@instansys.co.jp2026/05/18 08:40

現状の全体像

コミット前後の AppDelegate の差分で判明したこと

コミット前コミット後(現在)
AVAudioSession カテゴリ.playback + .mixWithOthers.playback + .mixWithOthers(変わらず)
interruptionNotification 購読あり → 割り込み終了時に setActive(true)なし(別コミット 2b372240 で消された)
applicationDidBecomeActiveconfigureAudioSession() コメントアウト何もしない(コミット後に戻された)

.playback の問題はいずれにしても、直そう

asuki.uehata@instansys.co.jp2026/05/18 08:42

修正プラン

Step 1:AppDelegate.swift — カテゴリを .ambient に変更 + interruption 購読を復活

// .playback → .ambient に変更(マナーモード尊重)

try? AVAudioSession.sharedInstance().setCategory(.ambient, options: [.mixWithOthers])

// interruption 購読を復活(2b372240 で消えた分を戻す)

NotificationCenter.default.addObserver(

self,

selector: #selector(handleAudioSessionInterruption),

name: AVAudioSession.interruptionNotification,

object: AVAudioSession.sharedInstance()

)

asuki.uehata@instansys.co.jp2026/05/18 08:42

Step 2:sound.ts_kickAudioSession() を削除

new Audio().play() がネイティブ側で AVAudioSession カテゴリを .playback に引き戻すリスクがあるため削除する予定。

new Audio() は、やめてください。 soundマネージャー経由で音をならすようにしてください。

Step 3:sound.ts_recreateAudioContextImpl() の BGM 音量を修正

BGM 再起動時の音量が上昇する箇所を特定・修正する方向

Step 4:実機確認

  • マナーモード消音
  • スリープ復帰後の BGM 再生
  • 「ぷーん」音の有無
  • BGM 音量が正常か

asuki.uehata@instansys.co.jp2026/05/18 09:07
  1. コミット番号 9147e660 (05-06) 時点 ユーザー最後の修正 → setCategory なし → マナーモード ✅ 良好だった。
  2. コミット番号 c7b95eed (05-16) "イベントとオーディオの調整" → .playback 追加 → マナーモード ❌
  3. コミット番号 9ba731c4(05-17) "iOSスリープ復帰修正" → _kickAudio, _configureAudioSession 追加で悪化
  4. コミット番号 c7b95eed "イベントとオーディオの調整"(2026-05-16, shirakawayohane) このコミットで AVAudioSession.setCategory(.playback, ...) が新規追加されたことが根本原因か。