yofardev

TTS dialog generator

Jun 27th, 2024 (edited)
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.54 KB | Source Code | 0 0
  1. import torch
  2. from TTS.api import TTS
  3. from datetime import datetime
  4. import os
  5. from pydub import AudioSegment
  6. import re
  7.  
  8.  
  9. def generate_tts(output_folder, text, speaker, index):
  10.     device = "cuda" if torch.cuda.is_available() else "cpu"
  11.     tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)
  12.     if not os.path.exists(output_folder):
  13.         os.mkdir(output_folder)
  14.     filename = re.sub(r"[^A-Za-z0-9_\-\.]", "", text[:50].replace(' ', '_').replace('.', '').lower())
  15.     output = f"{index}_{speaker}_{filename}.wav"
  16.     if not os.path.exists(f'{output_folder}/{output}'):
  17.         tts.tts_to_file(text=text, speaker_wav=f"voices/{speaker}.wav", language="fr", file_path=f'{output_folder}/{output}')
  18.        
  19. def merge_audio_files(output_folder):
  20.     combined = AudioSegment.empty()
  21.     folder = os.listdir(output_folder)
  22.     for f in folder:
  23.         if f.startswith('combined'):
  24.             continue
  25.         if f.endswith('.wav'):
  26.             combined += AudioSegment.from_wav(f'{output_folder}/{f}')
  27.     filename = f"{output_folder}/combined_{datetime.now().strftime('%Y%m%d_%H%M')}.wav"
  28.     combined.export(filename, format="wav")
  29.        
  30.  
  31. output_folder = 'outputs/example_dialog1'
  32.  
  33. dialog = [
  34.     {"character": "franck", "text": "Bonjour, comment allez-vous?"},
  35.     {"character": "female", "text": "Très bien, merci. Et vous?"},
  36. ]
  37.  
  38. i = 0
  39. for line in dialog:
  40.     speaker = line["character"]
  41.     text = line["text"]
  42.     generate_tts(output_folder, text, speaker, i)
  43.     i+=1
  44.  
  45. merge_audio_files(output_folder)
Advertisement
Add Comment
Please, Sign In to add comment