Skip to content

Repository files navigation

SummaryTalk.Win

CI License: MIT

要約筆記の現場で使う、リアルタイム日本語文字起こしアプリケーション(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 つある。

  1. 要約筆記の現場は Windows が主流である。 本家 IPtalk(栗田茂明氏作)が Windows アプリであるため。
  2. 本家 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.mdSPEC.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=x64

third_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 であり、帰属表示義務がある。 モデルを差し替える場合はライセンスを必ず再確認すること。


関連

About

要約筆記の現場で使う、リアルタイム日本語文字起こしアプリケーション(Windows 版)。IPtalk 互換 UDP、完全オフライン認識。

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages