32.【音声生成AI設計】FSMに最小の音声を接続する|自然さを捨てた壊れない第一声

tags: [“音声生成AI”, “FSM”, “TTS”, “設計思想”, “生成AI”]


🔊【音声生成AI設計】FSMに最小の音声を接続する

―― 🧪 自然さを捨てた壊れない第一声

前回(31)で、音声AIの正体は FSM(有限状態機械) だと分解した。
今回はそのFSMに、最小限の音声出力を接続する。

⚠️ ここでの目的は「自然に喋らせる」ことではない。
🎯 壊れずに音が出て、必ず戻ってこれること


🎯 本記事のゴール


🧩 全体構造(最小)

🧩 FSM
 ├─ 🎤 音声入力(今回はダミー)
 ├─ 🔊 TTS(最小)
 └─ ⏱ タイマ/完了イベント

👉 音声はFSMの従属物
勝手に喋らせない。


📦 FSMの関与ポイント(再確認)

FSMが言わない限り、
音声は 出ない/続かない/再生されない


🔊 最小TTSの考え方

ここでは「品質」を一切追わない。

例:

「システム、起動しました。」

これで十分。


🧪 擬似コード(FSM × 最小音声)

state = "Idle"

def on_event(event):
    global state

    if state == "Idle" and event == "start":
        state = "Speaking"
        play_tts("システム、起動しました。")

    elif state == "Speaking" and event == "tts_finished":
        state = "Idle"

🔑 重要なのは:


⏱ 発話終了は「感覚」で決めない

❌ よくある失敗

⭕ 正解

👉 FSMが遷移を決める


✋ 割り込みを“まだ”入れない理由

ここで割り込みを入れると:

今回は あえて単純化する。

割り込みは 次回(33)


🚫 この段階でやってはいけないこと

👉 それらは FSMが完成してから


🧠 この段階で得られるもの

🎉 これだけで、
世の「音声AIデモ」の大半より 堅牢


📌 まとめ


🔊 最小デモ

FSMが許可したときにのみ音声が出る、
最小構成の音声デモを用意しました。

▶ デモ
https://samizo-aitl.github.io/qiita-articles/demos/audio-fsm-minimal/

本デモは、

ことを確認するためのものです。


🔜 次の記事(33)

次は 地獄回
割り込みをやる。


(GitHub上のMarkdownを正本とし、Qiitaには抜粋・調整して投稿)