xiaozhi-sdk 0.2.7__tar.gz → 0.2.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. {xiaozhi_sdk-0.2.7/xiaozhi_sdk.egg-info → xiaozhi_sdk-0.2.9}/PKG-INFO +1 -1
  2. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/pyproject.toml +0 -2
  3. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/__init__.py +1 -1
  4. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/cli.py +16 -10
  5. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9/xiaozhi_sdk.egg-info}/PKG-INFO +1 -1
  6. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/LICENSE +0 -0
  7. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/MANIFEST.in +0 -0
  8. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/README.md +0 -0
  9. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/audio/16k_greet.wav +0 -0
  10. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/audio/16k_play_music.wav +0 -0
  11. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/audio/16k_say_hello.wav +0 -0
  12. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/audio/16k_take_photo.wav +0 -0
  13. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/audio/test_16k.wav +0 -0
  14. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/audio/test_24k.wav +0 -0
  15. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/audio/test_48k.wav +0 -0
  16. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/image/leijun.jpg +0 -0
  17. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/opus/linux-arm64-libopus.so +0 -0
  18. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/opus/linux-x64-libopus.so +0 -0
  19. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/opus/macos-arm64-libopus.dylib +0 -0
  20. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/opus/macos-x64-libopus.dylib +0 -0
  21. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/file/opus/windows-opus.dll +0 -0
  22. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/setup.cfg +0 -0
  23. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/tests/test_iot.py +0 -0
  24. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/tests/test_pic.py +0 -0
  25. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/tests/test_wake_word.py +0 -0
  26. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/tests/test_xiaozhi.py +0 -0
  27. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/tests/test_xiaozhi_opus.py +0 -0
  28. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/__main__.py +0 -0
  29. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/config.py +0 -0
  30. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/core.py +0 -0
  31. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/iot.py +0 -0
  32. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/mcp.py +0 -0
  33. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/opus.py +0 -0
  34. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/utils/__init__.py +0 -0
  35. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/utils/mcp_tool.py +0 -0
  36. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk/utils/tool_func.py +0 -0
  37. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk.egg-info/SOURCES.txt +0 -0
  38. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk.egg-info/dependency_links.txt +0 -0
  39. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk.egg-info/requires.txt +0 -0
  40. {xiaozhi_sdk-0.2.7 → xiaozhi_sdk-0.2.9}/xiaozhi_sdk.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xiaozhi-sdk
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Summary: 一个用于连接和控制小智智能设备的Python SDK,支持实时音频通信、MCP工具集成和设备管理功能。
5
5
  Author-email: dairoot <623815825@qq.com>
6
6
  License-Expression: MIT
@@ -66,5 +66,3 @@ omit = [
66
66
  "xiaozhi_sdk/cli.py",
67
67
  "tests/*",
68
68
  ]
69
-
70
-
@@ -1,3 +1,3 @@
1
- __version__ = "0.2.7"
1
+ __version__ = "0.2.9"
2
2
 
3
3
  from xiaozhi_sdk.core import XiaoZhiWebsocket # noqa
@@ -76,7 +76,8 @@ logger.setLevel(logging.DEBUG)
76
76
 
77
77
  # 全局状态
78
78
  input_audio_buffer: deque[bytes] = deque()
79
- is_playing_audio = False
79
+ device_stauts = "listen" # "speak" or "listen"
80
+
80
81
  is_end = False
81
82
  human_speak_time = None
82
83
 
@@ -109,7 +110,7 @@ def get_image_byte(data):
109
110
 
110
111
 
111
112
  async def handle_message(message):
112
- global is_playing_audio
113
+ global device_stauts
113
114
  global human_speak_time
114
115
 
115
116
  """处理接收到的消息"""
@@ -122,11 +123,11 @@ async def handle_message(message):
122
123
  logger.info1("human: %s", message["text"])
123
124
 
124
125
  elif message["type"] == "tts" and message["state"] == "sentence_start": # AI语音
125
- is_playing_audio = True # 防止打断
126
+ device_stauts = "speak" # 防止打断
126
127
  logger.info2("AI: %s", message["text"])
127
128
 
128
129
  elif message["type"] == "tts" and message["state"] == "stop":
129
- is_playing_audio = False
130
+ device_stauts = "listen"
130
131
  # logger.info2("播放结束")
131
132
  logger.info("聆听中...")
132
133
  elif message["type"] == "llm": # 表情
@@ -141,27 +142,33 @@ async def handle_message(message):
141
142
 
142
143
  async def play_assistant_audio(audio_queue: deque[bytes], enable_audio, audio_samplerate):
143
144
  """播放音频流"""
144
- global is_playing_audio
145
+ global device_stauts
145
146
  global human_speak_time
146
147
 
147
148
  stream = None
148
149
  if enable_audio:
149
150
  stream = sd.OutputStream(samplerate=audio_samplerate, channels=INPUT_AUDIO_CHANNELS, dtype=np.int16)
150
151
  stream.start()
152
+
151
153
  last_audio_time = None
152
154
 
153
155
  while True:
154
156
  if is_end:
155
157
  return
156
158
 
159
+ if device_stauts == "listen":
160
+ last_audio_time = None
161
+
157
162
  if not audio_queue:
158
- if last_audio_time and time.time() - last_audio_time > 2:
159
- last_audio_time = time.time()
160
- is_playing_audio = False
163
+ # 空音频 超过 2s ,将device_stauts 设置为listen,代表聆听中
164
+ if device_stauts == "speak" and last_audio_time and time.time() - last_audio_time > 2:
165
+ device_stauts = "listen"
161
166
 
162
167
  await asyncio.sleep(0.01)
163
168
  continue
164
169
 
170
+ last_audio_time = time.time()
171
+
165
172
  if human_speak_time:
166
173
  logger.debug("首个音频包响应时间:%s 秒", time.time() - human_speak_time)
167
174
  human_speak_time = None
@@ -169,7 +176,6 @@ async def play_assistant_audio(audio_queue: deque[bytes], enable_audio, audio_sa
169
176
  pcm_data = audio_queue.popleft()
170
177
  if stream:
171
178
  stream.write(pcm_data)
172
- last_audio_time = time.time()
173
179
 
174
180
 
175
181
  class XiaoZhiClient:
@@ -225,7 +231,7 @@ class XiaoZhiClient:
225
231
  continue
226
232
 
227
233
  pcm_data = input_audio_buffer.popleft()
228
- if not is_playing_audio:
234
+ if device_stauts == "listen":
229
235
 
230
236
  await self.xiaozhi.send_audio(pcm_data)
231
237
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xiaozhi-sdk
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Summary: 一个用于连接和控制小智智能设备的Python SDK,支持实时音频通信、MCP工具集成和设备管理功能。
5
5
  Author-email: dairoot <623815825@qq.com>
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes