2024-06-09 22:54:13 +08:00
|
|
|
from datetime import datetime
|
|
|
|
import wave
|
|
|
|
import json
|
|
|
|
|
2024-06-10 02:28:16 +08:00
|
|
|
# -------------- 公共类 ------------ #
|
2024-06-09 22:54:13 +08:00
|
|
|
class SentenceSegmentation():
|
|
|
|
def __init__(self,):
|
|
|
|
self.is_first_sentence = True
|
|
|
|
self.cache = ""
|
|
|
|
|
|
|
|
def __sentenceSegmentation(self, llm_frame):
|
|
|
|
results = []
|
|
|
|
if llm_frame['is_end']:
|
|
|
|
if self.cache:
|
|
|
|
results.append(self.cache)
|
|
|
|
self.cache = ""
|
|
|
|
return results
|
|
|
|
for char in llm_frame['msg']:
|
|
|
|
self.cache += char
|
|
|
|
if self.is_first_sentence and char in ',.?!,。?!':
|
|
|
|
results.append(self.cache)
|
|
|
|
self.cache = ""
|
|
|
|
self.is_first_sentence = False
|
|
|
|
elif char in '。?!':
|
|
|
|
results.append(self.cache)
|
|
|
|
self.cache = ""
|
|
|
|
return results
|
|
|
|
|
|
|
|
def split(self, llm_chunk):
|
|
|
|
return self.__sentenceSegmentation(llm_chunk)
|
|
|
|
|
|
|
|
class Recorder:
|
|
|
|
def __init__(self, user_id):
|
|
|
|
self.input_wav_path = 'storage/wav/'+ datetime.now().strftime('%Y%m%d%H%M%S') + 'U' + user_id + 'i.wav'
|
|
|
|
self.output_wav_path = 'storage/wav/'+ datetime.now().strftime('%Y%m%d%H%M%S') + 'U' + user_id + 'o.wav'
|
|
|
|
self.out_put_text_path = 'storage/record/'+ datetime.now().strftime('%Y%m%d%H%M%S') + 'U' + user_id + 'o.txt'
|
|
|
|
self.input_sr = 16000
|
|
|
|
self.output_sr = 22050
|
|
|
|
self.user_audio = b''
|
|
|
|
self.tts_audio = b''
|
|
|
|
self.input_text = ""
|
|
|
|
self.output_text = ""
|
|
|
|
|
|
|
|
def write(self):
|
|
|
|
record = {"input_wav":self.input_wav_path,"input_text":self.input_text,"input_sr":self.input_sr,"output_wav":self.output_wav_path,"output_text":self.output_text,"output_sr":self.output_sr}
|
|
|
|
with wave.open(self.input_wav_path, 'wb') as wav_file:
|
|
|
|
wav_file.setparams((1, 2, self.input_sr, 0, 'NONE', 'not compressed'))
|
|
|
|
wav_file.writeframes(self.user_audio)
|
|
|
|
with wave.open(self.output_wav_path, 'wb') as wav_file:
|
|
|
|
wav_file.setparams((1, 2, self.output_sr, 0, 'NONE', 'not compressed'))
|
|
|
|
wav_file.writeframes(self.tts_audio)
|
|
|
|
with open(self.out_put_text_path, 'w', encoding='utf-8') as file:
|
|
|
|
file.write(json.dumps(record, ensure_ascii=False))
|
|
|
|
# ---------------------------------- #
|