﻿なんでも文字起こし　ビルド手順（開発者向け）
==================================================
作者：169　／　v1.000 時点

■ 構成
　・main.cpp …… 画面（Win32 API）・読み物ウィンドウ（使い方／？／AI活用のコツ。MessageBoxは開くたびに音が鳴るため自作）・AIへの依頼文の読み込み・音声取り込み（WASAPI：マイク＋PC音ループバック）・会議画面スクショの操作・会議の控えと［過去の会議］
　・mixer.h …… 取り込んだ音を、Windowsが付けた時刻どおりに共通の時間軸へ並べる部品
　　（機器の時計の狂いを0.1秒以内に保つ。既定の通信デバイスの音の足し込みにも使う）
　・engine.cpp/.h …… 認識エンジン（無音検出→2.5〜6秒に分割→認識（取りこぼしの再認識つき）→漢数字変換→句読点・置き換え）
　・numconv.cpp/.h …… 漢数字→算用数字の変換（十八歳→18歳、一緒・十分などは除外）
　・defaults.h …… 同梱テキスト（AIへの依頼文・用語登録）の既定内容
　・slide_detect.h …… スライドの切り替わりの判定（v0.90。Windowsに依存しない）
　・slide_capture.h …… 画面の取り込み・JPEG（WIC）・PDF（v0.976から圧縮の作り直しもWIC）・毎秒の見張り（v0.90）
　・app.rc / app.manifest / app.ico …… アイコン・バージョン情報・DPI/UTF-8設定

■ 使っている部品（すべて公開配布元から入手）
　・sherpa-onnx v1.13.8　Windows用共有ライブラリ（MT版・TTSなし）
　　https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.8/sherpa-onnx-v1.13.8-win-x64-shared-MT-Release-no-tts.tar.bz2
　　→ lib/sherpa-onnx-c-api.dll, onnxruntime.dll, onnxruntime_providers_shared.dll, include/
　・日本語モデル reazonspeech-k2-v2（int8版を使用、ファイル名を短く変更）
　　https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-zipformer-ja-reazonspeech-2024-08-01.tar.bz2
　　encoder-epoch-99-avg-1.int8.onnx → model/encoder.int8.onnx（他も同様）, tokens.txt
　・発話検出 Silero VAD
　　https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/silero_vad.onnx

■ ビルド（Linux上でクロスコンパイル）
　apt install g++-mingw-w64-x86-64-posix
　x86_64-w64-mingw32-windres -c 65001 app.rc -O coff -o app.res.o
　x86_64-w64-mingw32-g++-posix -O2 -std=c++17 -municode -mwindows -D_WIN32_WINNT=0x0A00 \
　  -finput-charset=UTF-8 -fexec-charset=UTF-8 -I<sherpa>/include \
　  main.cpp engine.cpp numconv.cpp app.res.o \
　  -lole32 -luuid -lcomctl32 -lshell32 -lcomdlg32 \
　  -static -static-libgcc -static-libstdc++ -s -o なんでも文字起こし.exe
　※ 試験用（音声認識なしでスライドだけ試す）は -DSLIDE_SELFTEST を付ける（配布しない）
　※ v0.40から、sherpa-onnx-c-api.dll はリンクせず、起動時にexeと同じフォルダから
　　LoadLibraryEx で読み込む（engine.cpp の LoadSpeechLibrary）。bcrypt.dll も同様に
　　システムフォルダから実行時に読み込む。SetDefaultDllDirectories で読み込み先を限定。

■ 配布
　・exe には MinGW の winpthreads が静的リンクされるため、ライセンス文（winpthreads_MIT.txt）を同梱
　・make_zip は Vector の規定に合わせ、zip名を半角英数字（nandemo_mojiokoshi_0xx.zip）で作る
　・利用者に配る zip（nandemo_mojiokoshi_0xx.zip）には、結合済みの model\encoder.int8.onnx が入っていて、
　　展開すればそのまま使える（追加で入手するファイルはない）
　・6分割（part1of6〜part6of6）は、開発中の受け渡し用（作者とClaudeの間のファイルの送信上限のため）。
　　split -n 6 で作成し、配布キットの make_zip が結合して、サイズとSHA-256で検証してから zip に入れる。
　　アプリ側にも、分割ファイルが置かれていれば初回起動時に結合・検証する仕組みがある（main.cpp の kEncoderSha256）
　・隣のフォルダに旧バージョンがあれば、そのモデルをコピーして引き継ぐ

■ 仕様・調整値・設計上の判断
　同じフォルダの「技術仕様書（詳しい方向け）.txt」にまとめています
　（処理の流れ、二重記録対策、設定.ini の全項目、診断ログの読み方、変更の記録など）。
