v0.1.1 — 重みだけで音が出せるようになった / 焼くだけの ESP32 firmware
モデルは v0.1.0 と 1 バイトも変わっていません。
変わったのは「実際に動かせるかどうか」の方です。
| 重み・ブロブ・サンプル | v0.1.0 と bit 同一(SHA-256 で確認)。再学習していません |
| 変わったもの | 端末での自由入力 / 重みだけで合成できる経路 / 焼くだけの firmware / 動かなかった手順の訂正 |
🔴 v0.1.0 の手順は動きませんでした(訂正)
公開した「使い方」が 2 行とも、リリースだけを落とした人には通りませんでした。
| # | 何が起きたか |
|---|---|
| 1 | uv sync が失敗する — pyproject.toml の path 依存が piper-plus への絶対パスだった |
| 2 | --text(漢字)は教師 ckpt を要求する — 教師は private リポジトリにあり、外の人には原理的に実行できない |
手元には piper-plus も教師も揃っているので、書いたコマンドがそのまま通ってしまっていました。
「自分の環境で動いた」は「読者の環境で動く」ではない、という当たり前を踏みました。
MODEL_CARD.md の SHA-256 も、Release 本文だけ差し替え前の値を載せていました
(配布物と SHA256SUMS.txt は正しかったので shasum -c は通っていました)。
✅ 重みだけで音が出せるようになりました
piper-plus も教師 ckpt も要りません。 新規 clone で実測しました。
git clone https://github.com/ayutaz/sanoTTS-jp.git && cd sanoTTS-jp
uv venv && uv pip install "torch>=2.11" "numpy<2.5" "soundfile>=0.14"
uv run --no-project python scripts/synthesize_student.py \
--ckpt saanotts-jp-v3-stage4.pt \
--intermediate "きょ][おわよ][いて][んきです°ね" --out out/
# → out/cli_000.wav(22.05 kHz / 1.2 秒)「今日は良い天気ですね。」uv sync は使わないでください(piper-plus を要求します)。
生徒の推論に要るのは torch / numpy / soundfile の 3 つだけです。
できるようにした中身:
--intermediate— かな中間表現を直接受ける。教師 ckpt を 1 バイトも読まず、
教師経路(--text)と WAV がバイト単位で一致しますcsrc/g2p_table.json— かな→音素のテーブルを凍結。OpenJTalk が要らない。
読むたびに SHA-256 を検証し、piper-plus がある環境では live 表と全 195 件を突き合わせます
scripts/to_intermediate.py)には引き続き piper-plus が要ります。
かなを直接書くなら不要です。
🔊 ESP32-S3 でかなを自由入力できるようになりました
それまでのファームはビルド時に焼き込んだ 1 文しか喋れませんでした。
かな> こんにちわ
かな> きょ][おわよ][いて][んきです°ね
- 行編集は 369 B(
csrc/line.c)。UTF-8 対応の BS / CRLF / ESC の吸い込み / 溢れ検出
⚠️ 矢印キーのESC [ Aの[は中間表現では上昇アクセントです。
吸わないとカーソルを動かしただけでエラーも出さずに抑揚が変わります - コンソールは UART0 でも USB Serial/JTAG でも動きます
- 漢字・カタカナ・句読点は位置と文字を出して拒否します(黙って無音にしません)
QEMU の UART に実際に打ち込み、基準の 1 行から起動時と同じ checksum
(0x04de91103a0e49f9)が出ることを確認しました。
📦 新しい成果物: 焼くだけの firmware
ESP-IDF を入れなくても実機で試せます。esptool だけで焼けます。
| ファイル | 中身 |
|---|---|
esp32s3-firmware-w8a8-pie.bin |
W8A8 + PIE(ESP32-S3 の整数 SIMD)。★ こちらが本命 |
esp32s3-firmware-w8a32.bin |
最適化なし(移植可能 C)。比較用 |
pip install esptool
esptool.py --chip esp32s3 -p <ポート> write_flash 0x0 esp32s3-firmware-w8a8-pie.bin
# 115200 baud のシリアル端末で開く(screen / minicom / PuTTY など)bootloader + パーティション表 + アプリ + 重み blob が全部入っています
(offset 0x0 から 2.8 MB)。8 MB 以上の flash が要ります。
自分の配線に合わせてソースから作り直してください。 速度の測定だけなら DAC は不要です。
G2P が錨と一致 → プロンプト」までは確認しましたが、QEMU はサイクル精度ではないので
速度は測れません。
🙏 ESP32-S3 をお持ちの方へ — 残っている未検証項目は速度だけです。
15〜30 分で決着します。手順は
esp32/TESTING.md。
⚠️ v0.1.0 時点の手順書には欠陥が 2 件あり(1 行目のset-targetが落ちる /
USB ポート切り替えが黙って無視される)、新規 clone でなぞって直しました。
📊 品質(v0.1.0 から変更なし)
| 指標 | 生徒 | 教師 | 教師比 |
|---|---|---|---|
| SCOREQ synthetic/nr | 1.2716 | 1.9732 | 0.6444 [0.6044, 0.6843] |
| DNSMOS OVRL | 2.1730 | 2.7270 | 0.7969 [0.7756, 0.8173] |
| かな CER | 0.1671 | 0.1351 | 差 +0.0320(p=0.31、有意差なし) |
| アクセント符号一致 | 37/37 = 1.000 | — | — |
SCOREQ 2.4983 / UTMOS 2.3047 しか出ません。
📜 ライセンス(変更なし)
| 対象 | ライセンス |
|---|---|
| リポジトリのコードとドキュメント | MIT |
| 重み・ブロブ・サンプル・firmware イメージ | LICENSE-MODEL.md |
NOTICE.txt の
帰属表示を同梱し、出力の用途制限(個人攻撃 / 政治・宗教の主張 / アダルト /
素材としての再配布は不可)が下流にも伝播します。
一次データ: docs/measurements.md の M-63〜M-66
決定と訂正履歴: docs/decisions.md の D-040 / D-041 / C-039〜C-041
SHA-256
3ba8fdd7600fac8f450255435c7a837910506b319938d3821b5852251a786ea7 esp32s3-firmware-w8a32.bin
f18b0523345ead8787fe2fe89104de776aac8a2c9dd916285ab9a84ed6e67ef9 esp32s3-firmware-w8a8-pie.bin
b833f7025cf4dff8318847e9c5a620316bbbda3cb4f539baa112aa85eaf3ca81 golden-v3-fp32.bin
02641b6ea7ca2d44b99a5c205603a642a382162bc1ff3c74834ba4b07f5134bf golden-v3-int8.bin
82a16adad61837d5d2d8cfb1e0305bf5d2d61ce5431a5c0cb0f7938f69995028 LICENSE-MODEL.md
6d0f48a414680c7904fc430e47f79c2d8aec21f24fea6547b823d6926a9f77c6 MODEL_CARD.md
0b8681feeda97fc16ae99c57c3e7f2f818309c33aa03310242185bb7f1a6bda1 NOTICE.txt
dae6303c1105845aeedabc5141aa811f9d5de02f63d7af4188fb82e6cbe5298e saanotts-jp-v3-fp32.bin
c3b89216133fa7bee3f61ed9d8e6c7183a5dfd41b70dab194f42c20fce5b4170 saanotts-jp-v3-int8.bin
4991c8b532e29be182c7c190db393dd38bb0612053281adaf859569e7321f10c saanotts-jp-v3-samples.zip
4724bcf8a37a3c1518cc0219c1c515c6e8907410494459c91ff1c56f195890b5 saanotts-jp-v3-stage4.pt