mike_client

音声対話システムのクライアント実装。

class mike.mike_client.MikeClient(config: dict)

Bases: object

音声対話クライアントクラス。

マイク入力、音声認識、AI 応答生成、音声再生を統合し、 スリープ・待機・会話・終了の状態遷移を管理する。

Parameters:

config (dict) – 設定情報を格納した辞書。 config/config.json から読み込まれることを想定。

Raises:

RuntimeError – AudioStreamManager または MikeLibrary の初期化に失敗した場合

recv_audio_thread(sock)
play_audio_thread()
process_ai_command(text: str) bool

ユーザー入力を AI で処理し、応答音声を生成・再生する。

文単位でジェネレータから WAV ファイルを受け取り、 逐次音声合成と再生を繰り返します。

Parameters:

user_input (str) – ユーザーが発話したテキスト

Returns:

成功時 True、失敗時 False

Return type:

bool

audio_playback(wav: Wave_read)

WAV 音声データを再生する。

WAV のサンプリングレートと出力デバイスのレートが 異なる場合は自動的にリサンプリングを行う。

Parameters:

wav (wave.Wave_read) – 再生対象の WAV ファイル。

Notes

  • 出力ストリームは排他制御される

  • scipy が利用可能な場合は高品質リサンプリングを行う

audio_playnoise(freq: int, duration: float)

スピーカー起動用のテスト音を再生する。

初回再生時に音声が欠ける現象を防ぐための補助処理。

Parameters:
  • frequency (int) – 再生するサイン波の周波数(Hz)。

  • duration (float) – 再生時間(秒)。

getandplay_wav_file(uassr_message: str)

音声コマンド用 テキストに対応する WAV ファイルを検索して再生。

sleep_mode() int

スリープ待機モード。

【動作】 - Julius を使用し短い命令語のみ認識 - ウェイクワード認識で MODE_COMMAND へ遷移 - 終了ワード認識で終了

【フロー】 1. Julius で短い音声コマンド取得 2. ウェイクワード検知 → MODE_COMMAND へ遷移 3. 終了ワード検知 → MODE_END へ遷移 4. その他のコマンド → スキップ(応答なし)

【特徴】 - 最初の状態 - マイクは get_command() の期間だけ占有 - AudioStreamManager でスレッドセーフに管理

Returns:

0: 正常継続, -1: エラー発生

Return type:

int

wait_command_mode() int

コマンド待機モードの処理。

ウェイクワード検知後に遷移し、 定型コマンドに対応する音声応答を再生する。

Returns:

0 : 正常継続 -1 : エラー発生

Return type:

int

chat_mode() int

AI 会話モードの処理。

SpeechRecognition により自由発話を認識し、 MikeLibrary を用いて AI 応答を生成・再生する。

Returns:

0 : 正常継続 1 : モード遷移 -1 : エラー

Return type:

int

start_client()

音声対話クライアントのメインループ。

MODE_SLEEP / MODE_COMMAND / MODE_CHAT を 状態に応じて遷移しながら音声対話を実行する。

Notes

  • 各モードは音声入力待ちのためブロッキング動作

  • Ctrl+C または終了ワードで安全に終了する

mike.mike_client.main()

MikeClientRefactored のメイン実行。