要約筆記の現場で使う、リアルタイム日本語文字起こしアプリケーション(Windows 版)。 マイク音声とアプリケーション別のシステム音声を認識し、本家 IPtalk 互換の UDP プロトコルで LAN 内へ配信する。認識は完全にオフラインで行う。
Real-time Japanese speech-to-text for note-taking support (要約筆記) in Windows environments. Runs fully offline and broadcasts recognized text over LAN using an IPtalk-compatible UDP protocol. Documentation is in Japanese, matching the tool's users.
まだ実用できる状態ではない。 現在の到達点は下の開発状況を参照。
認識エンジンと音声取得は動作するが、UI がまだ骨組みだけであり、 本家 IPtalk との疎通も未検証である(後述の理由による)。
上流に SilentMalachite/SummaryTalk(macOS / Swift 6)がある。 その Windows 版を作る理由は 2 つある。
- 要約筆記の現場は Windows が主流である。 本家 IPtalk(栗田茂明氏作)が Windows アプリであるため。
- 本家 IPtalk との wire format を実機で検証できる。 macOS 版では未検証のまま残っている メンバ探索・表示部パケット・Undo のバイト列を、本リポジトリの開発中に確定させ、上流へ還元する。
本プロジェクトは上流の移植であって、フォークではない。 Swift のコードを機械翻訳するのではなく、 SPEC.md を Windows ネイティブに再実装している。
| 機能 | macOS 版 | Windows 版 |
|---|---|---|
| 音声認識 | SFSpeechRecognizer |
sherpa-onnx + ReazonSpeech |
| アプリ別音声取得 | ScreenCaptureKit |
WASAPI プロセスループバック |
| UI | SwiftUI | WinUI 3 / C++/WinRT |
扱うのは福祉施設・医療機関等における利用者本人の発話である。以下は交渉の対象ではない。
- 音声データと認識結果を、LAN 内 UDP ブロードキャスト以外の経路へ出さない。
- クラウド音声認識 API を依存に加えない。
- テレメトリ・クラッシュレポートの自動送信を実装しない。
- ネットワークを使うのはモデルの取得時のみ。認識中は完全にオフラインで動く。
詳細は SECURITY.md と SPEC.md §2.3 を参照。
| Phase | 内容 | 状態 |
|---|---|---|
| 0 | 足場(アンパッケージ WinUI 3、CI、依存取得) | ✅ |
| 1-a | ShiftJis(CP932 変換)、IPtalk のポート算術 |
✅ |
| 1-b | IPtalk の wire format 実装 | 🔒 実測待ち |
| 2-a | IPtalkClient のソケット寿命管理(6 ポート同時バインド / 全解放) |
✅ |
| 2-b | ペイロードの解釈と生成 | 🔒 実測待ち |
| 3 | AudioRingBuffer / Resampler / MicCapture |
✅ |
| 4 | SherpaOnnxEngine(Silero VAD + ReazonSpeech) |
✅ |
| 5 | ProcessLoopbackCapture(Zoom 等のシステム音声) |
⬜ |
| 6 | UI 統合・設定永続化・アクセシビリティ | ⬜ |
| 7 | インストーラ・配布 | ⬜ |
テストは 105 ケース / 18,716 アサーション。実装の詳細な進捗と判断記録は docs/PLAN.md にある。
本家 IPtalk の配布サイトが 403 を返しており、バイナリを入手できていない。 SPEC.md は「ポート番号・エンコーディング・ペイロード形式は、実測記録があるものだけを実装する」 と定めているため、推測でパケットを組み立てることはしない。誤った実装は本家 IPtalk 側の表示を壊すためである。
実測の手順は docs/iptalk-capture/procedure.md に用意してある。 IPtalk の入手経路について情報をお持ちの方は Issue で教えてほしい。
- Windows 11 22H2 以降(Windows 10 は対象外)
- x64
配布は MSIX パッケージ化しない(アンパッケージ・自己完結型)。 パッケージ化すると AppContainer で動作し、同一マシン内のループバック通信が既定でブロックされるためである。 要約筆記の現場では本家 IPtalk と同じ PC で並走させる場面がある。
- Visual Studio 2026(「C++ によるデスクトップ開発」+「Windows アプリケーション開発」)
- VS 2022 でもビルドできる構成を維持している(CI は VS 2022 で回している)
- Windows SDK 10.0.26100.0
- Windows PowerShell 5.1(
pwshは不要)
Catch2 と WIL は Visual Studio 同梱の vcpkg から自動で復元される。vcpkg integrate install は不要。
git clone https://github.com/SilentMalachite/SummaryTalk.Win.git
cd SummaryTalk.Win
# sherpa-onnx と音声認識モデルを third_party/ へ取得する(約 730 MB)
powershell -ExecutionPolicy Bypass -File tools\fetch-deps.ps1
msbuild SummaryTalk.Win.sln /p:Configuration=Debug /p:Platform=x64third_party/ が無くてもビルドは通る(認識機能が無効になるだけ)。CI はその構成で回している。
.\x64\Debug\SummaryTalk.Tests.exe
# タグで絞る
.\x64\Debug\SummaryTalk.Tests.exe "[iptalk]"
.\x64\Debug\SummaryTalk.Tests.exe "[audio]"
.\x64\Debug\SummaryTalk.Tests.exe "[text]"
# CI と同じ範囲(実ソケット・実マイク・実モデルを除く)
.\x64\Debug\SummaryTalk.Tests.exe "~[socket]~[device]~[model]"| タグ | 要求するもの |
|---|---|
[socket] |
UDP ポートの実バインド |
[device] |
実マイク |
[model] |
third_party/ の音声認識モデル |
これらが無い環境では、失敗ではなく理由を報告してスキップする。
| 文書 | 内容 |
|---|---|
| SPEC.md | 仕様書。機能・パイプライン・非機能要求・受け入れ基準 |
| CLAUDE.md | 開発規約。アーキテクチャ、絶対禁止事項、既知の落とし穴 |
| docs/PLAN.md | 実装計画と判断記録。リスク台帳もここ |
| docs/asr-evaluation.md | 音声認識の実機評価(レイテンシ・メモリ・句読点・揺れ) |
| docs/manual-test.md | 手動検証チェックリスト |
| docs/iptalk-capture/procedure.md | 本家 IPtalk のパケットキャプチャ手順 |
| CONTRIBUTING.md | 開発への参加方法 |
| THIRD-PARTY-NOTICES.md | 依存物とライセンス |
SummaryTalk.Core UI 非依存の静的ライブラリ。ここだけがテスト対象
Audio/ WASAPI 取得、多相 FIR リサンプラ、ロックフリー SPSC リングバッファ
Speech/ sherpa-onnx(Silero VAD + ReazonSpeech Zipformer RNN-T)
IPtalk/ プロトコル(純粋関数)、Winsock2 クライアント、受信フロー管理
Text/ CP932 変換、UTF-8 変換、漢数字→アラビア数字変換
SummaryTalk.App WinUI 3 / C++/WinRT の実行ファイル
SummaryTalk.Tests Catch2
音声パイプライン:
WASAPI キャプチャスレッド(確保・ロック・ログを一切行わない)
↓ 多相 FIR で 16 kHz / モノラル / float32 へ
↓ ロックフリー SPSC リングバッファ
ASR ワーカースレッド(Silero VAD → 発話区間 → オフライン認識)
↓ DispatcherQueue
UI スレッド → IPtalk へ UDP 送信
本体は MIT。
依存物のライセンスは THIRD-PARTY-NOTICES.md にまとめてある。 sherpa-onnx と ReazonSpeech モデルは Apache-2.0 であり、帰属表示義務がある。 モデルを差し替える場合はライセンスを必ず再確認すること。
- 上流(macOS 版): SilentMalachite/SummaryTalk
- 認識エンジン: k2-fsa/sherpa-onnx
- 認識モデル: ReazonSpeech