ADDED Requirements
Requirement: Audio recording lifecycle
录音 composable SHALL 管理完整的录音生命周期:请求权限 → 开始录音 → 录音中 → 停止录音 → 返回音频 Blob。
Scenario: Successful recording
- WHEN 用户点击录音按钮且浏览器麦克风权限已授予
- THEN MediaRecorder 开始采集音频,
isRecording 状态变为 true,录音计时器开始计时
Scenario: Stop recording
- WHEN 用户点击停止录音按钮
- THEN MediaRecorder 停止采集,收集到的 audio chunks 合并为 Blob,通过回调或返回值提供给调用方
Requirement: Microphone permission handling
系统 SHALL 在首次录音时请求麦克风权限,并优雅处理权限拒绝场景。
Scenario: Permission granted
- WHEN 用户首次点击录音按钮且浏览器弹出权限请求
- THEN 用户授权后开始录音,
permissionState 变为 granted
Scenario: Permission denied
- WHEN 用户拒绝麦克风权限
- THEN
permissionState 变为 denied,UI 显示引导提示(如何在浏览器设置中开启权限),录音按钮保持可点击但点击后显示提示
Scenario: Permission previously granted
- WHEN 用户之前已授权且再次进入页面
- THEN 直接开始录音,无权限弹窗
Requirement: Audio format compatibility
录音 composable SHALL 自动选择浏览器支持的最佳音频格式。
Scenario: Browser supports webm
- WHEN
MediaRecorder.isTypeSupported('audio/webm;codecs=opus') 返回 true
- THEN 使用
audio/webm 格式录制
Scenario: Browser does not support webm (Safari)
- WHEN webm 不被支持
- THEN fallback 到
audio/mp4 或 audio/wav
Requirement: Silence detection
录音过程中系统 SHALL 检测长时间沉默并给出提示。
Scenario: Silence detected
- WHEN 录音开始后连续 5 秒未检测到有效语音输入
- THEN 显示沉默提示浮层,包含鼓励性的句子提示
Scenario: User resumes speaking
- WHEN 沉默提示显示后用户开始说话
- THEN 沉默提示自动消失
Requirement: Recording timer
录音过程中 SHALL 显示实时录音时长。
Scenario: Timer counting
- WHEN 录音正在进行
- THEN 状态栏显示已录音秒数,每秒更新一次
Scenario: Timer reset
Requirement: Resource cleanup
录音相关的资源 SHALL 在组件卸载时完全释放。
Scenario: Component unmount during recording
- WHEN 用户在录音过程中离开页面(组件 unmount)
- THEN 系统自动停止 MediaRecorder、释放 MediaStream tracks、清除定时器