Duino commited on
Commit
bfdf354
1 Parent(s): 733ab99

Create tts_transformers_stream.py

Browse files
Files changed (1) hide show
  1. tts_transformers_stream.py +58 -0
tts_transformers_stream.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from transformers import SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan
3
+ from datasets import load_dataset
4
+ import torch
5
+ import soundfile as sf
6
+ import random
7
+ import time
8
+
9
+ st.title('Multiply TTS Generator')
10
+
11
+ text = st.text_input(
12
+ label="write your word or sentence",
13
+ value="Hi,duino"
14
+ )
15
+
16
+ num_random_voices = st.number_input(
17
+ label="Enter the number of random voices",
18
+ min_value=1,
19
+ value=1,
20
+ step=1
21
+ )
22
+
23
+ output_filename = ""
24
+
25
+ def generate_speech():
26
+ global output_filename
27
+
28
+ processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")
29
+ model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts")
30
+ vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")
31
+ inputs = processor(text=text, return_tensors="pt")
32
+
33
+ embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation")
34
+ total_voices = len(embeddings_dataset)
35
+
36
+ random_voices = random.sample(range(total_voices), num_random_voices)
37
+
38
+ combined_speech = []
39
+ for index, voice_index in enumerate(random_voices):
40
+ speaker_embeddings = torch.tensor(embeddings_dataset[voice_index]["xvector"]).unsqueeze(0)
41
+ speech = model.generate_speech(inputs["input_ids"], speaker_embeddings, vocoder=vocoder)
42
+ combined_speech.extend(speech.numpy())
43
+
44
+ if index != len(random_voices) - 1:
45
+ # Add a pause of 2 seconds between voices
46
+ pause_samples = int(16000 * 2) # 2 seconds at 16kHz sample rate
47
+ pause = torch.zeros(pause_samples)
48
+ combined_speech.extend(pause)
49
+
50
+ output_filename = "_".join(text.split()) + "_speech.wav"
51
+ sf.write(output_filename, combined_speech, samplerate=16000)
52
+
53
+ if st.button("Generate"):
54
+ generate_speech()
55
+ audio_file = open(output_filename, 'rb')
56
+ audio_bytes = audio_file.read()
57
+ st.audio(audio_bytes, format="audio/wav")
58
+ st.write("Speech generated and saved as: " + output_filename)