Advanced Text To Speech Converter

This program uses a single column .csv file to create .mp3 audio files, row by row.

Usage

This is a way of creating a library of audio files in bulk, from segments of text.

Prerequisites

You will need to install the “edge TTS” and “pydub” libraries.

pip install edge-tts
pip install pydub

How to use it

  1. Save the script below in the folder of your choice
  2. Rename the file you want to convert to audio as “input.csv” and save it in the same folder as the script. Each row will be converted to a separate audio file.
  3. Run the script
  4. The audio files are saved in the “output” folder
import asyncio
import edge_tts
import csv
import os

async def process_text(text, voice, output_filename):
    communicate = edge_tts.Communicate(text, voice)
    await communicate.save(output_filename)

async def main():
    # Read CSV
    with open('input.csv', 'r') as csv_file:
        csv_reader = csv.reader(csv_file)
        rows = list(csv_reader)

    voice = "en-GB-ThomasNeural"
    output_folder = "output"

    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    for i, row in enumerate(rows):
        concatenated_text = ' '.join(cell_text for cell_text in row if cell_text.strip())  # Concatenate occupied cell texts
        output_filename = os.path.join(output_folder, f"output_{i}.mp3")
        
        await process_text(concatenated_text, voice, output_filename)
        
        if i < len(rows) - 1:
            await asyncio.sleep(0.5)  # Half second gap between rows

    print("Finished")

loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()

There are a few settings you can adjust:

1) The voice: this script uses “Libby”, a UK accented female voice. At the end of this post I provide the complete list of Edge TTS voices: just replace “en-GB-LibbyNeural” with your preferred voice
2) Reading speed: you can adjust this using the “rate=” line. In this case, the speed is 50% faster than nominal. Try different settings and see how the reading speed changes.

Edge TTS Voices

How to read the voice labels:
EXAMPLE: en-IN-NeerjaNeural, Gender: Female
en – means the voice speaks English
IN – means the accent is Indian

Name: af-ZA-AdriNeural, Gender: FemaleName: af-ZA-WillemNeural, Gender: Male
Name: am-ET-AmehaNeural, Gender: MaleName: am-ET-MekdesNeural, Gender: Female
Name: ar-AE-FatimaNeural, Gender: FemaleName: ar-AE-HamdanNeural, Gender: Male
Name: ar-BH-AliNeural, Gender: MaleName: ar-BH-LailaNeural, Gender: Female
Name: ar-DZ-AminaNeural, Gender: FemaleName: ar-DZ-IsmaelNeural, Gender: Male
Name: ar-EG-SalmaNeural, Gender: FemaleName: ar-EG-ShakirNeural, Gender: Male
Name: ar-IQ-BasselNeural, Gender: MaleName: ar-IQ-RanaNeural, Gender: Female
Name: ar-JO-SanaNeural, Gender: FemaleName: ar-JO-TaimNeural, Gender: Male
Name: ar-KW-FahedNeural, Gender: MaleName: ar-KW-NouraNeural, Gender: Female
Name: ar-LB-LaylaNeural, Gender: FemaleName: ar-LB-RamiNeural, Gender: Male
Name: ar-LY-ImanNeural, Gender: FemaleName: ar-LY-OmarNeural, Gender: Male
Name: ar-MA-JamalNeural, Gender: MaleName: ar-MA-MounaNeural, Gender: Female
Name: ar-OM-AbdullahNeural, Gender: MaleName: ar-OM-AyshaNeural, Gender: Female
Name: ar-QA-AmalNeural, Gender: FemaleName: ar-QA-MoazNeural, Gender: Male
Name: ar-SA-HamedNeural, Gender: MaleName: ar-SA-ZariyahNeural, Gender: Female
Name: ar-SY-AmanyNeural, Gender: FemaleName: ar-SY-LaithNeural, Gender: Male
Name: ar-TN-HediNeural, Gender: MaleName: ar-TN-ReemNeural, Gender: Female
Name: ar-YE-MaryamNeural, Gender: FemaleName: ar-YE-SalehNeural, Gender: Male
Name: az-AZ-BabekNeural, Gender: MaleName: az-AZ-BanuNeural, Gender: Female
Name: bg-BG-BorislavNeural, Gender: MaleName: bg-BG-KalinaNeural, Gender: Female
Name: bn-BD-NabanitaNeural, Gender: FemaleName: bn-BD-PradeepNeural, Gender: Male
Name: bn-IN-BashkarNeural, Gender: MaleName: bn-IN-TanishaaNeural, Gender: Female
Name: bs-BA-GoranNeural, Gender: MaleName: bs-BA-VesnaNeural, Gender: Female
Name: ca-ES-EnricNeural, Gender: MaleName: ca-ES-JoanaNeural, Gender: Female
Name: cs-CZ-AntoninNeural, Gender: MaleName: cs-CZ-VlastaNeural, Gender: Female
Name: cy-GB-AledNeural, Gender: MaleName: cy-GB-NiaNeural, Gender: Female
Name: da-DK-ChristelNeural, Gender: FemaleName: da-DK-JeppeNeural, Gender: Male
Name: de-AT-IngridNeural, Gender: FemaleName: de-AT-JonasNeural, Gender: Male
Name: de-CH-JanNeural, Gender: MaleName: de-CH-LeniNeural, Gender: Female
Name: de-DE-AmalaNeural, Gender: FemaleName: de-DE-ConradNeural, Gender: Male
Name: de-DE-KatjaNeural, Gender: FemaleName: de-DE-KillianNeural, Gender: Male
Name: el-GR-AthinaNeural, Gender: FemaleName: el-GR-NestorasNeural, Gender: Male
Name: en-AU-NatashaNeural, Gender: FemaleName: en-AU-WilliamNeural, Gender: Male
Name: en-CA-ClaraNeural, Gender: FemaleName: en-CA-LiamNeural, Gender: Male
Name: en-GB-LibbyNeural, Gender: FemaleName: en-GB-MaisieNeural, Gender: Female
Name: en-GB-RyanNeural, Gender: MaleName: en-GB-SoniaNeural, Gender: Female
Name: en-GB-ThomasNeural, Gender: MaleName: en-HK-SamNeural, Gender: Male
Name: en-HK-YanNeural, Gender: FemaleName: en-IE-ConnorNeural, Gender: Male
Name: en-IE-EmilyNeural, Gender: FemaleName: en-IN-NeerjaExpressiveNeural, Gender: Female
Name: en-IN-NeerjaNeural, Gender: FemaleName: en-IN-PrabhatNeural, Gender: Male
Name: en-KE-AsiliaNeural, Gender: FemaleName: en-KE-ChilembaNeural, Gender: Male
Name: en-NG-AbeoNeural, Gender: MaleName: en-NG-EzinneNeural, Gender: Female
Name: en-NZ-MitchellNeural, Gender: MaleName: en-NZ-MollyNeural, Gender: Female
Name: en-PH-JamesNeural, Gender: MaleName: en-PH-RosaNeural, Gender: Female
Name: en-SG-LunaNeural, Gender: FemaleName: en-SG-WayneNeural, Gender: Male
Name: en-TZ-ElimuNeural, Gender: MaleName: en-TZ-ImaniNeural, Gender: Female
Name: en-US-AnaNeural, Gender: FemaleName: en-US-AriaNeural, Gender: Female
Name: en-US-ChristopherNeural, Gender: MaleName: en-US-EricNeural, Gender: Male
Name: en-US-GuyNeural, Gender: MaleName: en-US-JennyNeural, Gender: Female
Name: en-US-MichelleNeural, Gender: FemaleName: en-US-RogerNeural, Gender: Male
Name: en-US-SteffanNeural, Gender: MaleName: en-ZA-LeahNeural, Gender: Female
Name: en-ZA-LukeNeural, Gender: MaleName: es-AR-ElenaNeural, Gender: Female
Name: es-AR-TomasNeural, Gender: MaleName: es-BO-MarceloNeural, Gender: Male
Name: es-BO-SofiaNeural, Gender: FemaleName: es-CL-CatalinaNeural, Gender: Female
Name: es-CL-LorenzoNeural, Gender: MaleName: es-CO-GonzaloNeural, Gender: Male
Name: es-CO-SalomeNeural, Gender: FemaleName: es-CR-JuanNeural, Gender: Male
Name: es-CR-MariaNeural, Gender: FemaleName: es-CU-BelkysNeural, Gender: Female
Name: es-CU-ManuelNeural, Gender: MaleName: es-DO-EmilioNeural, Gender: Male
Name: es-DO-RamonaNeural, Gender: FemaleName: es-EC-AndreaNeural, Gender: Female
Name: es-EC-LuisNeural, Gender: MaleName: es-ES-AlvaroNeural, Gender: Male
Name: es-ES-ElviraNeural, Gender: FemaleName: es-GQ-JavierNeural, Gender: Male
Name: es-GQ-TeresaNeural, Gender: FemaleName: es-GT-AndresNeural, Gender: Male
Name: es-GT-MartaNeural, Gender: FemaleName: es-HN-CarlosNeural, Gender: Male
Name: es-HN-KarlaNeural, Gender: FemaleName: es-MX-DaliaNeural, Gender: Female
Name: es-MX-JorgeNeural, Gender: MaleName: es-NI-FedericoNeural, Gender: Male
Name: es-NI-YolandaNeural, Gender: FemaleName: es-PA-MargaritaNeural, Gender: Female
Name: es-PA-RobertoNeural, Gender: MaleName: es-PE-AlexNeural, Gender: Male
Name: es-PE-CamilaNeural, Gender: FemaleName: es-PR-KarinaNeural, Gender: Female
Name: es-PR-VictorNeural, Gender: MaleName: es-PY-MarioNeural, Gender: Male
Name: es-PY-TaniaNeural, Gender: FemaleName: es-SV-LorenaNeural, Gender: Female
Name: es-SV-RodrigoNeural, Gender: MaleName: es-US-AlonsoNeural, Gender: Male
Name: es-US-PalomaNeural, Gender: FemaleName: es-UY-MateoNeural, Gender: Male
Name: es-UY-ValentinaNeural, Gender: FemaleName: es-VE-PaolaNeural, Gender: Female
Name: es-VE-SebastianNeural, Gender: MaleName: et-EE-AnuNeural, Gender: Female
Name: et-EE-KertNeural, Gender: MaleName: fa-IR-DilaraNeural, Gender: Female
Name: fa-IR-FaridNeural, Gender: MaleName: fi-FI-HarriNeural, Gender: Male
Name: fi-FI-NooraNeural, Gender: FemaleName: fil-PH-AngeloNeural, Gender: Male
Name: fil-PH-BlessicaNeural, Gender: FemaleName: fr-BE-CharlineNeural, Gender: Female
Name: fr-BE-GerardNeural, Gender: MaleName: fr-CA-AntoineNeural, Gender: Male
Name: fr-CA-JeanNeural, Gender: MaleName: fr-CA-SylvieNeural, Gender: Female
Name: fr-CH-ArianeNeural, Gender: FemaleName: fr-CH-FabriceNeural, Gender: Male
Name: fr-FR-DeniseNeural, Gender: FemaleName: fr-FR-EloiseNeural, Gender: Female
Name: fr-FR-HenriNeural, Gender: MaleName: ga-IE-ColmNeural, Gender: Male
Name: ga-IE-OrlaNeural, Gender: FemaleName: gl-ES-RoiNeural, Gender: Male
Name: gl-ES-SabelaNeural, Gender: FemaleName: gu-IN-DhwaniNeural, Gender: Female
Name: gu-IN-NiranjanNeural, Gender: MaleName: he-IL-AvriNeural, Gender: Male
Name: he-IL-HilaNeural, Gender: FemaleName: hi-IN-MadhurNeural, Gender: Male
Name: hi-IN-SwaraNeural, Gender: FemaleName: hr-HR-GabrijelaNeural, Gender: Female
Name: hr-HR-SreckoNeural, Gender: MaleName: hu-HU-NoemiNeural, Gender: Female
Name: hu-HU-TamasNeural, Gender: MaleName: id-ID-ArdiNeural, Gender: Male
Name: id-ID-GadisNeural, Gender: FemaleName: is-IS-GudrunNeural, Gender: Female
Name: is-IS-GunnarNeural, Gender: MaleName: it-IT-DiegoNeural, Gender: Male
Name: it-IT-ElsaNeural, Gender: FemaleName: it-IT-IsabellaNeural, Gender: Female
Name: ja-JP-KeitaNeural, Gender: MaleName: ja-JP-NanamiNeural, Gender: Female
Name: jv-ID-DimasNeural, Gender: MaleName: jv-ID-SitiNeural, Gender: Female
Name: ka-GE-EkaNeural, Gender: FemaleName: ka-GE-GiorgiNeural, Gender: Male
Name: kk-KZ-AigulNeural, Gender: FemaleName: kk-KZ-DauletNeural, Gender: Male
Name: km-KH-PisethNeural, Gender: MaleName: km-KH-SreymomNeural, Gender: Female
Name: kn-IN-GaganNeural, Gender: MaleName: kn-IN-SapnaNeural, Gender: Female
Name: ko-KR-InJoonNeural, Gender: MaleName: ko-KR-SunHiNeural, Gender: Female
Name: lo-LA-ChanthavongNeural, Gender: MaleName: lo-LA-KeomanyNeural, Gender: Female
Name: lt-LT-LeonasNeural, Gender: MaleName: lt-LT-OnaNeural, Gender: Female
Name: lv-LV-EveritaNeural, Gender: FemaleName: lv-LV-NilsNeural, Gender: Male
Name: mk-MK-AleksandarNeural, Gender: MaleName: mk-MK-MarijaNeural, Gender: Female
Name: ml-IN-MidhunNeural, Gender: MaleName: ml-IN-SobhanaNeural, Gender: Female
Name: mn-MN-BataaNeural, Gender: MaleName: mn-MN-YesuiNeural, Gender: Female
Name: mr-IN-AarohiNeural, Gender: FemaleName: mr-IN-ManoharNeural, Gender: Male
Name: ms-MY-OsmanNeural, Gender: MaleName: ms-MY-YasminNeural, Gender: Female
Name: mt-MT-GraceNeural, Gender: FemaleName: mt-MT-JosephNeural, Gender: Male
Name: my-MM-NilarNeural, Gender: FemaleName: my-MM-ThihaNeural, Gender: Male
Name: nb-NO-FinnNeural, Gender: MaleName: nb-NO-PernilleNeural, Gender: Female
Name: ne-NP-HemkalaNeural, Gender: FemaleName: ne-NP-SagarNeural, Gender: Male
Name: nl-BE-ArnaudNeural, Gender: MaleName: nl-BE-DenaNeural, Gender: Female
Name: nl-NL-ColetteNeural, Gender: FemaleName: nl-NL-FennaNeural, Gender: Female
Name: nl-NL-MaartenNeural, Gender: MaleName: pl-PL-MarekNeural, Gender: Male
Name: pl-PL-ZofiaNeural, Gender: FemaleName: ps-AF-GulNawazNeural, Gender: Male
Name: ps-AF-LatifaNeural, Gender: FemaleName: pt-BR-AntonioNeural, Gender: Male
Name: pt-BR-FranciscaNeural, Gender: FemaleName: pt-PT-DuarteNeural, Gender: Male
Name: pt-PT-RaquelNeural, Gender: FemaleName: ro-RO-AlinaNeural, Gender: Female
Name: ro-RO-EmilNeural, Gender: MaleName: ru-RU-DmitryNeural, Gender: Male
Name: ru-RU-SvetlanaNeural, Gender: FemaleName: si-LK-SameeraNeural, Gender: Male
Name: si-LK-ThiliniNeural, Gender: FemaleName: sk-SK-LukasNeural, Gender: Male
Name: sk-SK-ViktoriaNeural, Gender: FemaleName: sl-SI-PetraNeural, Gender: Female
Name: sl-SI-RokNeural, Gender: MaleName: so-SO-MuuseNeural, Gender: Male
Name: so-SO-UbaxNeural, Gender: FemaleName: sq-AL-AnilaNeural, Gender: Female
Name: sq-AL-IlirNeural, Gender: MaleName: sr-RS-NicholasNeural, Gender: Male
Name: sr-RS-SophieNeural, Gender: FemaleName: su-ID-JajangNeural, Gender: Male
Name: su-ID-TutiNeural, Gender: FemaleName: sv-SE-MattiasNeural, Gender: Male
Name: sv-SE-SofieNeural, Gender: FemaleName: sw-KE-RafikiNeural, Gender: Male
Name: sw-KE-ZuriNeural, Gender: FemaleName: sw-TZ-DaudiNeural, Gender: Male
Name: sw-TZ-RehemaNeural, Gender: FemaleName: ta-IN-PallaviNeural, Gender: Female
Name: ta-IN-ValluvarNeural, Gender: MaleName: ta-LK-KumarNeural, Gender: Male
Name: ta-LK-SaranyaNeural, Gender: FemaleName: ta-MY-KaniNeural, Gender: Female
Name: ta-MY-SuryaNeural, Gender: MaleName: ta-SG-AnbuNeural, Gender: Male
Name: ta-SG-VenbaNeural, Gender: FemaleName: te-IN-MohanNeural, Gender: Male
Name: te-IN-ShrutiNeural, Gender: FemaleName: th-TH-NiwatNeural, Gender: Male
Name: th-TH-PremwadeeNeural, Gender: FemaleName: tr-TR-AhmetNeural, Gender: Male
Name: tr-TR-EmelNeural, Gender: FemaleName: uk-UA-OstapNeural, Gender: Male
Name: uk-UA-PolinaNeural, Gender: FemaleName: ur-IN-GulNeural, Gender: Female
Name: ur-IN-SalmanNeural, Gender: MaleName: ur-PK-AsadNeural, Gender: Male
Name: ur-PK-UzmaNeural, Gender: FemaleName: uz-UZ-MadinaNeural, Gender: Female
Name: uz-UZ-SardorNeural, Gender: MaleName: vi-VN-HoaiMyNeural, Gender: Female
Name: vi-VN-NamMinhNeural, Gender: MaleName: zh-CN-XiaoxiaoNeural, Gender: Female
Name: zh-CN-XiaoyiNeural, Gender: FemaleName: zh-CN-YunjianNeural, Gender: Male
Name: zh-CN-YunxiNeural, Gender: MaleName: zh-CN-YunxiaNeural, Gender: Male
Name: zh-CN-YunyangNeural, Gender: MaleName: zh-CN-liaoning-XiaobeiNeural, Gender: Female
Name: zh-CN-shaanxi-XiaoniNeural, Gender: FemaleName: zh-HK-HiuGaaiNeural, Gender: Female
Name: zh-HK-HiuMaanNeural, Gender: FemaleName: zh-HK-WanLungNeural, Gender: Male
Name: zh-TW-HsiaoChenNeural, Gender: FemaleName: zh-TW-HsiaoYuNeural, Gender: Female
Name: zh-TW-YunJheNeural, Gender: MaleName: zu-ZA-ThandoNeural, Gender: Female
Name: zu-ZA-ThembaNeural, Gender: Male,