Spaces:
Runtime error
Runtime error
File size: 2,300 Bytes
819225f |
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 |
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()
|