Local-Voice/scratch/IMPLEMENTATION.md
2025-11-04 22:38:42 +08:00

7.8 KiB
Raw Permalink Blame History

Scratch项目实现指南

开始使用

1. 创建新项目

  1. 打开 Scratch 3.0 (https://scratch.mit.edu 或桌面版)
  2. 创建新项目,命名为 "Scratch语音助手"
  3. 删除默认的猫咪角色

2. 创建角色

主控制角色 (Main Controller)

造型:
- controller.png: 控制面板图标

积木代码:

当绿旗被点击
  隐藏
  初始化变量 :: custom
  广播 [setup v]

当接收到 [setup v]
  显示角色按钮 :: custom
  设置对话状态为 "idle" :: custom

定义 初始化变量
  设置 [当前角色 v] 为 "libai"
  设置 [对话状态 v] 为 "idle"
  设置 [录音状态 v] 为 "stopped"
  删除 [对话历史 v] 的全部项目
  设置 [回复内容 v] 为 ""

李白角色 (Li Bai)

造型:
- libai_normal.png: 正常状态
- libai_speaking.png: 说话状态
- libai_thinking.png: 思考状态

积木代码:

当角色被点击
  广播 [切换到李白 v] 并等待
  切换造型到 [libai_normal v]
  显示回复 "吾乃李白,字太白,号青莲居士。今天有幸与君相会!"

当接收到 [切换到李白 v]
  设置 [当前角色 v] 为 "libai"
  切换造型到 [libai_normal v]
  说 "李白" (2) 秒

猪八戒角色 (Zhu Bajie)

造型:
- zhubajie_normal.png: 正常状态
- zhubajie_speaking.png: 说话状态
- zhubajie_hungry.png: 饥饿状态

积木代码:

当角色被点击
  广播 [切换到猪八戒 v] 并等待
  切换造型到 [zhubajie_normal v]
  显示回复 "嘿嘿,俺老猪来也!有什么好吃的吗?"

当接收到 [切换到猪八戒 v]
  设置 [当前角色 v] 为 "zhubajie"
  切换造型到 [zhubajie_normal v]
  说 "猪八戒" (2) 秒

唐僧角色 (Tang Monk)

造型:
- tangseng_normal.png: 正常状态
- tangseng_speaking.png: 说话状态
- tangseng_praying.png: 念佛状态

积木代码:

当角色被点击
  广播 [切换到唐僧 v] 并等待
  切换造型到 [tangseng_normal v]
  显示回复 "阿弥陀佛,善哉善哉。贫僧唐三藏,有何指教?"

当接收到 [切换到唐僧 v]
  设置 [当前角色 v] 为 "tangseng"
  切换造型到 [tangseng_normal v]
  说 "唐僧" (2) 秒

沙僧角色 (Sha Monk)

造型:
- shaseng_normal.png: 正常状态
- shaseng_speaking.png: 说话状态
- shaseng_carrying.png: 挑担状态

积木代码:

当角色被点击
  广播 [切换到沙僧 v] 并等待
  切换造型到 [shaseng_normal v]
  显示回复 "大师兄说得对。我来扛行李!"

当接收到 [切换到沙僧 v]
  设置 [当前角色 v] 为 "shaseng"
  切换造型到 [shaseng_normal v]
  说 "沙僧" (2) 秒

3. 背景设计

主背景 (Main Background)

创建文本显示区域:
- 标题: "Scratch语音助手"
- 状态显示: "当前角色: [变量]"
- 对话历史显示区域
- 控制按钮区域

4. 核心功能实现

语音处理功能

当接收到 [开始录音 v]
  设置 [录音状态 v] 为 "recording"
  切换造型到 [speaking v]
  侦听语音并等待
  设置 [识别结果 v] 为 (侦听结果)
  设置 [录音状态 v] 为 "processing"
  分析回复 :: custom
  显示回复 :: custom
  设置 [录音状态 v] 为 "stopped"

定义 分析回复
  如果 <(当前角色) = "libai"> 那么
    李白回复 :: custom
  否则
    如果 <(当前角色) = "zhubajie"> 那么
      猪八戒回复 :: custom
    否则
      如果 <(当前角色) = "tangseng"> 那么
        唐僧回复 :: custom
      否则
        如果 <(当前角色) = "shaseng"> 那么
          沙僧回复 :: custom
        否则
          默认回复 :: custom
        结束
      结束
    结束
  结束

角色回复逻辑

李白回复:

定义 李白回复
  如果 <([识别结果 v] 包含 [诗]) 那么
    设置 [回复内容 v] 为 "诗歌乃吾之最爱!李白斗酒诗百篇,长安市上酒家眠。"
  否则
    如果 <([识别结果 v] 包含 [酒]) 那么
      设置 [回复内容 v] 为 "人生得意须尽欢,莫使金樽空对月!来,共饮一杯!"
    否则
      如果 <([识别结果 v] 包含 [朋友]) 那么
        设置 [回复内容 v] 为 "桃花潭水深千尺,不及汪伦送我情。友情珍贵啊!"
      否则
        设置 [回复内容 v] 为 "吾乃李白,今天诗兴大发,想听什么诗?"
      结束
    结束
  结束

猪八戒回复:

定义 猪八戒回复
  如果 <([识别结果 v] 包含 [吃]) 那么
    设置 [回复内容 v] 为 "嘿嘿,说到吃俺老猪就来劲了!有没有包子馒头?"
  否则
    如果 <([识别结果 v] 包含 [睡觉]) 那么
      设置 [回复内容 v] 为 "睡个好觉真舒服!师父说我又偷懒了,嘿嘿。"
    否则
      如果 <([识别结果 v] 包含 [师父]) 那么
        设置 [回复内容 v] 为 "师父真是的,老让俺老猪干活。大师兄呢?"
      否则
        设置 [回复内容 v] 为 "俺老猪饿了,有没有好吃的?"
      结束
    结束
  结束

唐僧回复:

定义 唐僧回复
  如果 <([识别结果 v] 包含 [佛]) 那么
    设置 [回复内容 v] 为 "阿弥陀佛。佛法无边,普度众生。善哉善哉。"
  否则
    如果 <([识别结果 v] 包含 [徒弟]) 那么
      设置 [回复内容 v] 为 "为师有三个徒弟,虽然各有缺点,但都是好心肠。"
    否则
      如果 <([识别结果 v] 包含 [经]) 那么
        设置 [回复内容 v] 为 "真经取来不易,我们要好好研读,弘扬佛法。"
      否则
        设置 [回复内容 v] 为 "阿弥陀佛,施主有何烦心事?"
      结束
    结束
  结束

沙僧回复:

定义 沙僧回复
  如果 <([识别结果 v] 包含 [行李]) 那么
    设置 [回复内容 v] 为 "行李我来扛!大师兄打妖怪,二师兄吃东西,我干活。"
  否则
    如果 <([识别结果 v] 包含 [大师兄]) 那么
      设置 [回复内容 v] 为 "大师兄孙悟空最厉害了!七十二变,火眼金睛!"
    否则
      如果 <([识别结果 v] 包含 [二师兄]) 那么
        设置 [回复内容 v] 为 "二师兄猪八戒又偷懒了,师父让他去化缘。"
      否则
        设置 [回复内容 v] 为 "我在,我来扛行李。"
      结束
    结束
  结束

5. 用户界面元素

录音按钮

当角色被点击
  如果 <(录音状态) = "stopped"> 那么
    广播 [开始录音 v]
  否则
    广播 [停止录音 v]
  结束

清除对话按钮

当角色被点击
  删除 [对话历史 v] 的全部项目
  隐藏所有对话气泡
  说 "对话已清除" (1) 秒

6. 列表和变量设置

变量:

当前角色 (current_character) - 文本
对话状态 (conversation_state) - 文本
录音状态 (recording_state) - 文本
识别结果 (recognition_result) - 文本
回复内容 (response_text) - 文本

列表:

对话历史 (conversation_history) - 文本列表
角色名称 (character_names) - 文本列表
关键词列表 (keywords) - 文本列表

测试建议

1. 基础功能测试

  • 测试角色切换
  • 测试录音功能
  • 测试回复显示

2. 角色特色测试

  • 测试李白的诗词语境
  • 测试猪八戒的吃货特色
  • 测试唐僧的佛语特色
  • 测试沙僧的朴实特色

3. 交互体验测试

  • 测试连续对话
  • 测试切换角色的流畅性
  • 测试错误处理

扩展功能

1. 动画效果

  • 角色说话时的嘴型动画
  • 切换角色时的过渡效果
  • 录音时的视觉反馈

2. 音效系统

  • 角色切换音效
  • 录音开始/结束提示音
  • 错误提示音

3. 更多角色

  • 添加孙悟空角色
  • 添加其他历史人物
  • 添加现代角色

这个实现指南提供了详细的Scratch积木代码结构可以直接在Scratch中实现一个功能完整的语音助手。