liumaolin commited on
Commit
b636027
·
1 Parent(s): f00898d

Add `has_no_words` check to skip punctuation-only TTS tasks and enhance debug logs

Browse files

- Implement `has_no_words` method to detect and skip text containing only punctuation or symbols.
- Log TTS generation process when `is_debug_mode` is enabled for easier debugging.

src/voice_dialogue/services/audio/generator.py CHANGED
@@ -1,10 +1,11 @@
 
1
  import time
2
  from multiprocessing import Queue
3
  from queue import Empty
4
 
5
  from voice_dialogue.core.base import BaseThread
6
  from voice_dialogue.core.constants import dropped_audio_cache, user_still_speaking_event, voice_state_manager, \
7
- session_manager
8
  from voice_dialogue.models.voice_task import VoiceTask
9
  from voice_dialogue.utils.logger import logger
10
  from .generators import tts_manager, BaseTTSConfig
@@ -84,6 +85,13 @@ class TTSAudioGenerator(BaseThread):
84
  if voice_task.session_id != session_manager.current_id:
85
  continue
86
 
 
 
 
 
 
 
 
87
  voice_task.tts_start_time = time.time()
88
  try:
89
  tts_generated_sentence_audio = self.tts_instance.synthesize(voice_task.answer_sentence)
@@ -91,7 +99,7 @@ class TTSAudioGenerator(BaseThread):
91
  logger.error(f"TTS 音频生成失败: {e}")
92
  voice_state_manager.reset_task_id()
93
  continue
94
-
95
  voice_task.tts_generated_sentence_audio = tts_generated_sentence_audio
96
  voice_task.tts_end_time = time.time()
97
  # print(f'生成音频:{voice_task.answer_sentence}')
@@ -110,3 +118,13 @@ class TTSAudioGenerator(BaseThread):
110
  """
111
  return (voice_state_manager.interrupt_task_id and
112
  voice_task.id != voice_state_manager.interrupt_task_id)
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
  import time
3
  from multiprocessing import Queue
4
  from queue import Empty
5
 
6
  from voice_dialogue.core.base import BaseThread
7
  from voice_dialogue.core.constants import dropped_audio_cache, user_still_speaking_event, voice_state_manager, \
8
+ session_manager, is_debug_mode
9
  from voice_dialogue.models.voice_task import VoiceTask
10
  from voice_dialogue.utils.logger import logger
11
  from .generators import tts_manager, BaseTTSConfig
 
85
  if voice_task.session_id != session_manager.current_id:
86
  continue
87
 
88
+ if self.has_no_words(voice_task.answer_sentence):
89
+ logger.info(f"跳过仅包含标点的文本: '{voice_task.answer_sentence}'")
90
+ continue
91
+
92
+ if is_debug_mode():
93
+ logger.info(f"TTS 音频生成: {voice_task.answer_sentence}")
94
+
95
  voice_task.tts_start_time = time.time()
96
  try:
97
  tts_generated_sentence_audio = self.tts_instance.synthesize(voice_task.answer_sentence)
 
99
  logger.error(f"TTS 音频生成失败: {e}")
100
  voice_state_manager.reset_task_id()
101
  continue
102
+
103
  voice_task.tts_generated_sentence_audio = tts_generated_sentence_audio
104
  voice_task.tts_end_time = time.time()
105
  # print(f'生成音频:{voice_task.answer_sentence}')
 
118
  """
119
  return (voice_state_manager.interrupt_task_id and
120
  voice_task.id != voice_state_manager.interrupt_task_id)
121
+
122
+ def has_no_words(self, text: str) -> bool:
123
+ """
124
+ 检查文本是否不包含任何单词(字母、数字或中文字符)。
125
+ 如果文本只包含标点、空格等符号,则返回 True。
126
+ """
127
+ # 搜索任何字母、数字或中文字符
128
+ if re.search(r'[\u4e00-\u9fa5a-zA-Z0-9]', text):
129
+ return False
130
+ return True