2026-03-16 18:02:20 +08:00
2026-03-16 18:02:20 +08:00
2026-03-16 18:02:20 +08:00
2026-03-16 18:02:20 +08:00
2026-03-16 18:02:20 +08:00
2026-03-16 18:02:20 +08:00

第一步:项目初始化与全局数据流设计 (发给 Agent 的 Prompt 1) Role & Context: 你现在是一个资深的 iOS 架构师。我们需要开发一个名为 Airtep Voice 的 iOS POC 应用。这个应用的核心功能是:连接 AirPods实时采集会议或谈话的语音并利用苹果原生框架进行流式转写最后将文本结构化落盘。

任务 1项目初始化与 UI 规范

请创建一个基于 SwiftUI 和 SwiftData 的项目。

在 Info.plist 中添加必要的权限描述NSMicrophoneUsageDescription (用于环境录音) 和 NSSpeechRecognitionUsageDescription (用于实时语音转文字)。

UI 设计规范(极高优先级):在视觉呈现上,请严格遵循极简主义和对称美学,深度参考 Apple 的原生设计原则。所有的图标和界面元素必须采用纯色方案,绝对不要使用渐变色。界面需尽量去除多余的辅助性文字,依靠几何对称和留白来引导用户操作。主界面只需要一个居中的、对称的录音控制按钮(纯色圆形或圆角矩形),以及下方一个平滑展开的滚动文本视图。

任务 2数据架构设计 为了让产生的数据在未来具备良好的“可观测、可对齐、可索引”特性,请使用 SwiftData 定义一个 TranscriptSession 模型。 包含字段:

id: UUID

startTime: Date

endTime: Date?

deviceConnected: String (记录当前使用的音频外设名称)

segments: [TranscriptSegment] (嵌套模型,记录每一句话的 timestamp 和 text便于后续切片和对齐)

请输出初始化的工程结构建议、SwiftData 模型代码以及极简风格的主视图结构。

第二步:核心音频路由与蓝牙设备强制接管 (发给 Agent 的 Prompt 2) 任务 3开发 AVAudioSession 路由管理器 现在我们需要编写底层的音频控制模块 AudioRouteManager.swift。

配置 AVAudioSession设置 category 为 .playAndRecordmode 为 .measurement 或 .spokenAudio。

关键选项:必须包含 .allowBluetooth 和 .allowBluetoothA2DP确保系统能强制从用户的蓝牙耳机AirPods获取音频输入而不是默认的手机麦克风。

编写一个状态监听器,当系统音频路由发生变化(例如用户摘下 AirPods能够实时抛出状态变更UI 需根据这个状态将纯色录音按钮置灰或改变形状。

请提供这个单例管理类的完整 Swift 代码。

第三步:实时语音流式转文字引擎 (发给 Agent 的 Prompt 3) 任务 4开发 SFSpeechRecognizer 流式处理引擎 我们需要实现 SpeechRecognitionManager.swift。

实例化 SFSpeechRecognizer并确保 locale 设置为当前设备语言(默认中文 zh-CN

使用 AVAudioEngine 捕获刚才配置好的音频输入节点的 buffer。

创建 SFSpeechAudioBufferRecognitionRequest将 shouldReportPartialResults 设为 true。

在 installTap 的回调中,将音频流实时喂给识别请求。

结构化处理当转写回调触发时不要只拼接长文本。如果是中间结果partial只更新当前 UI如果是最终结果或者根据静音停顿超过 2 秒作为分句逻辑),将这段话封装为一个 TranscriptSegment 对象,对齐时间戳,并追加到 SwiftData 的当前 Session 中,保证所有数据都是结构化且可索引的。

请输出包含上述逻辑的完整类实现,并确保它是一个 ObservableObject以便 SwiftUI 视图实时绑定数据。

第四步:界面组装与交互联动 (发给 Agent 的 Prompt 4) 任务 5组装 POC 完整流程 结合前面写好的 AudioRouteManager 和 SpeechRecognitionManager以及极简的 SwiftUI 视图,把它们串联起来。

当用户点击屏幕正中央的纯色对称按钮时,请求权限 -> 检查 AirPods 连接状态 -> 启动 AudioEngine -> 开始流式转写。

在按钮下方,实时渲染当前正在说的话。

提供一个手势(如向下轻扫或长按按钮)来停止 Session并将这一整段结构化数据正式持久化到本地。

处理可能出现的异常边界(如未授权、未连接麦克风),用极简的图标震动或纯色状态条进行提示,避免长篇大论的弹窗文字。

请输出整合后的 ContentView.swift 和应用入口文件,确保这份代码丢进 Xcode 就能直接编译运行。

Description
No description provided
Readme 52 KiB
Languages
Swift 100%