spec.md 2.7 KB

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/mp4audio/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

  • WHEN 录音停止
  • THEN 录音计时器归零

Requirement: Resource cleanup

录音相关的资源 SHALL 在组件卸载时完全释放。

Scenario: Component unmount during recording

  • WHEN 用户在录音过程中离开页面(组件 unmount)
  • THEN 系统自动停止 MediaRecorder、释放 MediaStream tracks、清除定时器