Spaces:
Runtime error
Runtime error
| import spacy | |
| import threading | |
| import socket | |
| from tortoise.api_fast import TextToSpeech | |
| from utils.audio import load_voices | |
| tts = TextToSpeech() | |
| nlp = spacy.load("en_core_web_sm") | |
| def generate_audio_stream(text, tts, voice_samples): | |
| print(f"Generating audio stream...: {text}") | |
| voice_samples, conditioning_latents = load_voices([voice_samples]) | |
| stream = tts.tts_stream( | |
| text, | |
| voice_samples=voice_samples, | |
| conditioning_latents=conditioning_latents, | |
| verbose=True, | |
| stream_chunk_size=40 # Adjust chunk size as needed | |
| ) | |
| for audio_chunk in stream: | |
| yield audio_chunk | |
| def split_text(text, max_length=200): | |
| doc = nlp(text) | |
| chunks = [] | |
| chunk = [] | |
| length = 0 | |
| for sent in doc.sents: | |
| sent_length = len(sent.text) | |
| if length + sent_length > max_length: | |
| chunks.append(' '.join(chunk)) | |
| chunk = [] | |
| length = 0 | |
| chunk.append(sent.text) | |
| length += sent_length + 1 | |
| if chunk: | |
| chunks.append(' '.join(chunk)) | |
| return chunks | |
| def handle_client(client_socket, tts): | |
| try: | |
| while True: | |
| data = client_socket.recv(1024).decode('utf-8') | |
| if not data: | |
| break | |
| character_name, text = data.split('|', 1) | |
| text_chunks = split_text(text, max_length=200) | |
| print(text_chunks) | |
| for chunk in text_chunks: | |
| audio_stream = generate_audio_stream(chunk, tts, character_name) | |
| for audio_chunk in audio_stream: | |
| audio_data = audio_chunk.cpu().numpy().flatten() | |
| client_socket.sendall(audio_data.tobytes()) | |
| client_socket.sendall(b"END_OF_AUDIO") | |
| finally: | |
| client_socket.close() | |
| print("Client disconnected.") | |
| def start_server(): | |
| server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| server.bind(('0.0.0.0', 5000)) | |
| server.listen(5) | |
| print("Server listening on port 5000") | |
| while True: | |
| client_socket, addr = server.accept() | |
| print(f"Accepted connection from {addr}") | |
| client_handler = threading.Thread(target=handle_client, args=(client_socket, tts)) | |
| client_handler.start() | |
| if __name__ == "__main__": | |
| start_server() | |