File size: 1,578 Bytes
7b64dcd
 
511ff0c
7b64dcd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259c23b
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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 = ''