liumaolin commited on
Commit
7d8046a
·
1 Parent(s): 5f9eaee

Refactor threading in `launcher.py` to standardize worker initialization, enforce daemon mode, and improve naming consistency.

Browse files
Files changed (1) hide show
  1. src/voice_dialogue/core/launcher.py +37 -31
src/voice_dialogue/core/launcher.py CHANGED
@@ -61,41 +61,24 @@ def launch_system(
61
 
62
  threads = []
63
 
64
- # 音频采集
65
- enable_echo_cancellation = not disable_echo_cancellation
66
- audio_frame_probe = AudioCapture(
67
- audio_frames_queue=audio_frames_queue,
68
- enable_echo_cancellation=enable_echo_cancellation
69
- )
70
- audio_frame_probe.start()
71
- threads.append(audio_frame_probe)
72
-
73
- # 语音状态监测
74
- enable_vad = disable_echo_cancellation
75
- user_voice_checker = SpeechStateMonitor(
76
- audio_frame_queue=audio_frames_queue,
77
- user_voice_queue=user_voice_queue,
78
- enable_vad=enable_vad
79
- )
80
- user_voice_checker.start()
81
- threads.append(user_voice_checker)
82
-
83
  # 语音识别
84
- whisper_worker = ASRWorker(
85
  user_voice_queue=user_voice_queue,
86
  transcribed_text_queue=transcribed_text_queue,
87
  language=user_language
88
  )
89
- whisper_worker.start()
90
- threads.append(whisper_worker)
 
91
 
92
  # 文本生成
93
- answer_generator_worker = LLMResponseGenerator(
94
  user_question_queue=transcribed_text_queue,
95
  generated_answer_queue=text_input_queue
96
  )
97
- answer_generator_worker.start()
98
- threads.append(answer_generator_worker)
 
99
 
100
  # 动态获取TTS配置
101
  tts_speaker_config = get_tts_config_by_speaker_name(speaker)
@@ -105,18 +88,41 @@ def launch_system(
105
  raise ValueError(f"不支持的TTS说话人: {speaker}。可用说话人: {', '.join(available_speakers)}")
106
 
107
  # 语音合成
108
- audio_generator_worker = TTSAudioGenerator(
109
  text_input_queue=text_input_queue,
110
  audio_output_queue=audio_output_queue,
111
  tts_config=tts_speaker_config
112
  )
113
- audio_generator_worker.start()
114
- threads.append(audio_generator_worker)
 
115
 
116
  # 音频播放
117
- audio_playing_worker = AudioStreamPlayer(audio_playing_queue=audio_output_queue)
118
- audio_playing_worker.start()
119
- threads.append(audio_playing_worker)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
  # 等待所有线程准备就绪
122
  while not all([thread.is_ready for thread in threads]):
 
61
 
62
  threads = []
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  # 语音识别
65
+ asr_worker = ASRWorker(
66
  user_voice_queue=user_voice_queue,
67
  transcribed_text_queue=transcribed_text_queue,
68
  language=user_language
69
  )
70
+ asr_worker.daemon = True
71
+ asr_worker.start()
72
+ threads.append(asr_worker)
73
 
74
  # 文本生成
75
+ text_generator = LLMResponseGenerator(
76
  user_question_queue=transcribed_text_queue,
77
  generated_answer_queue=text_input_queue
78
  )
79
+ text_generator.daemon = True
80
+ text_generator.start()
81
+ threads.append(text_generator)
82
 
83
  # 动态获取TTS配置
84
  tts_speaker_config = get_tts_config_by_speaker_name(speaker)
 
88
  raise ValueError(f"不支持的TTS说话人: {speaker}。可用说话人: {', '.join(available_speakers)}")
89
 
90
  # 语音合成
91
+ audio_generator = TTSAudioGenerator(
92
  text_input_queue=text_input_queue,
93
  audio_output_queue=audio_output_queue,
94
  tts_config=tts_speaker_config
95
  )
96
+ audio_generator.daemon = True
97
+ audio_generator.start()
98
+ threads.append(audio_generator)
99
 
100
  # 音频播放
101
+ audio_player = AudioStreamPlayer(audio_playing_queue=audio_output_queue)
102
+ audio_player.daemon = True
103
+ audio_player.start()
104
+ threads.append(audio_player)
105
+
106
+ # 语音状态监测
107
+ enable_vad = disable_echo_cancellation
108
+ speech_monitor = SpeechStateMonitor(
109
+ audio_frame_queue=audio_frames_queue,
110
+ user_voice_queue=user_voice_queue,
111
+ enable_vad=enable_vad
112
+ )
113
+ speech_monitor.daemon = True
114
+ speech_monitor.start()
115
+ threads.append(speech_monitor)
116
+
117
+ # 音频采集
118
+ enable_echo_cancellation = not disable_echo_cancellation
119
+ audio_capture = AudioCapture(
120
+ audio_frames_queue=audio_frames_queue,
121
+ enable_echo_cancellation=enable_echo_cancellation
122
+ )
123
+ audio_capture.daemon = True
124
+ audio_capture.start()
125
+ threads.append(audio_capture)
126
 
127
  # 等待所有线程准备就绪
128
  while not all([thread.is_ready for thread in threads]):