⭐⭐Conversor de text a veu

Simple text to speak mut
Per afegir aquest codi de sota cal usar el connector Enlighter, afegir un bloc a la entrada amb el mateix nom i descarregat el codi del porta-retalls
<!DOCTYPE html>
<!-- Declara que aquest document és HTML5 -->
<html lang="ca">
<!-- L'idioma principal del contingut és el català -->
<head>
  <meta charset="UTF-8">
  <!-- Assegura la correcta visualització de caràcters especials i emojis -->
  <title>Conversor de text a veu</title>
  <!-- Títol que apareix a la pestanya del navegador -->

  <style>
    /* Estils generals de la pàgina */
    body {
      font-family: sans-serif;        /* Tipus de lletra llegible */
      padding: 2em;                   /* Espai al voltant del contingut */
      background-color: hsl(194, 91%, 91%); /* Fons blau clar suau */
    }

    /* Estil comú per al camp de text i el selector d'idioma */
    input, select {
      font-size: 1.2em;               /* Mida de lletra una mica més gran */
      padding: 0.5em;                 /* Espai interior dins dels camps */
      margin-top: 1em;                /* Separació superior */
      width: 100%;                    /* Ocupen tot l'ample disponible */
      max-width: 500px;               /* Però no més de 500px */
    }

    /* Estil del botó d'altaveu (?) */
    #speakBtn {
      font-size: 2em;                 /* Molt gran per facilitar la interacció */
      background: none;               /* Sense fons */
      border: none;                   /* Sense vores */
      cursor: pointer;                /* Cursor en forma de mà en passar-hi */
      margin-top: 1em;                /* Separació respecte als elements anteriors */
    }

    /* Efecte visual quan l'usuari passa el ratolí pel botó */
    #speakBtn:hover {
      color: #c8e3f8;                 /* Canvia a un blau més clar */
    }
  </style>
</head>

<body>
  <!-- Títol visible de la pàgina amb un emoji d'altaveu -->
  <h2>? Conversor de text a veu</h2>

  <!-- Camp on l'usuari escriu el text a sintetitzar -->
  <input type="text" id="cercar" placeholder="Escriu el text que vols escoltar">

  <!-- Selector per triar la veu/idioma desitjat -->
  <select id="voiceSelect">
    <option value="">Selecciona idioma</option>
    <option value="en-US">?? Anglès (US)</option>
    <option value="en-GB">?? Anglès (UK)</option>
    <option value="fr-FR">?? Francès</option>
    <option value="de-DE">?? Alemany</option>
    <option value="it-IT">?? Italià</option>
    <option value="pt-PT">?? Portuguès</option>
    <option value="es-ES">?? Espanyol</option>
    <option value="ca-ES">?️ Català</option>
    <!-- Els valors (value) són codis d'idioma estàndard BCP 47 -->
  </select>

  <!-- Botó per iniciar la síntesi de veu -->
  <button id="speakBtn" title="Escolta el text">?</button>

  <script>
    // S'executa quan tot el contingut HTML ha carregat
    document.addEventListener('DOMContentLoaded', () => {
      // Referències als elements HTML que necessitarem
      const inputElement = document.getElementById('cercar');      // Camp de text
      const speakBtn = document.getElementById('speakBtn');        // Botó d'altaveu
      const voiceSelect = document.getElementById('voiceSelect');  // Selector d'idioma
      let voices = [];  // Array per emmagatzemar les veus disponibles

      // Funció per carregar la llista de veus del sistema
      function loadVoices() {
        voices = speechSynthesis.getVoices();
        // Aquesta API pot trigar a carregar les veus en alguns navegadors
      }

      // Assegurem-nos que les veus es carreguin, fins i tot si arriben més tard
      speechSynthesis.onvoiceschanged = loadVoices;
      loadVoices(); // Intentem carregar-les ja des del principi

      // Funció principal: converteix el text a veu
      function speakText() {
        const text = inputElement.value.trim(); // Obtenim i netegem el text
        if (!text) return; // Si està buit, no fem res

        const selectedLang = voiceSelect.value; // Idioma seleccionat per l'usuari
        const utterance = new SpeechSynthesisUtterance(text); // Creem l'objecte de parla

        // Busquem una veu que coincideixi exactament amb l'idioma triat
        const voice = voices.find(v => v.lang === selectedLang);

        if (voice) {
          // Si la trobem, l'assignem
          utterance.voice = voice;
          utterance.lang = voice.lang;
        } else {
          // Si no, mostrem un avís a la consola (per depuració)
          console.log('No s\'ha trobat cap veu per a ' + selectedLang);
          // Nota: l'API pot usar una veu per defecte si no s'assigna cap
        }

        // Paràmetres opcionals de parla
        utterance.rate = 1;   // Velocitat normal (1 = 100%)
        utterance.pitch = 1;  // To normal

        // Cancel·lem qualsevol parla anterior per evitar solapaments
        speechSynthesis.cancel();
        // Iniciem la nova síntesi de veu
        speechSynthesis.speak(utterance);
      }

      // Quan l'usuari fa clic al botó, es llegeix el text
      speakBtn.addEventListener('click', speakText);

      // ⚠️ Aquesta línia fa que el text es llegeixi AUTOMÀTICAMENT cada 10 segons
      // Pot ser útil per a demostracions, però pot resultar molest en ús normal
      setInterval(speakText, 10000);
    });
  </script>
</body>
</html>
<!DOCTYPE html>
<html lang="ca">
<head>
  <meta charset="UTF-8">
  <title>Conversor de text a veu</title>
  <style>
    body {
      font-family: sans-serif;
      padding: 2em;
      background-color: #f4f4f4;
    }
    input {
      font-size: 1.2em;
      padding: 0.5em;
      margin-top: 1em;
      width: 100%;
      max-width: 500px;
    }
    #speakBtn {
      font-size: 2em;
      background: none;
      border: none;
      cursor: pointer;
      margin-top: 1em;
    }
    #speakBtn:hover {
      color: #0078D7;
    }
  </style>
</head>
<body>
  <h2>? Conversor de text a veu</h2>
  <input type="text" id="cercar" placeholder="Escriu el text que vols escoltar">
  <button id="speakBtn" title="Escolta el text">?</button>

  <script>
    document.addEventListener('DOMContentLoaded', () => {
      const inputElement = document.getElementById('cercar');
      const speakBtn = document.getElementById('speakBtn');
      let voices = [];

      function loadVoices() {
        voices = speechSynthesis.getVoices();
      }

      speechSynthesis.onvoiceschanged = loadVoices;
      loadVoices();

      function speakText() {
        const text = inputElement.value.trim();
        if (!text) return;

        const utterance = new SpeechSynthesisUtterance(text);
        const zira = voices.find(v => v.name === 'Microsoft Zira - English (United States)');

        if (zira) {
          utterance.voice = zira;
          utterance.lang = zira.lang;
        }

        utterance.rate = 1;
        utterance.pitch = 1;

        speechSynthesis.cancel();
        speechSynthesis.speak(utterance);
      }

      speakBtn.addEventListener('click', speakText);

      // ? Repetir cada 10 segons
      setInterval(speakText, 10000);
    });
  </script>
</body>
</html>

Script PowerShell: Test de veu amb entrada personalitzada

Script:

# Crear l'objecte de síntesi de veu
$speak = New-Object -ComObject SAPI.SpVoice

# Mostrar les veus disponibles
Write-Host "Veus disponibles:"
$voices = $speak.GetVoices()
for ($i = 0; $i -lt $voices.Count; $i++) {
    Write-Host "$i - " $voices.Item($i).GetDescription()
}

# Seleccionar veu
$index = Read-Host "Introdueix el número de la veu que vols utilitzar"
$speak.Voice = $voices.Item($index)

# Entrada de text
$entrada = Read-Host "Introdueix el text que vols escoltar"

# Reproduir el text
$speak.Speak($entrada)

?️ Com executar-lo

  1. Obre PowerShell com a administrador.
  2. Enganxa el codi anterior.
  3. Se’t mostrarà la llista de veus disponibles.
  4. Introdueix el número corresponent a la veu que vols provar.
  5. Escriu el text que vols que es llegeixi.
  • Aquest script accedeix a les veus SAPI, com Microsoft David Desktop, Zira Desktop, etc.
  • Les veus Neural del Narrador (com JennyNeural, HelenaNeural) no són accessibles amb aquest mètode directe. Si vols, et puc preparar una versió amb WinRT per accedir a les veus OneCore.

Amb les veus del narrador:

Vols que et generi també la versió avançada amb WinRT per accedir a les veus del Narrador?

# Requereix Windows 10/11 i PowerShell 5.x o superior

Add-Type -AssemblyName System.Runtime.WindowsRuntime
$SynthType = [Windows.Media.SpeechSynthesis.SpeechSynthesizer]
$Synth = New-Object $SynthType

# Llistar veus disponibles
$voices = $Synth.AllVoices
Write-Host "Veus OneCore disponibles:"
for ($i = 0; $i -lt $voices.Count; $i++) {
    $voice = $voices[$i]
    Write-Host "$i - $($voice.DisplayName) [$($voice.Language)]"
}

# Seleccionar veu
$index = Read-Host "Introdueix el número de la veu que vols utilitzar"
$Synth.Voice = $voices[$index]

# Entrada de text
$text = Read-Host "Introdueix el text que vols escoltar"

# Sintetitzar i reproduir
$stream = $Synth.SynthesizeTextToStreamAsync($text).GetAwaiter().GetResult()
$player = New-Object System.Media.SoundPlayer
$player.Stream = $stream.AsStream()
$player.PlaySync()

Com executar-lo

  1. Obre PowerShell com a administrador.
  2. Enganxa el codi anterior.
  3. Veuràs la llista de veus OneCore disponibles (amb nom i idioma).
  4. Introdueix el número de la veu que vols provar.
  5. Escriu el text que vols escoltar.