8.6 KiB
8.6 KiB
transcription_recorder.py - 音声録音インターフェース
概要
音声認識システムの入力となる音声データを録音するレコーダークラス群です。マイクとスピーカー出力の両方をサポートし、エネルギーレベル監視機能とともに音声データをキューに送信します。pyaudiowpatchライブラリを使用してWindowsの音声システムと統合します。
主要機能
音声録音機能
- マイクからの音声録音
- スピーカー出力の録音(ループバック)
- リアルタイム音声データキューイング
エネルギー監視
- 音声エネルギーレベルの監視
- 動的しきい値調整
- 無音検出
デバイス対応
- 複数音声デバイスの対応
- デバイス固有設定の管理
- 自動デバイス選択
クラス構造
BaseRecorder クラス
class BaseRecorder:
def __init__(self, source: Any, energy_threshold: int, dynamic_energy_threshold: bool, record_timeout: int)
基底レコーダークラス - 共通機能を提供
SelectedMicRecorder クラス
class SelectedMicRecorder(BaseRecorder):
def __init__(self, device: dict, energy_threshold: int, dynamic_energy_threshold: bool, record_timeout: int)
選択されたマイクデバイスからの録音
SelectedSpeakerRecorder クラス
class SelectedSpeakerRecorder(BaseRecorder):
def __init__(self, device: dict, energy_threshold: int, dynamic_energy_threshold: bool, record_timeout: int)
選択されたスピーカーデバイスからの録音(ループバック)
エネルギー監視クラス群
BaseEnergyRecorder クラス
class BaseEnergyRecorder:
def __init__(self, source: Any)
エネルギーレベル監視の基底クラス
SelectedMicEnergyRecorder クラス
class SelectedMicEnergyRecorder(BaseEnergyRecorder):
def __init__(self, device: dict)
マイクエネルギーレベルの監視
SelectedSpeakerEnergyRecorder クラス
class SelectedSpeakerEnergyRecorder(BaseEnergyRecorder):
def __init__(self, device: dict)
スピーカーエネルギーレベルの監視
統合録音クラス群
BaseEnergyAndAudioRecorder クラス
class BaseEnergyAndAudioRecorder:
def __init__(self, source: Any, energy_threshold: int, dynamic_energy_threshold: bool,
phrase_time_limit: int, phrase_timeout: int, record_timeout: int)
音声録音とエネルギー監視を統合
SelectedMicEnergyAndAudioRecorder クラス
class SelectedMicEnergyAndAudioRecorder(BaseEnergyAndAudioRecorder):
def __init__(self, device: dict, energy_threshold: int, dynamic_energy_threshold: bool,
phrase_time_limit: int, phrase_timeout: int = 1, record_timeout: int = 5)
マイクの音声録音とエネルギー監視を統合
SelectedSpeakerEnergyAndAudioRecorder クラス
class SelectedSpeakerEnergyAndAudioRecorder(BaseEnergyAndAudioRecorder):
def __init__(self, device: dict, energy_threshold: int, dynamic_energy_threshold: bool,
phrase_time_limit: int, phrase_timeout: int = 1, record_timeout: int = 5)
スピーカーの音声録音とエネルギー監視を統合
主要メソッド
録音制御
adjustForNoise() -> None
- 環境ノイズに合わせたしきい値調整
- 録音開始前の較正
recordIntoQueue(audio_queue: Queue) -> None
- 音声データの継続的キューイング
- バックグラウンドスレッドでの実行
pause() -> None
resume() -> None
stop() -> None
- 録音の一時停止・再開・停止制御
エネルギー監視
recordIntoQueue(energy_queue: Queue) -> None
- エネルギーレベルのキューイング
- リアルタイム監視データの提供
使用方法
基本的なマイク録音
from queue import Queue
from models.transcription.transcription_recorder import SelectedMicRecorder
# デバイス設定
mic_device = {
"name": "マイク (USB Audio Device)",
"index": 0,
"channels": 1,
"sample_rate": 16000
}
# 録音設定
energy_threshold = 300
dynamic_threshold = True
record_timeout = 5
# レコーダー初期化
recorder = SelectedMicRecorder(
device=mic_device,
energy_threshold=energy_threshold,
dynamic_energy_threshold=dynamic_threshold,
record_timeout=record_timeout
)
# 音声キューの作成
audio_queue = Queue()
# 録音開始
recorder.adjustForNoise() # ノイズ調整
recorder.recordIntoQueue(audio_queue)
# 音声データの取得
while True:
if not audio_queue.empty():
audio_data = audio_queue.get()
print(f"音声データ受信: {len(audio_data)} bytes")
スピーカー録音(ループバック)
from models.transcription.transcription_recorder import SelectedSpeakerRecorder
# スピーカーデバイス設定
speaker_device = {
"name": "スピーカー (USB Audio Device)",
"index": 1,
"channels": 2,
"sample_rate": 44100
}
# スピーカーレコーダー
recorder = SelectedSpeakerRecorder(
device=speaker_device,
energy_threshold=500,
dynamic_energy_threshold=False,
record_timeout=3
)
audio_queue = Queue()
recorder.recordIntoQueue(audio_queue)
エネルギー監視
from models.transcription.transcription_recorder import SelectedMicEnergyRecorder
# エネルギー監視のみ
energy_recorder = SelectedMicEnergyRecorder(mic_device)
energy_queue = Queue()
energy_recorder.recordIntoQueue(energy_queue)
# エネルギーレベルの取得
while True:
if not energy_queue.empty():
energy_level = energy_queue.get()
print(f"エネルギーレベル: {energy_level}")
統合録音(音声+エネルギー)
from models.transcription.transcription_recorder import SelectedMicEnergyAndAudioRecorder
# 統合レコーダー
integrated_recorder = SelectedMicEnergyAndAudioRecorder(
device=mic_device,
energy_threshold=300,
dynamic_energy_threshold=True,
phrase_time_limit=5, # フレーズ制限時間
phrase_timeout=1, # フレーズタイムアウト
record_timeout=5 # 録音タイムアウト
)
audio_queue = Queue()
energy_queue = Queue()
# 両方のキューに同時出力
integrated_recorder.recordIntoQueue(audio_queue, energy_queue)
設定パラメータ
しきい値設定
- energy_threshold: 音声検出のエネルギーしきい値
- dynamic_energy_threshold: 動的しきい値調整の有効・無効
タイムアウト設定
- record_timeout: 録音継続時間の上限
- phrase_timeout: フレーズ間の無音許容時間
- phrase_time_limit: 単一フレーズの最大長
デバイス設定
- name: デバイス名
- index: デバイスインデックス
- channels: チャンネル数(1=モノラル、2=ステレオ)
- sample_rate: サンプリングレート(Hz)
デバイス対応
マイクデバイス
- USB マイク
- 内蔵マイク
- Bluetooth マイク
- 仮想マイクデバイス
スピーカーデバイス(ループバック)
- USB スピーカー/ヘッドフォン
- 内蔵スピーカー
- Bluetooth スピーカー
- 仮想音声デバイス
エラーハンドリング
デバイスエラー
- デバイス接続失敗の検出
- 適切なエラーメッセージの提供
音声フォーマットエラー
- 非対応フォーマットの検出
- 自動フォーマット変換
メモリエラー
- キューオーバーフローの防止
- メモリ使用量の最適化
パフォーマンス特性
レイテンシ
- 低レイテンシ録音(~10ms)
- リアルタイム処理最適化
スループット
- 連続録音対応
- 高サンプリングレート対応
メモリ使用量
- 効率的なバッファ管理
- キューサイズの最適化
依存関係
必須依存関係
speech_recognition: 音声認識ライブラリpyaudiowpatch: Windows音声システム統合queue: データキューイング
オプション依存関係
datetime: タイムスタンプ機能
注意事項
- Windows専用(pyaudiowpatchによる制限)
- 適切な音声デバイスドライバーが必要
- 排他制御による同時デバイスアクセス制限
- 高サンプリングレート使用時のCPU使用率上昇
関連モジュール
transcription_transcriber.py: 音声認識エンジンdevice_manager.py: デバイス管理config.py: 録音設定管理model.py: 録音制御統合