parms.py 3.17 KB
Newer Older
chenzk's avatar
v1.0  
chenzk committed
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import argparse
import builtins

# import torchaudio
import datetime
import json
import os
import queue
import struct
import threading
import time
from copy import deepcopy
from threading import Timer

import numpy as np
import torch
import yaml

from flask import Flask, render_template, request
from flask_socketio import SocketIO, disconnect, emit
from web.queue import PCMQueue, ThreadSafeQueue
from web.vad import WakeupAndVAD


class GlobalParams:
    def __init__(self):
        """
        Initialize the GlobalParams class with necessary components for managing global parameters and states.

        Parameters:
        - tts_pool: Pool of speech decoder.
        - pipeline_pool: Pool of inference pipeline.

        Returns:
        - None
        """
        # self.tts_pool = tts_pool
        # self.pipeline_pool = pipeline_pool

        # self.tts_obj = self.tts_pool.acquire()
        # self.pipeline_obj = self.pipeline_pool.acquire()
        # init default prompt
        # init_outputs = self.pipeline_obj.pipeline_proc.speech_dialogue(None, stat='pre',
        #                                                                role='You are a helpful voice assistant.\
        #                                                                      Your answer should be coherent, natural, simple, complete.\
        #                                                                      Your name is Xiao Yun.\
        #                                                                      Your inventor is Tencent.')
        # self.system_role = deepcopy(init_outputs)
        self.wakeup_and_vad = WakeupAndVAD("./web/resources", cache_history=10)

        self.reset()

    def set_prompt(self, prompt):
        self.system_role = self.pipeline_obj.pipeline_proc.speech_dialogue(
            None, stat="pre", role=prompt
        )

    def reset(self):
        self.stop_generate = False
        self.is_generate = False
        self.wakeup_and_vad.in_dialog = False
        # self.generate_outputs = deepcopy(self.system_role)
        self.whole_text = ""

        self.tts_over = False
        self.tts_over_time = 0
        self.tts_data = ThreadSafeQueue()
        self.pcm_fifo_queue = PCMQueue()

        self.stop_tts = False
        self.stop_pcm = False
        self.tts_end_lock = False

    def interrupt(self):
        self.stop_generate = True
        self.tts_over = True
        while True:
            time.sleep(0.01)
            if self.is_generate == False:
                self.stop_generate = False
                while True:
                    time.sleep(0.01)
                    if self.tts_data.is_empty():
                        self.whole_text = ""
                        self.tts_over = False
                        self.tts_over_time += 1
                        break
                break

    def release(self):
        pass
        # self.tts_pool.release(self.tts_obj)
        # self.pipeline_pool.release(self.pipeline_obj)

    def print(self):
        print("stop_generate:", self.stop_generate)
        print("is_generate:", self.is_generate)
        print("whole_text:", self.whole_text)
        print("tts_over:", self.tts_over)
        print("tts_over_time:", self.tts_over_time)