Nova funció Polidic

Polidic, voldria afegir una funció nova a polidic: afegir un botó nou a continuació de l’entrada ‘cercar’ i el botó cercar/confirmar, aquest botó conte un altaveu com icona, de forma que al pemèr-lo converteix el text de l’entrada en àudio (veu anglesa). És complicat?

No, no és gaire complicat! Afegir un botó amb un icona d’altaveu que llegeixi en veu alta (text-to-speech, TTS) el contingut de l’entrada de cerca en anglès és una funcionalitat bastant estàndard en navegadors moderns, gràcies a l’API Web Speech API, concretament la part de SpeechSynthesis.

Aquí tens una guia senzilla per implementar-ho a Polidic:


✅ Passos per afegir el botó de lectura en veu alta

1. Afegir el botó al HTML

Suposant que tens una entrada de text amb id searchInput i un botó de cerca, afegeix un botó nou al costat:

<input type="text" id="searchInput" placeholder="Cerca...">
<button id="searchButton">Cercar</button>
<button id="speakButton" title="Llegir en veu alta">
  <span>🔊</span> <!-- o usa un ícona SVG o Font Awesome -->
</button>

💡 Si vols un ícona més professional, pots fer servir una llibreria com Font Awesome (<i class="fas fa-volume-up"></i>) o un SVG.


2. Afegir el JavaScript per fer la lectura

document.getElementById('speakButton').addEventListener('click', () => {
  const text = document.getElementById('searchInput').value.trim();
  if (!text) return; // No diu res si està buit

  // Cancel·la qualsevol parla anterior
  speechSynthesis.cancel();

  const utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = 'en-US'; // Veu en anglès (USA)
  utterance.rate = 1;       // Velocitat normal
  utterance.pitch = 1;      // To normal

  // Opcional: escull una veu específica en anglès si vols
  // speechSynthesis.getVoices() es carrega asíncronament, així que cal esperar
  utterance.addEventListener('start', () => {
    // Opcional: canviar l’estat del botó (ex: desactivar temporalment)
  });

  speechSynthesis.speak(utterance);
});

⚠️ Nota important: speechSynthesis.getVoices() pot trigar a carregar. Si vols triar una veu concreta (per exemple, “Google US English”), cal esperar almenys un esdeveniment voiceschanged:

let voicesLoaded = false;
speechSynthesis.addEventListener('voiceschanged', () => {
  voicesLoaded = true;
});

// I dins del botó:
if (voicesLoaded) {
  const voices = speechSynthesis.getVoices();
  const englishVoice = voices.find(voice => voice.lang === 'en-US');
  if (englishVoice) utterance.voice = englishVoice;
}

Però no és obligatori: si només poses utterance.lang = 'en-US', el navegador triarà automàticament una veu en anglès disponible.


3. Estils (opcional)

Per fer que el botó quedi bé:

#speakButton {
  background: none;
  border: none;
  font-size: 1.2em;
  cursor: pointer;
  padding: 0 8px;
  color: #333;
}
#speakButton:hover {
  color: #007bff;
}

✅ Comprovacions finals

  • Funciona en Chrome, Edge, Firefox (Safari també, però amb menys veus).
  • No requereix connexió externa: és nativa del navegador.
  • Respecta la privacitat: el text no surt del navegador.

🧪 Prova ràpida

Obre la consola del navegador i prova això:

const u = new SpeechSynthesisUtterance("Hello, this is a test.");
u.lang = "en-US";
speechSynthesis.speak(u);

Si ho llegeix en anglès, ja tens el suport actiu!


Vols que t’ajudi a integrar-ho directament al codi actual de Polidic? Si em passes un tros del HTML/JS on està la barra de cerca, et puc donar el codi exacte per enganxar.