Formosan AI ASR, translation, and TTS API test lab
# Formosan AI 三項 API 實驗室
純前端(HTML/CSS/JS,零框架、零建置、零相依)的實驗工具,用來實際打
Formosan AI 的三項服務:
| # | 工具 | 做什麼 | 用到的 action |
|---|---|---|---|
| 01 | **族語語音辨識** | 選族語與語別,直接錄音或上傳音檔,取得辨識文字 | `asr_transcribe` |
| 02 | **族語 ⇄ 華語翻譯** | 選語別與方向,輸入文字取得譯文 | `translate_to_zh`/`translate_to_formosan` |
| 03 | **族語文字轉語音** | 選內建配音員,輸入族語羅馬字,播放合成語音 | `tts_default` |
API 規格與逐項實測紀錄見 `docs/formosan-ai-api.md`。
## 隱私揭露(請先讀)
**你的錄音、上傳的音檔與輸入的文字,會傳送到 `ai3.iformosa.com.tw`,交由 Formosan AI 處理後回傳結果。**
- 本站是純前端頁面:**不儲存**你的音檔與文字,**不轉送**給該服務以外的任何對象。
- 沒有帳號、沒有後端、沒有追蹤、沒有分析、沒有 cookie、沒有 localStorage。
- **請勿送出含個人資料或機密內容的錄音與文字。** 送出後的處理由 Formosan AI 服務方負責,本站無法代為刪除。
同樣的說明也顯示在頁面上方,以及三個工具各自的送出按鈕旁——在你按下送出之前就看得到。
## 本機執行
```bash
python -m http.server 4173
```
然後瀏覽 。
> 請用 `
localhost`(或 https)開啟,不要直接雙擊 `index.html`。
> 瀏覽器只在**安全來源**(https 或 localhost)才允許麥克風;`file://` 下錄音會被擋。
> 上傳音檔與翻譯、TTS 不受此限制。
## 實測結果(2026-08-11)
三項服務**全部實測通過**。完整參數、回傳欄位與耗時見
`docs/formosan-ai-api.md`。
| 項目 | 結果 | HTTP | 耗時 |
|---|---|---|---|
| `health` | 三項服務皆 `ok:true` | 200 | 2.4 秒 |
| `asr_dialects` | 16 個族級 ID,與前端內建清單相符 | 200 | 47 ms |
| `translate_languages` | 42 語別 NLLB 代碼,`chinese_code = zho_Hant` | 200 | 52 ms |
| ASR · 上傳音檔 | `data.text = "Talacowa kiso."` | 200 | 6.5 秒 |
| ASR · 瀏覽器錄音(轉 16 kHz WAV 後) | `data.text = "Talacowa kiso."`,與上傳路徑一致 | 200 | 2.5 秒 |
| 翻譯 · 族語→華語 | `talacowa kiso?` → `你要去哪裡?` | 200 | 4.5 秒 |
| 翻譯 · 華語→族語 | `你好嗎?` → `ngaʼay ho kiso?` | 200 | 2.1 秒 |
| TTS × 3 個 ref | 三段合法 WAV,皆實際播出聲音 | 200 | 1.3/2.5/2.5 秒 |
| 錯誤路徑 | 缺參數與未知 `dialect_id` 皆回 400 + `ok:false` | 400 | 2026-07-24 版 README 寫的「實測時 API 無回應」**已不成立**,本次全部重驗並改寫。
## 測試
```bash
node tests/validate.js
node tests/translation-mapping.test.js
node tests/audio-format.test.js
```
三組靜態測試,**都不需要網路**:
- `validate.js`:面板 id、逾時常數、16 族 ID、42 語別、25 MB 限制、action 名稱、
錄音功能、行動版樣式、`aria-live`。
- `translation-mapping.test.js`:42 筆對照表完整性與唯一性、六大族群迴歸、
確認已無模糊比對、執行期校驗三條分支(表有清單無/清單有表無/完全一致)、
ASR 45 秒與其他 20 秒兩種逾時、無代碼時送出鈕停用。
- `audio-format.test.js`:WAV 編碼器輸出的取樣率 …