Local Ai code for text to Voice and Voice to Text

this is a python based free Ai code to use locally for converting text to voice for background script reading.

TEXT TO VOICE

Python install 

pip install fastapi uvicorn python-multipart edge-tts 

main.py – PYTHON CODE

from fastapi import FastAPI, Form, BackgroundTasks

from fastapi.responses import FileResponse

from fastapi.middleware.cors import CORSMiddleware

import edge_tts

import os

import uuid

app = FastAPI()

app.add_middleware(

    CORSMiddleware,

    allow_origins=[“*”],

    allow_credentials=True,

    allow_methods=[“*”],

    allow_headers=[“*”],

)

def remove_file(path: str):

    if os.path.exists(path):

        os.remove(path)

@app.post(“/convert”)

async def convert_text_to_speech(

    background_tasks: BackgroundTasks, 

    text: str = Form(…),

    voice: str = Form(…),

    rate: str = Form(“+0%”),   # Speed adjustment

    pitch: str = Form(“+0Hz”)  # Pitch adjustment

):

    filename = f”{uuid.uuid4()}.mp3″

    filepath = f”./{filename}”

    # Generate speech using Microsoft Edge’s free Neural TTS

    communicate = edge_tts.Communicate(text, voice, rate=rate, pitch=pitch)

    await communicate.save(filepath)

    background_tasks.add_task(remove_file, filepath)

    return FileResponse(filepath, media_type=”audio/mpeg”, filename=”output.mp3″)

Index.html

<!DOCTYPE html>

<html lang=”en”>

<head>

    <meta charset=”UTF-8″>

    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>

    <title>Free AI Voice Studio</title>

    <style>

        body {

            font-family: system-ui, -apple-system, sans-serif;

            background-color: #121212;

            color: #ffffff;

            display: flex;

            justify-content: center;

            align-items: center;

            height: 100vh;

            margin: 0;

        }

        .container {

            background: #1e1e1e;

            padding: 30px;

            border-radius: 12px;

            box-shadow: 0 4px 25px rgba(0,0,0,0.5);

            width: 100%;

            max-width: 600px;

        }

        .controls {

            display: grid;

            grid-template-columns: 1fr 1fr;

            gap: 15px;

            margin-bottom: 15px;

        }

        select, textarea, input[type=”range”] {

            width: 100%;

            padding: 10px;

            background: #2d2d2d;

            color: white;

            border: 1px solid #444;

            border-radius: 8px;

            font-size: 14px;

            box-sizing: border-box;

        }

        .slider-group {

            display: flex;

            flex-direction: column;

            gap: 5px;

        }

        .slider-group label {

            font-size: 13px;

            color: #aaa;

        }

        textarea { resize: vertical; margin-bottom: 15px; }

        button {

            background-color: #10b981;

            color: white;

            border: none;

            padding: 14px;

            font-size: 16px;

            font-weight: bold;

            border-radius: 8px;

            cursor: pointer;

            width: 100%;

            transition: background 0.3s;

        }

        button:hover { background-color: #059669; }

        button:disabled { background-color: #444; cursor: not-allowed; }

        audio { margin-top: 20px; width: 100%; display: none; }

    </style>

</head>

<body>

    <div class=”container”>

        <h2 style=”text-align: center;”>Free AI Voice Studio</h2>

        <div class=”controls”>

            <select id=”voiceSelect” style=”grid-column: span 2;”>

                <optgroup label=”English (US)”>

                    <option value=”en-US-ChristopherNeural”>Christopher (Male)</option>

                    <option value=”en-US-JennyNeural”>Jenny (Female)</option>

                    <option value=”en-US-AriaNeural”>Aria (Female)</option>

                </optgroup>

                <optgroup label=”English (UK)”>

                    <option value=”en-GB-RyanNeural”>Ryan (Male)</option>

                    <option value=”en-GB-SoniaNeural”>Sonia (Female)</option>

                </optgroup>

<optgroup label=”Tamil (தமிழ்)”>

    <option value=”ta-IN-PallaviNeural”>Pallavi (Female – India)</option>

    <option value=”ta-IN-ValluvarNeural”>Valluvar (Male – India)</option>

    <option value=”ta-LK-SaranyaNeural”>Saranya (Female – Sri Lanka)</option>

    <option value=”ta-LK-KumarNeural”>Kumar (Male – Sri Lanka)</option>

    <option value=”ta-SG-VenbaNeural”>Venba (Female – Singapore)</option>

    <option value=”ta-SG-AnbuNeural”>Anbu (Male – Singapore)</option>

    <option value=”ta-MY-KaniNeural”>Kani (Female – Malaysia)</option>

    <option value=”ta-MY-SuryaNeural”>Surya (Male – Malaysia)</option>

</optgroup>

                <optgroup label=”Spanish (Spain)”>

                    <option value=”es-ES-AlvaroNeural”>Alvaro (Male)</option>

                    <option value=”es-ES-ElviraNeural”>Elvira (Female)</option>

                </optgroup>

                <optgroup label=”French (France)”>

                    <option value=”fr-FR-HenriNeural”>Henri (Male)</option>

                    <option value=”fr-FR-DeniseNeural”>Denise (Female)</option>

                </optgroup>

            </select>

            <div class=”slider-group”>

                <label>Speed (Emotion: Slow=Sad, Fast=Excited)</label>

                <input type=”range” id=”rateSlider” min=”-50″ max=”50″ value=”0″>

            </div>

            <div class=”slider-group”>

                <label>Pitch (Tone: Low=Serious, High=Panic)</label>

                <input type=”range” id=”pitchSlider” min=”-50″ max=”50″ value=”0″>

            </div>

        </div>

        <textarea id=”textInput” rows=”5″ placeholder=”Type your script here…”></textarea>

        <button id=”convertBtn” onclick=”convertToSpeech()”>Generate Custom Voice</button>

        <audio id=”audioPlayer” controls></audio>

    </div>

    <script>

        async function convertToSpeech() {

            const text = document.getElementById(‘textInput’).value;

            const voice = document.getElementById(‘voiceSelect’).value;

            // Format for edge-tts (e.g., “+10%”, “-5Hz”)

            const rateVal = document.getElementById(‘rateSlider’).value;

            const pitchVal = document.getElementById(‘pitchSlider’).value;

            const rate = rateVal >= 0 ? `+${rateVal}%` : `${rateVal}%`;

            const pitch = pitchVal >= 0 ? `+${pitchVal}Hz` : `${pitchVal}Hz`;

            const player = document.getElementById(‘audioPlayer’);

            const btn = document.getElementById(‘convertBtn’);

            if (!text.trim()) {

                alert(“Please enter a script.”);

                return;

            }

            btn.innerText = “Synthesizing…”;

            btn.disabled = true;

            const formData = new FormData();

            formData.append(“text”, text);

            formData.append(“voice”, voice);

            formData.append(“rate”, rate);

            formData.append(“pitch”, pitch);

            try {

                const response = await fetch(“http://localhost:8000/convert”, {

                    method: “POST”,

                    body: formData

                });

                if (response.ok) {

                    const blob = await response.blob();

                    const audioUrl = URL.createObjectURL(blob);

                    player.src = audioUrl;

                    player.style.display = “block”;

                    player.play();

                } else {

                    alert(“Failed to generate audio.”);

                }

            } catch (error) {

                console.error(“Error:”, error);

                alert(“Server error. Is the Python backend running?”);

            } finally {

                btn.innerText = “Generate Custom Voice”;

                btn.disabled = false;

            }

        }

    </script>

</body>

</html>

RUN THE PYTHON IN BACKEND 

python -m uvicorn main:app –reload 

RUN THE INDEX.HTML AND RUN THE AI

SUPPORTED LANGUAGE 

af-ZA-AdriNeural                   Female    General                Friendly, Positive

af-ZA-WillemNeural                 Male      General                Friendly, Positive

am-ET-AmehaNeural                  Male      General                Friendly, Positive

am-ET-MekdesNeural                 Female    General                Friendly, Positive

ar-AE-FatimaNeural                 Female    General                Friendly, Positive

ar-AE-HamdanNeural                 Male      General                Friendly, Positive

ar-BH-AliNeural                    Male      General                Friendly, Positive

ar-BH-LailaNeural                  Female    General                Friendly, Positive

ar-DZ-AminaNeural                  Female    General                Friendly, Positive

ar-DZ-IsmaelNeural                 Male      General                Friendly, Positive

ar-EG-SalmaNeural                  Female    General                Friendly, Positive

ar-EG-ShakirNeural                 Male      General                Friendly, Positive

ar-IQ-BasselNeural                 Male      General                Friendly, Positive

ar-IQ-RanaNeural                   Female    General                Friendly, Positive

ar-JO-SanaNeural                   Female    General                Friendly, Positive

ar-JO-TaimNeural                   Male      General                Friendly, Positive

ar-KW-FahedNeural                  Male      General                Friendly, Positive

ar-KW-NouraNeural                  Female    General                Friendly, Positive

ar-LB-LaylaNeural                  Female    General                Friendly, Positive

ar-LB-RamiNeural                   Male      General                Friendly, Positive

ar-LY-ImanNeural                   Female    General                Friendly, Positive

ar-LY-OmarNeural                   Male      General                Friendly, Positive

ar-MA-JamalNeural                  Male      General                Friendly, Positive

ar-MA-MounaNeural                  Female    General                Friendly, Positive

ar-OM-AbdullahNeural               Male      General                Friendly, Positive

ar-OM-AyshaNeural                  Female    General                Friendly, Positive

ar-QA-AmalNeural                   Female    General                Friendly, Positive

ar-QA-MoazNeural                   Male      General                Friendly, Positive

ar-SA-HamedNeural                  Male      General                Friendly, Positive

ar-SA-ZariyahNeural                Female    General                Friendly, Positive

ar-SY-AmanyNeural                  Female    General                Friendly, Positive

ar-SY-LaithNeural                  Male      General                Friendly, Positive

ar-TN-HediNeural                   Male      General                Friendly, Positive

ar-TN-ReemNeural                   Female    General                Friendly, Positive

ar-YE-MaryamNeural                 Female    General                Friendly, Positive

ar-YE-SalehNeural                  Male      General                Friendly, Positive

az-AZ-BabekNeural                  Male      General                Friendly, Positive

az-AZ-BanuNeural                   Female    General                Friendly, Positive

bg-BG-BorislavNeural               Male      General                Friendly, Positive

bg-BG-KalinaNeural                 Female    General                Friendly, Positive

bn-BD-NabanitaNeural               Female    General                Friendly, Positive

bn-BD-PradeepNeural                Male      General                Friendly, Positive

bn-IN-BashkarNeural                Male      General                Friendly, Positive

bn-IN-TanishaaNeural               Female    General                Friendly, Positive

bs-BA-GoranNeural                  Male      General                Friendly, Positive

bs-BA-VesnaNeural                  Female    General                Friendly, Positive

ca-ES-EnricNeural                  Male      General                Friendly, Positive

ca-ES-JoanaNeural                  Female    General                Friendly, Positive

cs-CZ-AntoninNeural                Male      General                Friendly, Positive

cs-CZ-VlastaNeural                 Female    General                Friendly, Positive

cy-GB-AledNeural                   Male      General                Friendly, Positive

cy-GB-NiaNeural                    Female    General                Friendly, Positive

da-DK-ChristelNeural               Female    General                Friendly, Positive

da-DK-JeppeNeural                  Male      General                Friendly, Positive

de-AT-IngridNeural                 Female    General                Friendly, Positive

de-AT-JonasNeural                  Male      General                Friendly, Positive

de-CH-JanNeural                    Male      General                Friendly, Positive

de-CH-LeniNeural                   Female    General                Friendly, Positive

de-DE-AmalaNeural                  Female    General                Friendly, Positive

de-DE-ConradNeural                 Male      General                Friendly, Positive

de-DE-FlorianMultilingualNeural    Male      General                Friendly, Positive

de-DE-KatjaNeural                  Female    General                Friendly, Positive

de-DE-KillianNeural                Male      General                Friendly, Positive

de-DE-SeraphinaMultilingualNeural  Female    General                Friendly, Positive

el-GR-AthinaNeural                 Female    General                Friendly, Positive

el-GR-NestorasNeural               Male      General                Friendly, Positive

en-AU-NatashaNeural                Female    General                Friendly, Positive

en-AU-WilliamMultilingualNeural    Male      General                Friendly, Positive

en-CA-ClaraNeural                  Female    General                Friendly, Positive

en-CA-LiamNeural                   Male      General                Friendly, Positive

en-GB-LibbyNeural                  Female    General                Friendly, Positive

en-GB-MaisieNeural                 Female    General                Friendly, Positive

en-GB-RyanNeural                   Male      General                Friendly, Positive

en-GB-SoniaNeural                  Female    General                Friendly, Positive

en-GB-ThomasNeural                 Male      General                Friendly, Positive

en-HK-SamNeural                    Male      General                Friendly, Positive

en-HK-YanNeural                    Female    General                Friendly, Positive

en-IE-ConnorNeural                 Male      General                Friendly, Positive

en-IE-EmilyNeural                  Female    General                Friendly, Positive

en-IN-NeerjaExpressiveNeural       Female    General                Friendly, Positive

en-IN-NeerjaNeural                 Female    General                Friendly, Positive

en-IN-PrabhatNeural                Male      General                Friendly, Positive

en-KE-AsiliaNeural                 Female    General                Friendly, Positive

en-KE-ChilembaNeural               Male      General                Friendly, Positive

en-NG-AbeoNeural                   Male      General                Friendly, Positive

en-NG-EzinneNeural                 Female    General                Friendly, Positive

en-NZ-MitchellNeural               Male      General                Friendly, Positive

en-NZ-MollyNeural                  Female    General                Friendly, Positive

en-PH-JamesNeural                  Male      General                Friendly, Positive

en-PH-RosaNeural                   Female    General                Friendly, Positive

en-SG-LunaNeural                   Female    General                Friendly, Positive

en-SG-WayneNeural                  Male      General                Friendly, Positive

en-TZ-ElimuNeural                  Male      General                Friendly, Positive

en-TZ-ImaniNeural                  Female    General                Friendly, Positive

en-US-AnaNeural                    Female    Cartoon, Conversation  Cute

en-US-AndrewMultilingualNeural     Male      Conversation, Copilot  Warm, Confident, Authentic, Honest

en-US-AndrewNeural                 Male      Conversation, Copilot  Warm, Confident, Authentic, Honest

en-US-AriaNeural                   Female    News, Novel            Positive, Confident

en-US-AvaMultilingualNeural        Female    Conversation, Copilot  Expressive, Caring, Pleasant, Friendly

en-US-AvaNeural                    Female    Conversation, Copilot  Expressive, Caring, Pleasant, Friendly

en-US-BrianMultilingualNeural      Male      Conversation, Copilot  Approachable, Casual, Sincere

en-US-BrianNeural                  Male      Conversation, Copilot  Approachable, Casual, Sincere

en-US-ChristopherNeural            Male      News, Novel            Reliable, Authority

en-US-EmmaMultilingualNeural       Female    Conversation, Copilot  Cheerful, Clear, Conversational

en-US-EmmaNeural                   Female    Conversation, Copilot  Cheerful, Clear, Conversational

en-US-EricNeural                   Male      News, Novel            Rational

en-US-GuyNeural                    Male      News, Novel            Passion

en-US-JennyNeural                  Female    General                Friendly, Considerate, Comfort

en-US-MichelleNeural               Female    News, Novel            Friendly, Pleasant

en-US-RogerNeural                  Male      News, Novel            Lively

en-US-SteffanNeural                Male      News, Novel            Rational

en-ZA-LeahNeural                   Female    General                Friendly, Positive

en-ZA-LukeNeural                   Male      General                Friendly, Positive

es-AR-ElenaNeural                  Female    General                Friendly, Positive

es-AR-TomasNeural                  Male      General                Friendly, Positive

es-BO-MarceloNeural                Male      General                Friendly, Positive

es-BO-SofiaNeural                  Female    General                Friendly, Positive

es-CL-CatalinaNeural               Female    General                Friendly, Positive

es-CL-LorenzoNeural                Male      General                Friendly, Positive

es-CO-GonzaloNeural                Male      General                Friendly, Positive

es-CO-SalomeNeural                 Female    General                Friendly, Positive

es-CR-JuanNeural                   Male      General                Friendly, Positive

es-CR-MariaNeural                  Female    General                Friendly, Positive

es-CU-BelkysNeural                 Female    General                Friendly, Positive

es-CU-ManuelNeural                 Male      General                Friendly, Positive

es-DO-EmilioNeural                 Male      General                Friendly, Positive

es-DO-RamonaNeural                 Female    General                Friendly, Positive

es-EC-AndreaNeural                 Female    General                Friendly, Positive

es-EC-LuisNeural                   Male      General                Friendly, Positive

es-ES-AlvaroNeural                 Male      General                Friendly, Positive

es-ES-ElviraNeural                 Female    General                Friendly, Positive

es-ES-XimenaNeural                 Female    General                Friendly, Positive

es-GQ-JavierNeural                 Male      General                Friendly, Positive

es-GQ-TeresaNeural                 Female    General                Friendly, Positive

es-GT-AndresNeural                 Male      General                Friendly, Positive

es-GT-MartaNeural                  Female    General                Friendly, Positive

es-HN-CarlosNeural                 Male      General                Friendly, Positive

es-HN-KarlaNeural                  Female    General                Friendly, Positive

es-MX-DaliaNeural                  Female    General                Friendly, Positive

es-MX-JorgeNeural                  Male      General                Friendly, Positive

es-NI-FedericoNeural               Male      General                Friendly, Positive

es-NI-YolandaNeural                Female    General                Friendly, Positive

es-PA-MargaritaNeural              Female    General                Friendly, Positive

es-PA-RobertoNeural                Male      General                Friendly, Positive

es-PE-AlexNeural                   Male      General                Friendly, Positive

es-PE-CamilaNeural                 Female    General                Friendly, Positive

es-PR-KarinaNeural                 Female    General                Friendly, Positive

es-PR-VictorNeural                 Male      General                Friendly, Positive

es-PY-MarioNeural                  Male      General                Friendly, Positive

es-PY-TaniaNeural                  Female    General                Friendly, Positive

es-SV-LorenaNeural                 Female    General                Friendly, Positive

es-SV-RodrigoNeural                Male      General                Friendly, Positive

es-US-AlonsoNeural                 Male      General                Friendly, Positive

es-US-PalomaNeural                 Female    General                Friendly, Positive

es-UY-MateoNeural                  Male      General                Friendly, Positive

es-UY-ValentinaNeural              Female    General                Friendly, Positive

es-VE-PaolaNeural                  Female    General                Friendly, Positive

es-VE-SebastianNeural              Male      General                Friendly, Positive

et-EE-AnuNeural                    Female    General                Friendly, Positive

et-EE-KertNeural                   Male      General                Friendly, Positive

fa-IR-DilaraNeural                 Female    General                Friendly, Positive

fa-IR-FaridNeural                  Male      General                Friendly, Positive

fi-FI-HarriNeural                  Male      General                Friendly, Positive

fi-FI-NooraNeural                  Female    General                Friendly, Positive

fil-PH-AngeloNeural                Male      General                Friendly, Positive

fil-PH-BlessicaNeural              Female    General                Friendly, Positive

fr-BE-CharlineNeural               Female    General                Friendly, Positive

fr-BE-GerardNeural                 Male      General                Friendly, Positive

fr-CA-AntoineNeural                Male      General                Friendly, Positive

fr-CA-JeanNeural                   Male      General                Friendly, Positive

fr-CA-SylvieNeural                 Female    General                Friendly, Positive

fr-CA-ThierryNeural                Male      General                Friendly, Positive

fr-CH-ArianeNeural                 Female    General                Friendly, Positive

fr-CH-FabriceNeural                Male      General                Friendly, Positive

fr-FR-DeniseNeural                 Female    General                Friendly, Positive

fr-FR-EloiseNeural                 Female    General                Friendly, Positive

fr-FR-HenriNeural                  Male      General                Friendly, Positive

fr-FR-RemyMultilingualNeural       Male      General                Friendly, Positive

fr-FR-VivienneMultilingualNeural   Female    General                Friendly, Positive

ga-IE-ColmNeural                   Male      General                Friendly, Positive

ga-IE-OrlaNeural                   Female    General                Friendly, Positive

gl-ES-RoiNeural                    Male      General                Friendly, Positive

gl-ES-SabelaNeural                 Female    General                Friendly, Positive

gu-IN-DhwaniNeural                 Female    General                Friendly, Positive

gu-IN-NiranjanNeural               Male      General                Friendly, Positive

he-IL-AvriNeural                   Male      General                Friendly, Positive

he-IL-HilaNeural                   Female    General                Friendly, Positive

hi-IN-MadhurNeural                 Male      General                Friendly, Positive

hi-IN-SwaraNeural                  Female    General                Friendly, Positive

hr-HR-GabrijelaNeural              Female    General                Friendly, Positive

hr-HR-SreckoNeural                 Male      General                Friendly, Positive

hu-HU-NoemiNeural                  Female    General                Friendly, Positive

hu-HU-TamasNeural                  Male      General                Friendly, Positive

id-ID-ArdiNeural                   Male      General                Friendly, Positive

id-ID-GadisNeural                  Female    General                Friendly, Positive

is-IS-GudrunNeural                 Female    General                Friendly, Positive

is-IS-GunnarNeural                 Male      General                Friendly, Positive

it-IT-DiegoNeural                  Male      General                Friendly, Positive

it-IT-ElsaNeural                   Female    General                Friendly, Positive

it-IT-GiuseppeMultilingualNeural   Male      General                Friendly, Positive

it-IT-IsabellaNeural               Female    General                Friendly, Positive

iu-Cans-CA-SiqiniqNeural           Female    General                Friendly, Positive

iu-Cans-CA-TaqqiqNeural            Male      General                Friendly, Positive

iu-Latn-CA-SiqiniqNeural           Female    General                Friendly, Positive

iu-Latn-CA-TaqqiqNeural            Male      General                Friendly, Positive

ja-JP-KeitaNeural                  Male      General                Friendly, Positive

ja-JP-NanamiNeural                 Female    General                Friendly, Positive

jv-ID-DimasNeural                  Male      General                Friendly, Positive

jv-ID-SitiNeural                   Female    General                Friendly, Positive

ka-GE-EkaNeural                    Female    General                Friendly, Positive

ka-GE-GiorgiNeural                 Male      General                Friendly, Positive

kk-KZ-AigulNeural                  Female    General                Friendly, Positive

kk-KZ-DauletNeural                 Male      General                Friendly, Positive

km-KH-PisethNeural                 Male      General                Friendly, Positive

km-KH-SreymomNeural                Female    General                Friendly, Positive

kn-IN-GaganNeural                  Male      General                Friendly, Positive

kn-IN-SapnaNeural                  Female    General                Friendly, Positive

ko-KR-HyunsuMultilingualNeural     Male      General                Friendly, Positive

ko-KR-InJoonNeural                 Male      General                Friendly, Positive

ko-KR-SunHiNeural                  Female    General                Friendly, Positive

lo-LA-ChanthavongNeural            Male      General                Friendly, Positive

lo-LA-KeomanyNeural                Female    General                Friendly, Positive

lt-LT-LeonasNeural                 Male      General                Friendly, Positive

lt-LT-OnaNeural                    Female    General                Friendly, Positive

lv-LV-EveritaNeural                Female    General                Friendly, Positive

lv-LV-NilsNeural                   Male      General                Friendly, Positive

mk-MK-AleksandarNeural             Male      General                Friendly, Positive

mk-MK-MarijaNeural                 Female    General                Friendly, Positive

ml-IN-MidhunNeural                 Male      General                Friendly, Positive

ml-IN-SobhanaNeural                Female    General                Friendly, Positive

mn-MN-BataaNeural                  Male      General                Friendly, Positive

mn-MN-YesuiNeural                  Female    General                Friendly, Positive

mr-IN-AarohiNeural                 Female    General                Friendly, Positive

mr-IN-ManoharNeural                Male      General                Friendly, Positive

ms-MY-OsmanNeural                  Male      General                Friendly, Positive

ms-MY-YasminNeural                 Female    General                Friendly, Positive

mt-MT-GraceNeural                  Female    General                Friendly, Positive

mt-MT-JosephNeural                 Male      General                Friendly, Positive

my-MM-NilarNeural                  Female    General                Friendly, Positive

my-MM-ThihaNeural                  Male      General                Friendly, Positive

nb-NO-FinnNeural                   Male      General                Friendly, Positive

nb-NO-PernilleNeural               Female    General                Friendly, Positive

ne-NP-HemkalaNeural                Female    General                Friendly, Positive

ne-NP-SagarNeural                  Male      General                Friendly, Positive

nl-BE-ArnaudNeural                 Male      General                Friendly, Positive

nl-BE-DenaNeural                   Female    General                Friendly, Positive

nl-NL-ColetteNeural                Female    General                Friendly, Positive

nl-NL-FennaNeural                  Female    General                Friendly, Positive

nl-NL-MaartenNeural                Male      General                Friendly, Positive

pl-PL-MarekNeural                  Male      General                Friendly, Positive

pl-PL-ZofiaNeural                  Female    General                Friendly, Positive

ps-AF-GulNawazNeural               Male      General                Friendly, Positive

ps-AF-LatifaNeural                 Female    General                Friendly, Positive

pt-BR-AntonioNeural                Male      General                Friendly, Positive

pt-BR-FranciscaNeural              Female    General                Friendly, Positive

pt-BR-ThalitaMultilingualNeural    Female    General                Friendly, Positive

pt-PT-DuarteNeural                 Male      General                Friendly, Positive

pt-PT-RaquelNeural                 Female    General                Friendly, Positive

ro-RO-AlinaNeural                  Female    General                Friendly, Positive

ro-RO-EmilNeural                   Male      General                Friendly, Positive

ru-RU-DmitryNeural                 Male      General                Friendly, Positive

ru-RU-SvetlanaNeural               Female    General                Friendly, Positive

si-LK-SameeraNeural                Male      General                Friendly, Positive

si-LK-ThiliniNeural                Female    General                Friendly, Positive

sk-SK-LukasNeural                  Male      General                Friendly, Positive

sk-SK-ViktoriaNeural               Female    General                Friendly, Positive

sl-SI-PetraNeural                  Female    General                Friendly, Positive

sl-SI-RokNeural                    Male      General                Friendly, Positive

so-SO-MuuseNeural                  Male      General                Friendly, Positive

so-SO-UbaxNeural                   Female    General                Friendly, Positive

sq-AL-AnilaNeural                  Female    General                Friendly, Positive

sq-AL-IlirNeural                   Male      General                Friendly, Positive

sr-RS-NicholasNeural               Male      General                Friendly, Positive

sr-RS-SophieNeural                 Female    General                Friendly, Positive

su-ID-JajangNeural                 Male      General                Friendly, Positive

su-ID-TutiNeural                   Female    General                Friendly, Positive

sv-SE-MattiasNeural                Male      General                Friendly, Positive

sv-SE-SofieNeural                  Female    General                Friendly, Positive

sw-KE-RafikiNeural                 Male      General                Friendly, Positive

sw-KE-ZuriNeural                   Female    General                Friendly, Positive

sw-TZ-DaudiNeural                  Male      General                Friendly, Positive

sw-TZ-RehemaNeural                 Female    General                Friendly, Positive

ta-IN-PallaviNeural                Female    General                Friendly, Positive

ta-IN-ValluvarNeural               Male      General                Friendly, Positive

ta-LK-KumarNeural                  Male      General                Friendly, Positive

ta-LK-SaranyaNeural                Female    General                Friendly, Positive

ta-MY-KaniNeural                   Female    General                Friendly, Positive

ta-MY-SuryaNeural                  Male      General                Friendly, Positive

ta-SG-AnbuNeural                   Male      General                Friendly, Positive

ta-SG-VenbaNeural                  Female    General                Friendly, Positive

te-IN-MohanNeural                  Male      General                Friendly, Positive

te-IN-ShrutiNeural                 Female    General                Friendly, Positive

th-TH-NiwatNeural                  Male      General                Friendly, Positive

th-TH-PremwadeeNeural              Female    General                Friendly, Positive

tr-TR-AhmetNeural                  Male      General                Friendly, Positive

tr-TR-EmelNeural                   Female    General                Friendly, Positive

uk-UA-OstapNeural                  Male      General                Friendly, Positive

uk-UA-PolinaNeural                 Female    General                Friendly, Positive

ur-IN-GulNeural                    Female    General                Friendly, Positive

ur-IN-SalmanNeural                 Male      General                Friendly, Positive

ur-PK-AsadNeural                   Male      General                Friendly, Positive

ur-PK-UzmaNeural                   Female    General                Friendly, Positive

uz-UZ-MadinaNeural                 Female    General                Friendly, Positive

uz-UZ-SardorNeural                 Male      General                Friendly, Positive

vi-VN-HoaiMyNeural                 Female    General                Friendly, Positive

vi-VN-NamMinhNeural                Male      General                Friendly, Positive

zh-CN-XiaoxiaoNeural               Female    News, Novel            Warm

zh-CN-XiaoyiNeural                 Female    Cartoon, Novel         Lively

zh-CN-YunjianNeural                Male      Sports,  Novel         Passion

zh-CN-YunxiNeural                  Male      Novel                  Lively, Sunshine

zh-CN-YunxiaNeural                 Male      Cartoon, Novel         Cute

zh-CN-YunyangNeural                Male      News                   Professional, Reliable

zh-CN-liaoning-XiaobeiNeural       Female    Dialect                Humorous

zh-CN-shaanxi-XiaoniNeural         Female    Dialect                Bright

zh-HK-HiuGaaiNeural                Female    General                Friendly, Positive

zh-HK-HiuMaanNeural                Female    General                Friendly, Positive

zh-HK-WanLungNeural                Male      General                Friendly, Positive

zh-TW-HsiaoChenNeural              Female    General                Friendly, Positive

zh-TW-HsiaoYuNeural                Female    General                Friendly, Positive

zh-TW-YunJheNeural                 Male      General                Friendly, Positive

zu-ZA-ThandoNeural                 Female    General                Friendly, Positive

zu-ZA-ThembaNeural                 Male      General                Friendly, Positive

VOICE TO TEXT

Step 1: Install the AI Library

Stop your server if it’s running, and install the new requirements in your terminal:

Bash

pip install fastapi uvicorn python-multipart faster-whisper

Step 2: The Backend (main.py)

We will create a new endpoint that accepts an audio file from the website, feeds it to the Whisper AI, and returns the transcribed text.

Python 

from fastapi import FastAPI, UploadFile, File

from fastapi.middleware.cors import CORSMiddleware

from faster_whisper import WhisperModel

import os

import uuid

app = FastAPI()

# Enable CORS for the frontend

app.add_middleware(

    CORSMiddleware,

    allow_origins=[“*”],

    allow_credentials=True,

    allow_methods=[“*”],

    allow_headers=[“*”],

)

# Load the AI Model. “base” is fast and accurate enough for most CPUs. 

# It will automatically download the model the first time you run this script.

print(“Loading AI Model… This may take a minute the first time.”)

model = WhisperModel(“base”, device=”cpu”, compute_type=”int8″)

print(“AI Model Ready!”)

@app.post(“/transcribe”)

async def transcribe_audio(audio: UploadFile = File(…)):

    # Save the incoming audio file temporarily

    filename = f”{uuid.uuid4()}.webm”

    with open(filename, “wb”) as buffer:

        buffer.write(await audio.read())

    try:

        # Ask the AI to transcribe the audio

        # It automatically detects the language (English, Tamil, etc.)

        segments, info = model.transcribe(filename, beam_size=5)

        # Combine all transcribed segments into one paragraph

        transcription = ” “.join([segment.text for segment in segments])

        # Delete the temporary audio file to save space

        if os.path.exists(filename):

            os.remove(filename)

        return {

            “text”: transcription.strip(),

            “detected_language”: info.language

        }

    except Exception as e:

        if os.path.exists(filename):

            os.remove(filename)

        return {“error”: str(e)}

Step 3: The Frontend (index.html)

This HTML file uses your browser’s built-in microphone to record audio. When you stop recording, it packages the audio and sends it to the FastAPI backend.

HTML

<!DOCTYPE html>

<html lang=”en”>

<head>

    <meta charset=”UTF-8″>

    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>

    <title>AI Voice to Text</title>

    <style>

        body {

            font-family: system-ui, -apple-system, sans-serif;

            background-color: #121212;

            color: #ffffff;

            display: flex;

            justify-content: center;

            align-items: center;

            height: 100vh;

            margin: 0;

        }

        .container {

            background: #1e1e1e;

            padding: 30px;

            border-radius: 12px;

            box-shadow: 0 4px 25px rgba(0,0,0,0.5);

            width: 100%;

            max-width: 500px;

            text-align: center;

        }

        .controls {

            display: flex;

            gap: 15px;

            margin-bottom: 20px;

        }

        button {

            color: white;

            border: none;

            padding: 14px;

            font-size: 16px;

            font-weight: bold;

            border-radius: 8px;

            cursor: pointer;

            width: 100%;

            transition: background 0.3s;

        }

        #recordBtn { background-color: #ef4444; }

        #recordBtn:hover { background-color: #dc2626; }

        #stopBtn { background-color: #6b7280; }

        #stopBtn:hover { background-color: #4b5563; }

        #stopBtn:disabled { background-color: #374151; cursor: not-allowed; }

        textarea {

            width: 100%;

            padding: 15px;

            background: #2d2d2d;

            color: white;

            border: 1px solid #444;

            border-radius: 8px;

            font-size: 16px;

            box-sizing: border-box;

            resize: vertical;

            min-height: 150px;

        }

        .status { margin-bottom: 15px; font-size: 14px; color: #aaa; height: 20px;}

    </style>

</head>

<body>

    <div class=”container”>

        <h2>AI Speech to Text</h2>

        <div class=”status” id=”statusText”>Ready to record</div>

        <div class=”controls”>

            <button id=”recordBtn” onclick=”startRecording()”>🎤 Start Recording</button>

            <button id=”stopBtn” onclick=”stopRecording()” disabled>⏹️ Stop & Transcribe</button>

        </div>

        <textarea id=”outputText” placeholder=”Your transcribed text will appear here…”></textarea>

    </div>

    <script>

        let mediaRecorder;

        let audioChunks = [];

        async function startRecording() {

            try {

                // Request microphone access

                const stream = await navigator.mediaDevices.getUserMedia({ audio: true });

                mediaRecorder = new MediaRecorder(stream);

                mediaRecorder.ondataavailable = (event) => {

                    audioChunks.push(event.data);

                };

                mediaRecorder.onstop = sendAudioToBackend;

                audioChunks = [];

                mediaRecorder.start();

                // Update UI

                document.getElementById(‘statusText’).innerText = “Recording… Speak now!”;

                document.getElementById(‘statusText’).style.color = “#ef4444”;

                document.getElementById(‘recordBtn’).disabled = true;

                document.getElementById(‘stopBtn’).disabled = false;

                document.getElementById(‘recordBtn’).style.backgroundColor = “#444”;

                document.getElementById(‘stopBtn’).style.backgroundColor = “#ef4444”;

                document.getElementById(‘outputText’).value = “”;

            } catch (err) {

                alert(“Microphone access denied. Please allow microphone permissions in your browser.”);

            }

        }

        function stopRecording() {

            mediaRecorder.stop();

            // Update UI

            document.getElementById(‘statusText’).innerText = “Transcribing with AI… Please wait.”;

            document.getElementById(‘statusText’).style.color = “#10b981”;

            document.getElementById(‘stopBtn’).disabled = true;

            document.getElementById(‘recordBtn’).disabled = false;

            document.getElementById(‘recordBtn’).style.backgroundColor = “#ef4444”;

            document.getElementById(‘stopBtn’).style.backgroundColor = “#6b7280”;

        }

        async function sendAudioToBackend() {

            // Create a file from the recorded audio

            const audioBlob = new Blob(audioChunks, { type: ‘audio/webm’ });

            const formData = new FormData();

            formData.append(“audio”, audioBlob, “recording.webm”);

            try {

                const response = await fetch(“http://localhost:8000/transcribe”, {

                    method: “POST”,

                    body: formData

                });

                if (response.ok) {

                    const data = await response.json();

                    document.getElementById(‘outputText’).value = data.text;

                    document.getElementById(‘statusText’).innerText = `Detected Language: ${data.detected_language}`;

                    document.getElementById(‘statusText’).style.color = “#aaa”;

                } else {

                    document.getElementById(‘statusText’).innerText = “Transcription failed.”;

                }

            } catch (error) {

                console.error(“Error:”, error);

                document.getElementById(‘statusText’).innerText = “Server error. Is the Python backend running?”;

            }

        }

    </script>

</body>

</html>

Step 4: How to Run It

  1. Start your backend using the bypass method:

Bash

python -m uvicorn main:app –reload

  1. Open your index.html file in a web browser.
  2. Click Start Recording (your browser will pop up asking for permission to use the microphone. Click Allow).
  3. Speak clearly into your mic (try English or Tamil!).
  4. Click Stop & Transcribe. Within a few seconds, the Whisper AI will process the audio locally on your machine and type out exactly what you said.

Leave a Reply

Your email address will not be published. Required fields are marked *