Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import torch
- from TTS.api import TTS
- from datetime import datetime
- import os
- from pydub import AudioSegment
- import re
- def generate_tts(output_folder, text, speaker, index):
- device = "cuda" if torch.cuda.is_available() else "cpu"
- tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)
- if not os.path.exists(output_folder):
- os.mkdir(output_folder)
- filename = re.sub(r"[^A-Za-z0-9_\-\.]", "", text[:50].replace(' ', '_').replace('.', '').lower())
- output = f"{index}_{speaker}_{filename}.wav"
- if not os.path.exists(f'{output_folder}/{output}'):
- tts.tts_to_file(text=text, speaker_wav=f"voices/{speaker}.wav", language="fr", file_path=f'{output_folder}/{output}')
- def merge_audio_files(output_folder):
- combined = AudioSegment.empty()
- folder = os.listdir(output_folder)
- for f in folder:
- if f.startswith('combined'):
- continue
- if f.endswith('.wav'):
- combined += AudioSegment.from_wav(f'{output_folder}/{f}')
- filename = f"{output_folder}/combined_{datetime.now().strftime('%Y%m%d_%H%M')}.wav"
- combined.export(filename, format="wav")
- output_folder = 'outputs/example_dialog1'
- dialog = [
- {"character": "franck", "text": "Bonjour, comment allez-vous?"},
- {"character": "female", "text": "Très bien, merci. Et vous?"},
- ]
- i = 0
- for line in dialog:
- speaker = line["character"]
- text = line["text"]
- generate_tts(output_folder, text, speaker, i)
- i+=1
- merge_audio_files(output_folder)
Advertisement
Add Comment
Please, Sign In to add comment