Linear ArchiveArchived issues viewer
← Back to list
INS-744

強化画面にて、想戦のかけら プラスマイナス連打で、BGM停止する対策

StatusDone
TeamInstansys
Assigneeasuki.uehata@instansys.co.jp
PriorityMedium
Created2026/05/06 04:41
Completed2026/05/08 02:08
Archived2026/05/15 03:55

Description

実機 強化画面 ボタン連打検証

BGMが停止された瞬間以下エラー

AVHapticClient.mm:1335 -[AVHapticClient handleServerConnectionInterruption]: [xpc] Entered (due to connection interruption) for client ID 0x2000cfeCHHapticEngine.mm:646 -[CHHapticEngine finishInit:]_block_invoke: ERROR: Server connection broke with error '操作を完了できませんでした。(com.apple.CoreHapticsエラー-4811)'AVAudioSession_iOS.mm:1493 Creating proxy session failed, session ID = 0x681a6, error = Error Domain=NSOSStatusErrorDomain Code=-50 "Session lookup failed" UserInfo={NSLocalizedDescription=Session lookup failed}AVAudioSession_iOS.mm:1493 Creating proxy session failed, session ID = 0x681a5, error = Error Domain=NSOSStatusErrorDomain Code=-50 "Session lookup failed" UserInfo={NSLocalizedDescription=Session lookup failed}

##以下が対策になるのか?確認した方がよさそう

MemoryItemSelector.tsx の + ボタン(line 93)と - ボタン(line 174)は、どちらも PushButton を使っており、毎タップ soundManager.playSE("se/click.m4a", { system: true }) が呼ばれます。

前回の INS-732 修正(singleInstance: true)で「同時に複数インスタンスが鳴る」問題は解決されましたが、連打ごとに pixi-sound が play → stop → play を繰り返すのは止まっていません。iOS の AudioSession は XPC 経由でハプティクスエンジンとオーディオデコーダを共有しており、この高頻度な AudioContext 操作が:

CHHapticEngine server connection broke → AVAudioSession proxy session lookup failed → BGM 停止

という連鎖を引き起こしています。

提案する修正

SoundManager.playSE()エイリアスごとのスロットル を追加します(apps/client/src/lib/sound.ts:104)。

// クラスフィールドに追加

private _seLastPlayedAt = new Map<string, number>();

private readonly _seThrottleMs = 50; // 同一 SE の最短発火間隔

playSE() 冒頭(_ensureContext の前)に:

const now = Date.now();

if ((now - (this._seLastPlayedAt.get(alias) ?? 0)) < this._seThrottleMs) return;

this._seLastPlayedAt.set(alias, now);

50ms スロットルで最大 20 回/秒に制限されるため、連打の操作感を損なわずに AudioSession への過負荷を防げます。click.m4a 以外の SE(長い SE など)にも適用されますが、50ms は十分短いため体感への影響はほぼありません。

もし SE 種別ごとにスロットル閾値を変えたい場合は、playSE()optionsthrottleMs?: number を追加する方法もあります。

ーーーー

Comments (1)

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

実機にて完璧ではないのものの 一旦、ある程度の改善がみられたので、commit 9e7759f81370d6b999e1c627ca83f0a1fa5664aa にてクローズ。 もしこれよりパフォーマンスを向上した方がいい場合にはあらためて起票する