voice_recognition_interface

音声認識エンジン共通インターフェース定義。

class mike.voice_recognition_interface.VoiceRecognitionInterface

Bases: ABC

音声認識モジュール共通インターフェース。

【役割】

  • すべての音声認識エンジン(Julius, SpeechRecognition など)が 実装すべき共通メソッドを定義する

  • MikeClient が複数の音声認識方式を統一的に扱えるようにする

【デザインパターン】

  • Strategy パターン:複数のアルゴリズムを同じインターフェースで提供

  • Dependency Injection:MikeClient が実装を指定可能

【利点】

  • 認識エンジン切り替え時、MikeClient コード変更不要

  • テスト時にモック実装を簡単に挿し込める

  • 新しい認識方式追加が容易

【実装ルール】

  • 本クラスを継承する全クラスは、以下 2 メソッドを実装

  • @abstractmethod で修飾されたメソッドの実装は必須

abstractmethod close()

音声認識リソース解放処理。

【役割】 - マイク、ネットワーク、外部サービスなどのリソースを適切に解放 - 予期しない停止などの影響を最小化 - 二重クローズ・複数回呼び出しでも安全に動作

【実装例】

# ========== ローカルマイク・オーディオデバイス ==========
class LocalRecognizer(VoiceRecognitionInterface):
    def close(self):
        if self.stream:
            self.stream.stop_stream()
            self.stream.close()
        if self.audio:
            self.audio.terminate()

# ========== 外部 API セッション終了 ==========
class ApiRecognizer(VoiceRecognitionInterface):
    def close(self):
        if self.api_session:
            self.api_session.close()

# ========== リソース不要(ファイルベースなど) ==========
class FileRecognizer(VoiceRecognitionInterface):
    def close(self):
        pass  # 何もしない

【実装側責務】 - 何もしない場合でも定義する必要がある - 二重呼び出しでも安全(べき等性) - 正常系・異常系どちらでも呼ばれる可能性あり

【呼び出しタイミング】 - プログラム終了時(atexit) - モード切り替え時 - エラーリカバリ時 - 明示的な cleanup フェーズ

abstractmethod get_command() str | None

音声認識を実行し、文字列の結果として返す抽象メソッド。

【役割】 - マイクから音声入力を受け取る - 音声データを処理・認識 - 認識テキストを返却

【実装側ルール】 - 呼び出しごとに録音または認識処理を行うこと - 無音、認識失敗、通信エラーなどの場合は空文字 “” を返すこと - ブロッキング処理(結果が返るまで待つ)と想定 - 例外は発生させず、失敗時は空文字で統一

【使用例】

# Julius を使った場合
julius = JuliusHandler()
cmd = julius.get_command()  # ← 音声待機・認識・返却

# SpeechRecognition を使った場合(インターフェース同じ)
speech = SpeechRecognitionHandler()
cmd = speech.get_command()  # ← 同じメソッド名で使用可能

# 呼び出し側(MikeClient)はどちらの実装かを知らずに使用可能
recognizer = JuliusHandler()  # または SpeechRecognitionHandler()
cmd = recognizer.get_command()
Returns:

音声認識結果のテキスト、失敗時は空文字列 “”

Return type:

str

【設計上の注意】 - 戻り値が空文字でないことを確認してから次の処理に進む - エラー処理は実装側で完結させ、呼び出し側には異常を感じさせない