audio_stream_manager¶
PyAudio を用いた音声入出力ストリームを シングルトンパターンで一元管理するモジュールです。
- class mike.audio_stream_manager.AudioStreamManager(config)¶
Bases:
objectPyAudioストリーム(入出力)の生成・管理を一元化するシングルトンパターンクラス。
このクラスは以下の特徴を持つシングルトンパターンの実装です:
PyAudioインスタンスと入出力ストリームを永続保持
音声録音(入力)と再生(出力)を統一管理
スレッドセーフなアクセス制御(ロック機構)
デバイス情報の自動取得
サンプリングレートの自動判定とフォールバック
エラー時の自動リカバリ機構
Examples
基本的な使用方法:
>>> manager = AudioStreamManager(config) >>> manager.initialize(device_index=0, rate=16000) >>> >>> if manager.acquire_input(timeout=5.0): ... data = manager.read_chunk() ... manager.release_input() >>> >>> if manager.acquire_output(timeout=5.0): ... manager.write_chunk(data) ... manager.release_output() >>> >>> manager.terminate()
Notes
シングルトンパターンで実装されており、全体でインスタンスは1つ。 スレッドセーフなロック機構で並行アクセスを制御する。 PyAudioの低レイヤーAPIを簡潔にラップしている。
- acquire_input(timeout=5.0)¶
入力ストリーム(マイク録音)の使用権を取得。 複数スレッドからの同時アクセスを制御(排他制御)。
- Parameters:
timeout (float) – 最大待機時間(秒)。他スレッドが使用中の場合この時間まで待機。
- Returns:
True: 使用権取得成功 False: タイムアウト(他スレッドが使用中のまま)
- Return type:
bool
- acquire_output(timeout=5.0)¶
出力ストリーム(スピーカー再生)の使用権を取得。 複数スレッドからの同時アクセスを制御(排他制御)。
- Parameters:
timeout (float) – 最大待機時間(秒)。他スレッドが使用中の場合この時間まで待機。
- Returns:
True: 使用権取得成功 False: タイムアウト(他スレッドが使用中のまま)
- Return type:
bool
- get_config()¶
現在の設定を辞書で取得。
- Returns:
{rate, output_rate, channels, format, chunk, device_index}
- Return type:
dict
- get_device_list()¶
利用可能なオーディオデバイス一覧を取得。
- Returns:
デバイス情報の辞書リスト 各要素:{index, name, channels, samplerate}
- Return type:
list of dict
- get_sample_size()¶
サンプルサイズ(バイト数)を取得。 PCMデータの1サンプルが占めるバイト数(通常は2バイト=16-bit)。
- initialize(device_index=0, rate=16000, channels=1, chunk=1024)¶
入出力ストリームを初期化。 デバイスが対応していないサンプリングレートの場合は自動調整。
【サンプリングレート戦略】 - 入力(マイク):16kHz を優先(Julius音声認識エンジン対応) - 出力(スピーカー):22050Hz を優先(サーバー側の音声形式) - フォールバック:デバイスがサポートしているレートに自動調整
- Parameters:
device_index (int) – 使用するデバイスのインデックス
rate (int) – 要求するサンプリングレート(Hz)デフォルト: 16000
channels (int) – チャネル数(1=モノラル, 2=ステレオ)デフォルト: 1
chunk (int) – バッファサイズ(フレーム数)デフォルト: 1024
- Returns:
0: 初期化成功, -1: 初期化失敗
- Return type:
int
- read_chunk()¶
入力ストリームから1チャンク分のオーディオデータを読み込む(マイク録音)。
- Returns:
PCMオーディオデータ(失敗時は None)
- Return type:
bytes or None
- reinitialize(device_index=0, rate=16000, channels=1, chunk=1024)¶
ストリームを再初期化(リセット後に initialize を実行)。
既に初期化されている場合、一度終了して再度初期化する。 デバイス変更時などに使用。
- Parameters:
device_index (int) – 新規デバイスインデックス
rate (int) – 新規サンプリングレート
channels (int) – 新規チャネル数
chunk (int) – 新規バッファサイズ
- Returns:
0: 成功, -1: 失敗
- Return type:
int
- release_input()¶
入力ストリーム(マイク録音)の使用権を解放。 他のスレッドが使用可能になる。
- release_output()¶
出力ストリーム(スピーカー再生)の使用権を解放。 他のスレッドが使用可能になる。
- terminate()¶
入出力ストリーム・PyAudioインスタンスをクローズ。 リソースの解放と正常なシャットダウンを行う。
- write_chunk(data)¶
出力ストリームに1チャンク分のオーディオデータを書き込む(スピーカー再生)。
- Parameters:
data (bytes) – PCMオーディオデータ
- Returns:
True: 書き込み成功, False: 書き込み失敗
- Return type:
bool