Skip to content

About

Morse Trainulator: 純前端互動式摩斯電報模擬與訓練 (Simulator & Trainer)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

📻 摩斯訓練儀 (Morse Trainulator)

License: CC BY-NC-SA 4.0 Platform Audio Tests Offline

Morse Trainulator(Trainer 訓練器 + Simulator 模擬器)
純前端、零依賴的摩斯密碼電報模擬器與練習工具。
支援直鍵、雙撥片夾發 (Iambic Mode A/B) 與半自動震報鍵 (Bug Key),協助練習者循序漸進建立打鍵與聽碼手感。


🌐 線上直接體驗 (Live Demo)

本專案為純靜態架構,可直接於 GitHub Pages 線上免安裝遊玩:
👉 線上體驗 Demo 連結

或者下載原始碼後,直接在瀏覽器雙擊點開 index.html 即可 100% 離線運行!


🌟 核心特色功能 (Key Features)

1. 🎛️ PCB 向量電路板二元決策樹 (Binary Decision Tree)

  • 電路板視覺風格:高對比黑金工控面板,焊盤與走線路徑清晰。
  • 二元樹尋路:由頂部天線出發,劃 Dah (—) 向左分岔、點 Dit (·) 向右分岔,高亮當前字元與走線路徑。
  • 支援 26 字母、0~9 數字及更正符號:底部數字晶片點亮,完整覆蓋基礎字元。

2. ⚡ 三種電鍵裝置模擬 (Three Keyer Modes)

  • 🔘 直鍵模式 (Straight Key):手動按鍵練習,支援鍵盤、滑鼠點擊與觸控。
  • 🎛️ 雙撥片電鍵 (Iambic Paddle Keyer):
    • 實作 Curtis 8044 夾發邏輯。
    • 點劃記憶 (Element Memory):發報中拍擊另一撥片自動排入下一音元。
    • Mode B(自動補音) 與 Mode A(放開即停) 自由切換。
    • 左右撥片互換:支援反轉為左劃 Dah / 右點 Dit,適配左手或個人習慣。
  • 📻 半自動機械震報鍵 (Bug Key / Vibroplex):
    • 點 Dit 撥片:自動連發。
    • 劃 Dah 撥片:手動控制長音長度。

3. 🎯 三大練習與考核模式

  • ⚡ 自由發報 (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% 重置計時。

4. 📻 聲學與儀表

  • 法恩斯沃斯節奏 (Farnsworth Timing):字元維持設定速度,僅拉長字元與單字間隔。
  • 電台背景雜音 QRN:生成粉紅雜訊,模擬短波接收機大氣雜音環境。
  • 發報與間隔儀表:
    • 即時 WPM 速度顯示:遵循國際 PARIS 標準(50 單元/詞),支援單音瞬時測速與滑動滾動平均 WPM 計算,即時反饋手鍵與撥片敲擊速度。
    • $0 \sim 3T$:點劃接續區
    • $3T \sim 7T$:字元已結算區
    • $\ge 7T$:單字間隔區(自動插入空格)

5. 🖥️ 佈局與設定保存

  • 雙欄專注 vs 三欄工作台 一鍵切換。
  • 設定自動保存:電鍵模式、雙撥片設定、參數與鍵位,重新載入自動復原。

⌨️ 預設鍵盤快捷鍵 (Keybindings)

功能 預設按鍵 (standard) 盲打模式 (homerow) 說明
直鍵發報 K K 按住發報、放開結算
短音撥片 (Dit) [ 或 , F 單擊 Dit,按住連發
長音撥片 (Dah) ] 或 . J 單擊 Dah,按住連發
重新開始練習 R R 重設當前題目或計時
闖關下一題 / 開始 Enter 或 N Enter 或 N 科赫闖關免動滑鼠純鍵盤流
緊急中斷測試 Esc Esc 立即停止進行中的科赫考核

💡 自訂按鍵:在右側面板的「自訂鍵位」區域,點擊按鍵按鈕後按下鍵盤上的任意鍵,即可即時錄製為您專屬的發報鍵!


🚀 快速上手 (Quick Start)

方式 1:本機離線直接點開(推薦)

本專案為純原生前端開發,不需要 Node.js、不需要 Webpack、不需要任何伺服器:

  1. 下載或 Clone 本專案。
  2. 雙擊以瀏覽器開啟 index.html(或單檔案版 prototype_morse_card.html)。
  3. 即可直接開始發報練習!

方式 2:使用靜態伺服器

# 使用 npx 快速預覽
npx serve .

# 或使用 Python 內建伺服器
python -m http.server 8000

方式 3:執行自動化單元測試

專案內建 23 套完整的單元測試:

npm test
# 或
node test/run-all.js

🌐 如何啟用 GitHub Pages 免費線上展示

  1. 將本專案推送到您的 GitHub 倉庫(例如 morse-trainulator)。
  2. 在 GitHub 倉庫頁面,點選上方 Settings(設定)。
  3. 在左側選單點擊 Pages。
  4. 在 Build and deployment 下方的 Branch:
    • 選擇 main(或 master)。
    • 資料夾選擇 /(root)。
    • 點擊 Save(儲存)。
  5. 等待 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                # 專案詳細說明文件

📜 開源授權與非商業聲明 (License)

本專案採用 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 授權免費開源分享。

📻 致謝與技術標準 (Credits)

  • 摩斯電碼國際標準:依據 ITU-R M.1677-1 國際電信聯盟規範。
  • 報務訓練理論:遵循 Ludwig Koch (1936) 心理物理學闖關法與 ARRL 法恩斯沃斯 (Farnsworth) 節奏間隔規範。
  • 雙撥片電鍵邏輯:致敬經典 Curtis 8044 / Winkeyer 狀態機演算法。
  • 機械震報鍵原理:致敬 Horace G. Martin 於 1904 年發明的 Vibroplex 半自動電鍵。

About

Morse Trainulator: 純前端互動式摩斯電報模擬與訓練 (Simulator & Trainer)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages