mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
* Update util.py解决返回元组报错 (#103) 解决返回元组报错 * 增加播放本地音乐功能 (#105) * Please enter the commit message for your changes. Lines starting with '#' will be ignored, and an empty message aborts the commit. On branch Music-playback Your branch is up to date with 'origin/Music-playback'. Changes to be committed: modified: core/handle/audioHandle.py new file: "music/\346\234\210\344\272\256\344\273\243\350\241\250\346\210\221\347\232\204\345\277\203_\351\202\223\344\270\275\345\220\233.mp3" new file: "music/\350\270\217\345\261\261\346\262\263.mp3" * Please enter the commit message for your changes. Lines starting with '#' will be ignored, and an empty message aborts the commit. On branch Music-playback Your branch is up to date with 'origin/Music-playback'. Changes to be committed: modified: config.yaml modified: core/connection.py modified: core/handle/abortHandle.py modified: core/handle/audioHandle.py new file: core/handle/musicHandler.py modified: core/handle/textHandle.py modified: core/websocket_server.py new file: "music/\344\270\200\345\277\265\345\215\203\345\271\264_\345\233\275\351\243\216\347\211\210.mp3" new file: "music/\344\270\255\347\247\213\346\234\210.mp3" deleted: "music/\346\234\210\344\272\256\344\273\243\350\241\250\346\210\221\347\232\204\345\277\203_\351\202\223\344\270\275\345\220\233.mp3" deleted: "music/\350\270\217\345\261\261\346\262\263.mp3" * 增加播放本地音乐功能 * 增加播放本地音乐功能 * 让音乐配置变的优雅 On branch Music-playback Your branch is up to date with 'origin/Music-playback'. Changes to be committed: modified: config.yaml modified: core/handle/musicHandler.py renamed: "music/\344\270\200\345\277\265\345\215\203\345\271\264_\345\233\275\351\243\216\347\211\210.mp3" -> "music/mp3/\344\270\200\345\277\265\345\215\203\345\271\264_\345\233\275\351\243\216\347\211\210.mp3" renamed: "music/\344\270\255\347\247\213\346\234\210.mp3" -> "music/mp3/\344\270\255\347\247\213\346\234\210.mp3" renamed: "music/\345\273\211\346\263\242\350\200\201\347\237\243\357\274\214\345\260\232\350\203\275\351\245\255\345\220\246.mp3" -> "music/mp3/\345\273\211\346\263\242\350\200\201\347\237\243\357\274\214\345\260\232\350\203\275\351\245\255\345\220\246.mp3" new file: music/music_config.yaml --------- Co-authored-by: 欣南科技 <huangrongzhuang@xin-nan.com> * update:优化代码 * update:流控调试 * update:优化音乐播放 * update:优化音乐配置初始化 --------- Co-authored-by: linqingping <linqingping@users.noreply.github.com> Co-authored-by: Chris <119588753+Chris-websketch@users.noreply.github.com> Co-authored-by: hrz <1710360675@qq.com>
75 lines
3.0 KiB
Python
75 lines
3.0 KiB
Python
import asyncio
|
|
import websockets
|
|
from config.logger import setup_logging
|
|
from core.connection import ConnectionHandler
|
|
from core.handle.musicHandler import MusicHandler
|
|
from core.utils.util import get_local_ip
|
|
from core.utils import asr, vad, llm, tts
|
|
|
|
TAG = __name__
|
|
|
|
|
|
class WebSocketServer:
|
|
def __init__(self, config: dict):
|
|
self.config = config
|
|
self.logger = setup_logging()
|
|
self._vad, self._asr, self._llm, self._tts, self._music = self._create_processing_instances()
|
|
self.active_connections = set() # 添加全局连接记录
|
|
|
|
def _create_processing_instances(self):
|
|
"""创建处理模块实例"""
|
|
return (
|
|
vad.create_instance(
|
|
self.config["selected_module"]["VAD"],
|
|
self.config["VAD"][self.config["selected_module"]["VAD"]]
|
|
),
|
|
asr.create_instance(
|
|
self.config["selected_module"]["ASR"]
|
|
if not 'type' in self.config["ASR"][self.config["selected_module"]["ASR"]]
|
|
else
|
|
self.config["ASR"][self.config["selected_module"]["ASR"]]["type"],
|
|
self.config["ASR"][self.config["selected_module"]["ASR"]],
|
|
self.config["delete_audio"]
|
|
),
|
|
llm.create_instance(
|
|
self.config["selected_module"]["LLM"]
|
|
if not 'type' in self.config["LLM"][self.config["selected_module"]["LLM"]]
|
|
else
|
|
self.config["LLM"][self.config["selected_module"]["LLM"]]['type'],
|
|
self.config["LLM"][self.config["selected_module"]["LLM"]],
|
|
),
|
|
tts.create_instance(
|
|
self.config["selected_module"]["TTS"]
|
|
if not 'type' in self.config["TTS"][self.config["selected_module"]["TTS"]]
|
|
else
|
|
self.config["TTS"][self.config["selected_module"]["TTS"]]["type"],
|
|
self.config["TTS"][self.config["selected_module"]["TTS"]],
|
|
self.config["delete_audio"]
|
|
),
|
|
MusicHandler(self.config)
|
|
)
|
|
|
|
async def start(self):
|
|
server_config = self.config["server"]
|
|
host = server_config["ip"]
|
|
port = server_config["port"]
|
|
|
|
self.logger.bind(tag=TAG).info("Server is running at ws://{}:{}", get_local_ip(), port)
|
|
self.logger.bind(tag=TAG).info("=======上面的地址是websocket协议地址,请勿用浏览器访问=======")
|
|
async with websockets.serve(
|
|
self._handle_connection,
|
|
host,
|
|
port
|
|
):
|
|
await asyncio.Future()
|
|
|
|
async def _handle_connection(self, websocket):
|
|
"""处理新连接,每次创建独立的ConnectionHandler"""
|
|
# 创建ConnectionHandler时传入当前server实例
|
|
handler = ConnectionHandler(self.config, self._vad, self._asr, self._llm, self._tts, self._music)
|
|
self.active_connections.add(handler)
|
|
try:
|
|
await handler.handle_connection(websocket)
|
|
finally:
|
|
self.active_connections.discard(handler)
|