|
import random |
|
import shutil |
|
import os |
|
|
|
import asyncio |
|
import random |
|
|
|
import edge_tts |
|
from edge_tts import VoicesManager |
|
import uuid |
|
import shutil |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TTSTalker(): |
|
def __init__(self, selected_voice, gender, language) -> None: |
|
self.selected_voice = selected_voice |
|
self.gender = gender |
|
self.language = language |
|
self.voice = asyncio.run(self.get_voice(gender, language)) |
|
|
|
async def get_voice(self, gender, language): |
|
voices = await VoicesManager.create() |
|
voices = voices.find(Gender=gender, Language=language) |
|
voice = random.choice(voices)["Name"] |
|
return voice |
|
|
|
async def amain(self, text, file, voice) -> None: |
|
"""Main function""" |
|
|
|
|
|
|
|
communicate = edge_tts.Communicate(text, voice) |
|
await communicate.save(file) |
|
|
|
|
|
def test(self, text, audio_path=None): |
|
if not os.path.exists(audio_path): |
|
os.mkdir(audio_path) |
|
voice_uuid = str(uuid.uuid4())[:5] + '.wav' |
|
audio_file = os.path.join(audio_path, voice_uuid) |
|
asyncio.run(self.amain(text, audio_file, self.voice)) |
|
return audio_file |
|
|
|
|
|
if __name__ == "__main__": |
|
audio_dir = 'test' |
|
tts_talker = TTSTalker('', 'Male', 'en').test('hello', audio_dir) |
|
tts_talker = TTSTalker('', 'Male', 'zh').test('hello', audio_dir) |
|
tts_talker = TTSTalker('', 'Female', 'en').test('hello',audio_dir) |
|
tts_talker = TTSTalker('', 'Female', 'zh').test('hello', audio_dir) |