Files
open-xiaoai/packages/server-python/xiaozhi/xiaoai.py
T

48 lines
1.4 KiB
Python
Raw Normal View History

import argparse
import asyncio
import numpy as np
import open_xiaoai_server
from xiaozhi.services.audio.stream import GlobalStream
class XiaoAi:
mode = "xiaoai"
loop = asyncio.new_event_loop()
@classmethod
def setup_mode(cls):
parser = argparse.ArgumentParser(
description="小爱音箱接入小智 AI 演示 | by: https://del.wang"
)
parser.add_argument(
"--mode",
type=str,
choices=["xiaoai", "xiaozhi"],
default="xiaoai",
help="运行模式:【xiaoai】使用小爱音箱的输入输出音频(默认)、【xiaozhi】使用本地电脑的输入输出音频",
)
args = parser.parse_args()
if args.mode == "xiaozhi":
cls.mode = "xiaozhi"
@classmethod
def on_input_data(cls, data: bytes):
audio_array = np.frombuffer(data, dtype=np.uint16)
GlobalStream().add_input_data(audio_array.tobytes())
@classmethod
def on_output_data(cls, data: bytes):
async def on_output_data_async(data: bytes):
return await open_xiaoai_server.on_output_data(data)
future = on_output_data_async(data)
cls.loop.run_until_complete(future)
@classmethod
async def init_xiaoai(cls):
GlobalStream().on_output_data = cls.on_output_data
open_xiaoai_server.register_fn("on_input_data", cls.on_input_data)
await open_xiaoai_server.start_server()