CW Runner 是一款用于等幅电报(CW, Continuous Wave)模拟练习的微信小程序。用户可通过虚拟自动电键(Paddle)输入莫尔斯电码,上传至云端与他人进行异步练习。
- 虚拟自动键(Paddle):双桨设计,左桨发"点"(dit),右桨发"划"(dah),按住连续发送,松手即停,内置 iambic 模式。
- 伪联网异步练习:用户上传 CW 电码文本至云端,他人可随时点击播放,本地 Web Audio 合成 600Hz 正弦波。
- 完全匿名:云端列表仅展示 CW 文本项,不展示发送者身份,避免 UGC 内容审核风险。
- 实时时序显示:屏幕上半区实时显示当前输入的原始时序文本。
- 前端:微信小程序原生框架
- 音频:Web Audio API(本地合成 600Hz 正弦波)
- 后端:微信云开发(云数据库 + 云函数)
# 使用微信开发者工具打开本项目
# 填入你的小程序 AppID,开启云开发.
├── miniprogram/ # 小程序前端代码
│ ├── pages/
│ │ ├── index/ # 首页(电键输入 + 云端列表)
│ │ └── play/ # 播放页(可选,或集成在首页)
│ ├── utils/
│ │ ├── cw.js # CW 时序解析与音频合成
│ │ └── cloud.js # 云开发封装
│ └── app.js
├── cloudfunctions/ # 云函数
│ ├── uploadCW/ # 上传 CW 文本
│ └── getCWList/ # 获取云端列表
├── docs/
│ └── DESIGN.md # 详细设计文档
└── README.md
| 操作 | 行为 | 时序记录 |
|---|---|---|
| 点下左桨 | 发点,若按住则自动连续发点 | 追加 . |
| 点下右桨 | 发划,若按住则自动连续发划 | 追加 - |
| 左右同时按 | 优先后发(iambic 模式) | 按实际输出记录 |
| 松手后 > 3 点长 | 字母间隔 | 追加 / |
| 松手后 > 7 点长 | 单词间隔 | 追加 | |
- 点长 = 60ms
- 划长 = 180ms(3×点长)
- 点划间隔 = 60ms
- 字母间隔 = 180ms(3×点长)
- 单词间隔 = 420ms(7×点长)
遍历 code 字符串:
.→ 播放 60ms 音 + 60ms 静音-→ 播放 180ms 音 + 60ms 静音/→ 追加 120ms 静音(总间隔 180ms)\|→ 追加 360ms 静音(总间隔 420ms)
{
"code": "-.-./--.-",
"wpm": 20,
"timestamp": 1713862800,
"sender": "openid_xxx"
}MIT