7.8 KiB
7.8 KiB
Scratch项目实现指南
开始使用
1. 创建新项目
- 打开 Scratch 3.0 (https://scratch.mit.edu 或桌面版)
- 创建新项目,命名为 "Scratch语音助手"
- 删除默认的猫咪角色
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中实现一个功能完整的语音助手。