{ "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": 2, "id": "77deb08f-fec3-4327-b2f9-1c893aacaddc", "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: edge-tts in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (6.1.10)\n", "Requirement already satisfied: aiohttp>=3.8.0 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from edge-tts) (3.9.3)\n", "Requirement already satisfied: certifi>=2023.11.17 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from edge-tts) (2024.2.2)\n", "Requirement already satisfied: aiosignal>=1.1.2 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from aiohttp>=3.8.0->edge-tts) (1.3.1)\n", "Requirement already satisfied: attrs>=17.3.0 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from aiohttp>=3.8.0->edge-tts) (23.2.0)\n", "Requirement already satisfied: frozenlist>=1.1.1 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from aiohttp>=3.8.0->edge-tts) (1.4.1)\n", "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from aiohttp>=3.8.0->edge-tts) (6.0.5)\n", "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from aiohttp>=3.8.0->edge-tts) (1.9.4)\n", "Requirement already satisfied: idna>=2.0 in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (from yarl<2.0,>=1.0->aiohttp>=3.8.0->edge-tts) (3.4)\n", "Requirement already satisfied: pygame in /opt/homebrew/Caskroom/miniconda/base/lib/python3.12/site-packages (2.5.2)\n" ] } ], "source": [ "!pip install edge-tts\n", "!pip install pygame" ] }, { "cell_type": "code", "execution_count": 2, "id": "9aad6634-e833-4ec4-b285-84e051329712", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pygame 2.5.2 (SDL 2.28.3, Python 3.12.1)\n", "Hello from the pygame community. https://www.pygame.org/contribute.html\n", "Files created!\n" ] } ], "source": [ "import asyncio\n", "import edge_tts\n", "import pygame\n", "\n", "TEXT = \"\"\"\n", "cup, father, head, hat, above, mother, bird, sheep, ship, horse, blue, foot, day, eye, boy, nose, mouth, ear, hair, pure, fire, hour\n", "\"\"\"\n", "\n", "Wordlist = TEXT.split(\",\")\n", "\n", "for w in Wordlist:\n", " for VOICE in ['en-US-GuyNeural', 'en-GB-RyanNeural']:\n", " # for VOICE in ['en-US-GuyNeural']:\n", " w = w.strip()\n", " OUTPUT_FILE = f\"{w.replace(' ', '-').replace('?', '')}-{VOICE[3:5].replace('GB', 'UK').lower()}.mp3\"\n", " communicate = edge_tts.Communicate(w, VOICE)\n", " await communicate.save(OUTPUT_FILE) \n", "\n", "print(\"Files created!\") " ] }, { "cell_type": "code", "execution_count": 14, "id": "1e54069c-db63-45ba-86e8-726730b19255", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files created!\n" ] } ], "source": [ "import asyncio\n", "import edge_tts\n", "import pygame\n", "\n", "TEXT = \"happy\"\n", "Wordlist = TEXT.split(\",\")\n", "\n", "for w in Wordlist:\n", " for VOICE in ['zh-CN-YunxiNeural', 'zh-CN-XiaoxiaoNeural']:\n", " w = w.strip()\n", " OUTPUT_FILE = f\"{w}-{VOICE.replace('YunxiNeural', 'male').replace('XiaoxiaoNeural', 'female').lower()}.mp3\"\n", " communicate = edge_tts.Communicate(w, VOICE)\n", " await communicate.save(OUTPUT_FILE) \n", "\n", "print(\"Files created!\") " ] }, { "cell_type": "code", "execution_count": null, "id": "09d5ab47-5807-4ded-a8b9-45277831d425", "metadata": {}, "outputs": [], "source": [ "# 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\n" ] }, { "cell_type": "code", "execution_count": null, "id": "862f0948", "metadata": {}, "outputs": [], "source": [ "pygame.mixer.init()\n", "pygame.mixer.music.load(OUTPUT_FILE)\n", "pygame.mixer.music.play()" ] }, { "cell_type": "code", "execution_count": 3, "id": "00939422-fbf9-4842-b82a-b6106624c075", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files created!\n" ] } ], "source": [ "#American\n", "\n", "import asyncio\n", "import edge_tts\n", "import pygame\n", "\n", "TEXT = \"hands\"\n", "Wordlist = TEXT.split(\",\")\n", "\n", "for w in Wordlist:\n", " # for VOICE in ['en-US-GuyNeural', 'en-US-JennyNeural', 'en-GB-RyanNeural', 'en-GB-SoniaNeural']:\n", " for VOICE in ['en-US-GuyNeural', 'en-US-MichelleNeural']:\n", " w = w.strip()\n", " # OUTPUT_FILE = f\"{w}-{VOICE.replace('EricNeural', 'Guy-Male').replace('JennyNeural', 'Jenny-Female').replace('RyanNeural', 'Ryan-Male').replace('SoniaNeural', 'Sonia-Female').lower()}.mp3\"\n", " OUTPUT_FILE = f\"{w}-{VOICE.replace('EricNeural', 'Male').replace('MichelleNeural', 'Female').replace('en-', '').lower()}.mp3\"\n", " communicate = edge_tts.Communicate(w, VOICE)\n", " await communicate.save(OUTPUT_FILE) \n", "\n", "print(\"Files created!\") " ] }, { "cell_type": "code", "execution_count": 2, "id": "cecefa85-b37d-457e-9e99-e582dabdfb9f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files created!\n" ] } ], "source": [ "#American Sentence\n", "\n", "import asyncio\n", "import edge_tts\n", "import pygame\n", "\n", "TEXT = \"cat,foot\"\n", "Wordlist = TEXT.split(\",\")\n", "\n", "for w in Wordlist:\n", " # for VOICE in ['en-US-GuyNeural', 'en-US-JennyNeural', 'en-GB-RyanNeural', 'en-GB-SoniaNeural']:\n", " for VOICE in ['en-US-EricNeural', 'en-US-MichelleNeural']:\n", " w = w.strip().replace(' ', '-')\n", " # OUTPUT_FILE = f\"{w}-{VOICE.replace('EricNeural', 'Guy-Male').replace('JennyNeural', 'Jenny-Female').replace('RyanNeural', 'Ryan-Male').replace('SoniaNeural', 'Sonia-Female').lower()}.mp3\"\n", " OUTPUT_FILE = f\"{w}-{VOICE.replace('EricNeural', 'Male').replace('MichelleNeural', 'Female').replace('en-', '').lower()}.mp3\"\n", " communicate = edge_tts.Communicate(w, VOICE)\n", " await communicate.save(OUTPUT_FILE) \n", "\n", "print(\"Files created!\") " ] }, { "cell_type": "code", "execution_count": null, "id": "93f68a91-7e6b-45ef-932e-533b695e4ac1", "metadata": {}, "outputs": [], "source": [ "# ru-RU-DmitryNeural\n", "# ko-KR-InJoonNeural" ] }, { "cell_type": "code", "execution_count": 51, "id": "474c3f39-11ed-4d0a-b039-63df8b270044", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files created!\n" ] } ], "source": [ "# British\n", "\n", "import asyncio\n", "import edge_tts\n", "import pygame\n", "\n", "TEXT = \"speak, student, school, frustrate\"\n", "Wordlist = TEXT.split(\",\")\n", "\n", "for w in Wordlist:\n", " # for VOICE in ['en-US-GuyNeural', 'en-US-JennyNeural', 'en-GB-RyanNeural', 'en-GB-SoniaNeural']:\n", " for VOICE in ['en-GB-RyanNeural', 'en-GB-SoniaNeural']:\n", " w = w.strip()\n", " # OUTPUT_FILE = f\"{w}-{VOICE.replace('EricNeural', 'Guy-Male').replace('JennyNeural', 'Jenny-Female').replace('RyanNeural', 'Ryan-Male').replace('SoniaNeural', 'Sonia-Female').lower()}.mp3\"\n", " OUTPUT_FILE = f\"{w}-{VOICE.replace('RyanNeural', 'Male').replace('SoniaNeural', 'Female').replace('en-GB-', 'uk-').lower()}.mp3\"\n", " communicate = edge_tts.Communicate(w, VOICE)\n", " await communicate.save(OUTPUT_FILE) \n", "\n", "print(\"Files created!\") " ] }, { "cell_type": "code", "execution_count": 49, "id": "42ecfe3f-f3ac-4fb7-92d0-795d51972051", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files created!\n" ] } ], "source": [ "#Korean\n", "\n", "import asyncio\n", "import edge_tts\n", "import pygame\n", "\n", "TEXT = \"photo, video\"\n", "Wordlist = TEXT.split(\",\")\n", "\n", "for w in Wordlist:\n", " # for VOICE in ['en-US-GuyNeural', 'en-US-JennyNeural', 'en-GB-RyanNeural', 'en-GB-SoniaNeural']:\n", " for VOICE in ['ko-KR-InJoonNeural']:\n", " w = w.strip()\n", " # OUTPUT_FILE = f\"{w}-{VOICE.replace('EricNeural', 'Guy-Male').replace('JennyNeural', 'Jenny-Female').replace('RyanNeural', 'Ryan-Male').replace('SoniaNeural', 'Sonia-Female').lower()}.mp3\"\n", " OUTPUT_FILE = f\"{w}-{VOICE.replace('InJoonNeural', 'kr').replace('SoniaNeural', 'Female').replace('ko-KR', 'ko').lower()}.mp3\"\n", " communicate = edge_tts.Communicate(w, VOICE)\n", " await communicate.save(OUTPUT_FILE) \n", "\n", "print(\"Files created!\") " ] }, { "cell_type": "code", "execution_count": 55, "id": "95b12e63-f92d-49b4-bd51-a2b9d059fd52", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Files created!\n" ] } ], "source": [ "#Chinese\n", "\n", "import asyncio\n", "import edge_tts\n", "import pygame\n", "\n", "TEXT = \"room\"\n", "Wordlist = TEXT.split(\",\")\n", "\n", "for w in Wordlist:\n", " # for VOICE in ['en-US-GuyNeural', 'en-US-JennyNeural', 'en-GB-RyanNeural', 'en-GB-SoniaNeural']:\n", " for VOICE in ['zh-CN-liaoning-XiaobeiNeural']:\n", " w = w.strip()\n", " # OUTPUT_FILE = f\"{w}-{VOICE.replace('EricNeural', 'Guy-Male').replace('JennyNeural', 'Jenny-Female').replace('RyanNeural', 'Ryan-Male').replace('SoniaNeural', 'Sonia-Female').lower()}.mp3\"\n", " OUTPUT_FILE = f\"{w}-{VOICE.replace('liaoning-XiaobeiNeural', 'zh').replace('SoniaNeural', 'Female').replace('zh-CN', 'cn').lower()}.mp3\"\n", " communicate = edge_tts.Communicate(w, VOICE)\n", " await communicate.save(OUTPUT_FILE) \n", "\n", "print(\"Files created!\") " ] }, { "cell_type": "code", "execution_count": null, "id": "2128587f-e6c8-488d-8c40-6c958b9c735e", "metadata": {}, "outputs": [], "source": [] } ], "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.1" } }, "nbformat": 4, "nbformat_minor": 5 }