Files
everyone-can-use-english/1000-hours/public/jupyter-notebooks/edge-tts-valcab-pronounciation.ipynb
2024-08-22 17:36:26 +08:00

228 lines
6.8 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "b94f103d-ac43-4d13-83cb-eb5090220881",
"metadata": {},
"source": [
"# EdgeTTS\n",
"\n",
"https://github.com/rany2/edge-tts\n",
"\n",
"edge-tts is a Python module that allows you to use Microsoft Edge's online text-to-speech service from within your Python code or using the provided edge-tts or edge-playback command."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "77deb08f-fec3-4327-b2f9-1c893aacaddc",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [],
"source": [
"%pip install edge-tts pygame"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "71d35cd9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['en-US-GuyNeural', 'en-US-AriaNeural']\n",
"ma\n",
"../audios/ma-us-male.mp3 created\n",
"../audios/ma-us-female.mp3 created\n",
"\n",
"room\n",
"../audios/room-us-male.mp3 created\n",
"../audios/room-us-female.mp3 created\n",
"\n",
"conversation\n",
"../audios/conversation-us-male.mp3 created\n",
"../audios/conversation-us-female.mp3 created\n",
"\n",
"army\n",
"../audios/army-us-male.mp3 created\n",
"../audios/army-us-female.mp3 created\n",
"\n",
"mob\n",
"../audios/mob-us-male.mp3 created\n",
"../audios/mob-us-female.mp3 created\n",
"\n",
"mom\n",
"../audios/mom-us-male.mp3 created\n",
"../audios/mom-us-female.mp3 created\n",
"\n",
"mind\n",
"../audios/mind-us-male.mp3 created\n",
"../audios/mind-us-female.mp3 created\n",
"\n",
"night\n",
"../audios/night-us-male.mp3 created\n",
"../audios/night-us-female.mp3 created\n",
"\n",
"nine\n",
"../audios/nine-us-male.mp3 created\n",
"../audios/nine-us-female.mp3 created\n",
"\n",
"know\n",
"../audios/know-us-male.mp3 created\n",
"../audios/know-us-female.mp3 created\n",
"\n",
"knight\n",
"../audios/knight-us-male.mp3 created\n",
"../audios/knight-us-female.mp3 created\n",
"\n",
"gnaw\n",
"../audios/gnaw-us-male.mp3 created\n",
"../audios/gnaw-us-female.mp3 created\n",
"\n",
"gnome\n",
"../audios/gnome-us-male.mp3 created\n",
"../audios/gnome-us-female.mp3 created\n",
"\n",
"anchor\n",
"../audios/anchor-us-male.mp3 created\n",
"../audios/anchor-us-female.mp3 created\n",
"\n",
"bank\n",
"../audios/bank-us-male.mp3 created\n",
"../audios/bank-us-female.mp3 created\n",
"\n",
"thank\n",
"../audios/thank-us-male.mp3 exists, skipping...\n",
"../audios/thank-us-female.mp3 exists, skipping...\n",
"\n",
"bang\n",
"../audios/bang-us-male.mp3 created\n",
"../audios/bang-us-female.mp3 created\n",
"\n",
"long\n",
"../audios/long-us-male.mp3 created\n",
"../audios/long-us-female.mp3 created\n",
"\n",
"sing\n",
"../audios/sing-us-male.mp3 created\n",
"../audios/sing-us-female.mp3 created\n",
"\n"
]
}
],
"source": [
"import edge_tts\n",
"import os\n",
"import pygame\n",
"import time\n",
"\n",
"async def generate_edge_tts_audio(text, file_name, voice='en-US-GuyNeural', style='newscast-formal', verbose=False, play=False, overwrite=False):\n",
" communicate = edge_tts.Communicate(text, voice)\n",
" # whether file exists?\n",
" if os.path.exists(file_name):\n",
" if overwrite:\n",
" if verbose:\n",
" print(f'{file_name} exists, overwriting...')\n",
" else:\n",
" if verbose:\n",
" print(f'{file_name} exists, skipping...')\n",
" return\n",
" \n",
" await communicate.save(file_name)\n",
" if play:\n",
" pygame.mixer.init()\n",
" pygame.mixer.music.load(file_name)\n",
" pygame.mixer.music.play()\n",
" if verbose:\n",
" print(f'{file_name} created')\n",
" \n",
" time.sleep(1.5)\n",
"\n",
"\n",
"\n",
"voices = [\"en-US-GuyNeural\", \"en-US-AriaNeural\", \"en-GB-RyanNeural\", \"en-GB-LibbyNeural\"]\n",
"regions = ['us', 'us', 'uk', 'uk']\n",
"genders = ['male', 'female', 'male', 'female']\n",
"\n",
"# only_us = False\n",
"only_us = True\n",
"if only_us:\n",
" voices = voices[:2]\n",
" print(voices)\n",
"\n",
"words = \"\"\"\n",
"sam\n",
"\"\"\"\n",
"\n",
"for word in words.strip().split(','):\n",
" print(word)\n",
" for i, voice in enumerate(voices):\n",
" w = word.strip().lower()\n",
" if len(w) > 0:\n",
" filename = f'../audios/{w.replace(\" \", \"-\")}-{regions[i]}-{genders[i]}.mp3'\n",
" await generate_edge_tts_audio(w, filename, voice=voice, verbose=True, overwrite=False, play=True)\n"
]
},
{
"cell_type": "markdown",
"id": "2df59a42",
"metadata": {},
"source": [
"# English Voices\n",
"\n",
"* voice = \"en-US-GuyNeural\" (Male)\n",
"* voice = \"en-US-AnaNeural\" (Female)\n",
"* voice = \"en-US-AndrewNeural\" (Male)\n",
"* voice = \"en-US-AriaNeural\" (Female)\n",
"* voice = \"en-US-AvaNeural\" (Female)\n",
"* voice = \"en-US-BrianNeural\" (Male)\n",
"* voice = \"en-US-ChristopherNeural\" (Male)\n",
"* voice = \"en-US-EmmaNeural\" (Female)\n",
"* voice = \"en-US-EricNeural\" (Male)\n",
"* voice = \"en-US-GuyNeural\" (Male)\n",
"* voice = \"en-US-JennyNeural\" (Female)\n",
"* voice = \"en-US-MichelleNeural\" (Female)\n",
"* voice = \"en-US-RogerNeural\" (Male)\n",
"* voice = \"en-US-SteffanNeural\" (Male)\n",
"* voice = \"en-GB-LibbyNeural\" (Female)\n",
"* voice = \"en-GB-MaisieNeural\" (Female)\n",
"* voice = \"en-GB-RyanNeural\" (Male)\n",
"* voice = \"en-GB-SoniaNeural\" (Female)\n",
"* voice = \"en-GB-ThomasNeural\" (Male)\n",
"* voice = \"en-AU-NatashaNeural\" (Female)\n",
"* voice = \"en-AU-WilliamNeural\" (Male)\n",
"* voice = \"en-CA-ClaraNeural\" (Female)\n",
"* voice = \"en-CA-LiamNeural\" (Male)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}