// // RemoteAudioHandler.swift // ylgamehall // // H5 → Native handler stub:prepareaudio / mediaTypeAudio // 契约:docs/H5-Native-Contract.md §3.1 [4][5] + §3.2 [7][8][9] // // Phase 3.A 阶段为 stub(仅 cb 维持契约,让 H5 启动不报 "no handler"); // Phase 3.B AMR 转码 + Phase 3.C 录音上传 + Phase 3.D mediaTypeAudio 真实播放 // 完整接入后升级为真实现。 // // 按 CLAUDE.md 原则 A 第一准则:H5 调啥就得有人接,即使没真实业务也要注册。 // import Foundation public enum RemoteAudioHandler { public static func register(on bridge: any BridgeProtocol) { // 【4】prepareaudio — 启动麦克风录音 // 入参忽略;cb: "Response from prepareaudio" // 完整实现(Phase 3.C):权限检查 + AVAudioRecorder + WAV→AMR + 七牛上传 + // 反向 callback getaudiourl({audiourl, time}) + 子游戏额外 recordSuccess // stub 仅 cb 维持契约 bridge.register("prepareaudio") { _, callback in callback?(.string("Response from prepareaudio")) } // 【5】mediaTypeAudio — 远程语音回放 // 入参 audiourl: string;user: string // cb: "Response from mediaTypeAudio" // 完整实现(Phase 3.D):voicePlaying 总开关短路 + 下载 AMR + AMR→WAV + // AVAudioPlayer 播放 + 反向 callback gameui_play_voice(user) / // gameui_stop_voice(user) // stub 仅 cb 维持契约(不下载、不播放) bridge.register("mediaTypeAudio") { _, callback in callback?(.string("Response from mediaTypeAudio")) } } }