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