$ sudo apt install portaudio19-dev
$ pip3 install maai

import time
from maai import Maai, MaaiOutput, MaaiInput
import numpy as np
# 1. 設定
# マイクを使用するため、ファイルパスはコメントアウト
# AUDIO_FILE_PATH = "sample.wav"
# maai の初期化設定
# 安定動作が確認された "vap" モードを使用
maai = Maai(
mode="vap",
lang="jp", # 日本語設定
frame_rate=10,
context_len_sec=5,
# マイク入力を使用
audio_ch1=MaaiInput.Mic(),
audio_ch2=MaaiInput.Zero(),
device="cpu"
)
# 2. 結果出力設定(ConsoleBarは使用せず、直接値を表示)
print("--- maai リアルタイム予測開始 (マイク入力) ---")
print("マイクに向かって何か話してください。予測結果が直接出力されます。Ctrl+Cで停止します。")
print("---------------------------------------------")
maai.start()
start_time = time.time() # 時間計測開始
# 3. 処理ループ
try:
while True:
# 結果を待機して取得
result = maai.get_result()
if result is None:
continue
# 💡 リスト型対応の処理: result の値がリストの場合、最初の要素 [0] を抽出する
processed_result = {}
for key, value in result.items():
if isinstance(value, list) and value:
# リストの最初の要素を抽出
processed_result[key] = value[0]
else:
# リストではないか、空のリストの場合はそのまま使用
processed_result[key] = value
# 頷き/相槌の値を取得 (キーが "nod" や "aizuchi" になっていることを期待)
nod_val = processed_result.get('nod', processed_result.get('p_nod', -1))
aizuchi_val = processed_result.get('aizuchi', processed_result.get('p_aizuchi', -1))
# ターンテイキングの値を取得
p_now_val = processed_result.get('p_now', -1)
p_future_val = processed_result.get('p_future', -1)
output_line = f"Time: {time.time() - start_time:.2f}s | "
# 頷き/相槌の予測値が含まれているか確認
if nod_val != -1 or aizuchi_val != -1:
# 頷き/相槌の予測がある場合の出力
output_line += f"Nod: {nod_val:.3f} | Aizuchi: {aizuchi_val:.3f} | P_Now: {p_now_val:.3f}"
else:
# 含まれていない場合のデフォルト出力(ターンテイキング予測のみ)
output_line += f"P_Now: {p_now_val:.3f} | P_Future: {p_future_val:.3f}"
print(output_line)
time.sleep(0.1) # 100ms ごとに結果を出力
except KeyboardInterrupt:
print("\n処理を中断しました。")
# 4. 終了処理
maai.stop()
print("\n--- maai 処理終了 ---")