# 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中实现一个功能完整的语音助手。