Morse Trainulator(Trainer 訓練器 + Simulator 模擬器)
純前端、零依賴的摩斯密碼電報模擬器與練習工具。
支援直鍵、雙撥片夾發 (Iambic Mode A/B) 與半自動震報鍵 (Bug Key),協助練習者循序漸進建立打鍵與聽碼手感。
本專案為純靜態架構,可直接於 GitHub Pages 線上免安裝遊玩:
👉 線上體驗 Demo 連結
或者下載原始碼後,直接在瀏覽器雙擊點開 index.html 即可 100% 離線運行!
- 電路板視覺風格:高對比黑金工控面板,焊盤與走線路徑清晰。
- 二元樹尋路:由頂部天線出發,劃 Dah (—) 向左分岔、點 Dit (·) 向右分岔,高亮當前字元與走線路徑。
- 支援 26 字母、0~9 數字及更正符號:底部數字晶片點亮,完整覆蓋基礎字元。
- 🔘 直鍵模式 (Straight Key):手動按鍵練習,支援鍵盤、滑鼠點擊與觸控。
- 🎛️ 雙撥片電鍵 (Iambic Paddle Keyer):
- 實作 Curtis 8044 夾發邏輯。
- 點劃記憶 (Element Memory):發報中拍擊另一撥片自動排入下一音元。
- Mode B(自動補音) 與 Mode A(放開即停) 自由切換。
- 左右撥片互換:支援反轉為左劃 Dah / 右點 Dit,適配左手或個人習慣。
- 📻 半自動機械震報鍵 (Bug Key / Vibroplex):
- 點 Dit 撥片:自動連發。
- 劃 Dah 撥片:手動控制長音長度。
- ⚡ 自由發報 (Free Mode):隨打隨解碼,內建 5 組引導範例與筆誤更正碼
<HH>(8 連續點音,自動刪除上一字元)。 - 📖 文章模式 (Text Mode):輸入自訂文章或選擇範例短句(
SOS、CQ CQ DE等),支援示範播放、點劃提示、嚴格模式與成績統計。 - 🎯 國際科赫闖關 (Koch Method Drill):
- 35 關階梯式學習(由
K與M開始逐步加入新字元)。 - 防連出保護演算法:避免連續 3 題出現同字元。
- 模式選擇:
- 🟢 基礎練習模式 (Quick Mode):固定字數目標(12 字 / 24 字),自由掌握節奏。
- 🏆 正規考核模式 (Standard Mode):限時滾動考核(60 秒 ~ 300 秒),雙排滾動平滑替換。
- 🔥 極限挑戰模式 (Challenge Mode):限時考核,正確率跌破 90% 重置計時。
- 35 關階梯式學習(由
- 法恩斯沃斯節奏 (Farnsworth Timing):字元維持設定速度,僅拉長字元與單字間隔。
- 電台背景雜音 QRN:生成粉紅雜訊,模擬短波接收機大氣雜音環境。
-
發報與間隔儀表:
- 即時 WPM 速度顯示:遵循國際 PARIS 標準(50 單元/詞),支援單音瞬時測速與滑動滾動平均 WPM 計算,即時反饋手鍵與撥片敲擊速度。
-
$0 \sim 3T$ :點劃接續區 -
$3T \sim 7T$ :字元已結算區 -
$\ge 7T$ :單字間隔區(自動插入空格)
- 雙欄專注 vs 三欄工作台 一鍵切換。
- 設定自動保存:電鍵模式、雙撥片設定、參數與鍵位,重新載入自動復原。
| 功能 | 預設按鍵 (standard) |
盲打模式 (homerow) |
說明 |
|---|---|---|---|
| 直鍵發報 | K |
K |
按住發報、放開結算 |
| 短音撥片 (Dit) | [ 或 , |
F |
單擊 Dit,按住連發 |
| 長音撥片 (Dah) | ] 或 . |
J |
單擊 Dah,按住連發 |
| 重新開始練習 | R |
R |
重設當前題目或計時 |
| 闖關下一題 / 開始 | Enter 或 N |
Enter 或 N |
科赫闖關免動滑鼠純鍵盤流 |
| 緊急中斷測試 | Esc |
Esc |
立即停止進行中的科赫考核 |
💡 自訂按鍵:在右側面板的「自訂鍵位」區域,點擊按鍵按鈕後按下鍵盤上的任意鍵,即可即時錄製為您專屬的發報鍵!
本專案為純原生前端開發,不需要 Node.js、不需要 Webpack、不需要任何伺服器:
- 下載或 Clone 本專案。
- 雙擊以瀏覽器開啟
index.html(或單檔案版prototype_morse_card.html)。 - 即可直接開始發報練習!
# 使用 npx 快速預覽
npx serve .
# 或使用 Python 內建伺服器
python -m http.server 8000專案內建 23 套完整的單元測試:
npm test
# 或
node test/run-all.js- 將本專案推送到您的 GitHub 倉庫(例如
morse-trainulator)。 - 在 GitHub 倉庫頁面,點選上方 Settings(設定)。
- 在左側選單點擊 Pages。
- 在 Build and deployment 下方的 Branch:
- 選擇
main(或master)。 - 資料夾選擇
/(root)。 - 點擊 Save(儲存)。
- 選擇
- 等待 1~2 分鐘,重新整理頁面,頂部即會顯示您的專屬網址:
https://<your-username>.github.io/morse-trainulator/
morse-trainulator/
├── index.html # 現代模組化主入口(支援 GitHub Pages)
├── prototype_morse_card.html # 獨立單檔案發布版(100% 離線攜帶)
├── css/ # 分層樣式表
│ ├── base.css # 基礎變數與重設樣式
│ ├── pcb-card.css # PCB 向量電路板樣式
│ ├── controls.css # 儀表量表與電鍵控制板樣式
│ └── modes.css # 文章模式與科赫闖關專屬樣式
├── js/ # 模組化領域核心
│ ├── core/ # 無 UI 核心領域邏輯
│ │ ├── morse-data.js # 摩斯編碼、樹節點座標、預設值
│ │ ├── morse-engine.js # 發報計時狀態機與二元樹解碼
│ │ ├── morse-audio.js # Web Audio 純正弦波合成器與 QRN 雜訊
│ │ ├── iambic-keyer.js # 雙撥片 Iambic Mode A/B 與震報鍵狀態機
│ │ ├── cw-ribbon.js # 示波波形紙帶 Canvas 渲染
│ │ ├── koch-manager.js # 科赫法關卡生成與防連出演算法
│ │ ├── keybinding-manager.js # 鍵位集路由與即時鍵位錄製
│ │ └── settings-manager.js # localStorage 自動同步與版本遷移
│ ├── ui/ # 介面控制器
│ │ ├── pcb-renderer.js # SVG 導線節點快顯與點亮控制器
│ │ ├── meter-controller.js # 發報時長量表與間隔時間軸
│ │ ├── free-mode.js # 自由練習模式情境引導
│ │ ├── text-mode.js # 文章模式與示範播放
│ │ └── koch-mode.js # 科赫闖關雙排滾動與考核計時
│ └── app.js # 應用程式總調度與開機引導
├── test/ # 自動化單元測試套件
│ ├── run-all.js # 測試總執行器 (24 套測試)
│ └── test_*.js # 各模組獨立斷言測試
├── LICENSE # CC BY-NC-SA 4.0 授權條款
├── package.json # 輕量測試腳本設定
└── README.md # 專案詳細說明文件
本專案採用 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) 授權釋出。
- 允許 (Permissions):
- ✅ 自由分享與傳播:可在任何媒介以任何形式複製、發行本素材。
- ✅ 修改與衍生創作:可修改、轉換或以此為基礎進行非商業創作。
- 條件與限制 (Conditions & Restrictions):
- 👤 姓名標示 (Attribution):您必須標註原作者資訊與本專案來源連結。
- 🚫 非商業性 (Non-Commercial):嚴格禁止任何形式的商業營利用途(包括但不限於付費銷售、包裝轉賣、付費課程專有素材、嵌入營利性廣告等)。
- 🔄 相同方式分享 (Share-Alike):若您修改或衍生本專案,衍生作品必須採用完全相同的
CC BY-NC-SA 4.0授權免費開源分享。
- 摩斯電碼國際標準:依據 ITU-R M.1677-1 國際電信聯盟規範。
- 報務訓練理論:遵循 Ludwig Koch (1936) 心理物理學闖關法與 ARRL 法恩斯沃斯 (Farnsworth) 節奏間隔規範。
- 雙撥片電鍵邏輯:致敬經典 Curtis 8044 / Winkeyer 狀態機演算法。
- 機械震報鍵原理:致敬 Horace G. Martin 於 1904 年發明的 Vibroplex 半自動電鍵。