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

313 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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