|
|
import uuid |
|
|
|
|
|
from voice_dialogue.utils.cache import LRUCacheDict |
|
|
from .enums import AudioState |
|
|
|
|
|
|
|
|
class VoiceStateManager: |
|
|
"""语音状态管理器""" |
|
|
|
|
|
def __init__(self): |
|
|
self._task_id = '' |
|
|
self._audio_task_states = LRUCacheDict(maxsize=10) |
|
|
self.waiting_second_answer_mapping = LRUCacheDict(maxsize=10) |
|
|
self._interrupt_task_id = '' |
|
|
|
|
|
@property |
|
|
def task_id(self): |
|
|
return self._task_id |
|
|
|
|
|
@task_id.setter |
|
|
def task_id(self, value): |
|
|
self._task_id = value |
|
|
|
|
|
def create_task_id(self): |
|
|
"""创建新的任务ID""" |
|
|
self._task_id = f'{uuid.uuid4()}' |
|
|
|
|
|
def reset_task_id(self): |
|
|
"""重置任务ID""" |
|
|
self._task_id = '' |
|
|
|
|
|
def get_audio_task_state(self, task_id): |
|
|
"""获取音频任务状态""" |
|
|
return self._audio_task_states.get(task_id) |
|
|
|
|
|
def set_audio_playing(self, task_id): |
|
|
"""设置音频为播放状态""" |
|
|
self._audio_task_states[task_id] = AudioState.PLAYING |
|
|
|
|
|
def drop_audio_task(self, task_id): |
|
|
"""丢弃音频任务""" |
|
|
self._audio_task_states[task_id] = AudioState.DROP |
|
|
|
|
|
def cleanup_task_state(self, task_id): |
|
|
"""清理任务状态""" |
|
|
if task_id in self._audio_task_states: |
|
|
del self._audio_task_states[task_id] |
|
|
|
|
|
@property |
|
|
def interrupt_task_id(self): |
|
|
return self._interrupt_task_id |
|
|
|
|
|
@interrupt_task_id.setter |
|
|
def interrupt_task_id(self, value): |
|
|
self._interrupt_task_id = value |
|
|
|
|
|
def reset_interrupt_task_id(self): |
|
|
self.interrupt_task_id = '' |
|
|
|