voz voces texto programa para online mejor latino google español escribiendo crear convertir convertidor javascript audio text-to-speech chromium webspeech-api

javascript - voces - texto a voz mp3



¿Cómo crear o convertir texto a audio en el navegador chromium? (1)

Al intentar determinar una solución para ¿Cómo utilizar Web Speech API en chromium? encontrado que

var voices = window.speechSynthesis.getVoices();

devuelve una matriz vacía para el identificador de voices .

No estoy seguro si la falta de soporte en el navegador Chromium está relacionada con este problema. No está bien, Google: ¿La extensión de voz Chromium fue eliminada después de espiar ?

Preguntas:

1) ¿Hay alguna solución alternativa que pueda implementar el requisito de crear o convertir audio de texto en el navegador Chrome?

2) ¿Cómo podemos, la comunidad de desarrolladores, crear una base de datos de código abierto de archivos de audio que reflejen palabras comunes y poco comunes; servido con encabezados CORS apropiados?


Se han encontrado varias soluciones alternativas que proporcionan la capacidad de crear audio a partir de texto; dos de los cuales requieren solicitar un recurso externo, el otro usa meSpeak.js de @masswerk.

Usando el enfoque descrito en Descargar la pronunciación de audio de palabras de Google , que sufre de no poder predeterminar qué palabras existen realmente como un archivo en el recurso sin escribir un script de shell o realizar una solicitud HEAD para verificar si se produce un error de red . Por ejemplo, la palabra "hacer" no está disponible en el recurso utilizado a continuación.

window.addEventListener("load", () => { const textarea = document.querySelector("textarea"); const audio = document.createElement("audio"); const mimecodec = "audio/webm; codecs=opus"; audio.controls = "controls"; document.body.appendChild(audio); audio.addEventListener("canplay", e => { audio.play(); }); let words = textarea.value.trim().match(//w+/g); const url = "https://ssl.gstatic.com/dictionary/static/sounds/de/0/"; const mediatype = ".mp3"; Promise.all( words.map(word => fetch(`https://query.yahooapis.com/v1/public/yql?q=select * from data.uri where url="${url}${word}${mediatype}"&format=json&callback=`) .then(response => response.json()) .then(({query: {results: {url}}}) => fetch(url).then(response => response.blob()) .then(blob => blob) ) ) ) .then(blobs => { // const a = document.createElement("a"); audio.src = URL.createObjectURL(new Blob(blobs, { type: mimecodec })); // a.download = words.join("-") + ".webm"; // a.click() }) .catch(err => console.log(err)); });

<textarea>what it does my ninja?</textarea>

Recursos en Wikimedia Commons Categoría: El dominio público no se necesita desde el mismo directorio, consulte ¿Cómo recuperar el contenido de palabras de Wiktionary? , wikionary API - significado de las palabras .

Si se conoce la ubicación precisa del recurso, se puede solicitar el audio, aunque la URL puede incluir prefijos que no sean la propia palabra.

fetch("https://upload.wikimedia.org/wikipedia/commons/c/c5/En-uk-hello-1.ogg") .then(response => response.blob()) .then(blob => new Audio(URL.createObjectURL(blob)).play());

No estoy completamente seguro de cómo usar la API de Wikipedia , ¿Cómo obtener contenido de Wikipedia usando la API de Wikipedia? , ¿Existe una API de wikipedia limpia solo para recuperar el resumen del contenido? para obtener solo el archivo de audio. La respuesta JSON debería analizarse para el texto que termina en .ogg , luego se debe realizar una segunda solicitud para el recurso en sí.

fetch("https://en.wiktionary.org/w/api.php?action=parse&format=json&prop=text&callback=?&page=hello") .then(response => response.text()) .then(data => { new Audio(location.protocol + data.match(/////upload/.wikimedia/.org//wikipedia//commons//[/d-/]+[/w-]+/.ogg/).pop()).play() }) // "//upload.wikimedia.org/wikipedia/commons/5/52/En-us-hello.ogg/"

que registros

Fetch API cannot load https://en.wiktionary.org/w/api.php?action=parse&format=json&prop=text&callback=?&page=hello. No ''Access-Control-Allow-Origin'' header is present on the requested resource

cuando no se solicita del mismo origen. Tendríamos que intentar usar YQL nuevamente, aunque no YQL seguros de cómo formular la consulta para evitar errores.

El tercer enfoque utiliza una versión ligeramente modificada de meSpeak.js para generar el audio sin realizar una solicitud externa. La modificación fue crear una devolución de llamada adecuada para el método .loadConfig()

fetch("https://gist.githubusercontent.com/guest271314/f48ee0658bc9b948766c67126ba9104c/raw/958dd72d317a6087df6b7297d4fee91173e0844d/mespeak.js") .then(response => response.text()) .then(text => { const script = document.createElement("script"); script.textContent = text; document.body.appendChild(script); return Promise.all([ new Promise(resolve => { meSpeak.loadConfig("https://gist.githubusercontent.com/guest271314/8421b50dfa0e5e7e5012da132567776a/raw/501fece4fd1fbb4e73f3f0dc133b64be86dae068/mespeak_config.json", resolve) }), new Promise(resolve => { meSpeak.loadVoice("https://gist.githubusercontent.com/guest271314/fa0650d0e0159ac96b21beaf60766bcc/raw/82414d646a7a7ef11bb04ddffe4091f78ef121d3/en.json", resolve) }) ]) }) .then(() => { // takes approximately 14 seconds to get here console.log(meSpeak.isConfigLoaded()); meSpeak.speak("what it do my ninja", { amplitude: 100, pitch: 5, speed: 150, wordgap: 1, variant: "m7" }); }) .catch(err => console.log(err));

Una advertencia del enfoque anterior es que los tres archivos tardan aproximadamente 14 segundos y medio en cargarse antes de reproducir el audio. Sin embargo, evita solicitudes externas.

Sería positivo para uno o ambos 1) crear un FOSS , una base de datos mantenida por el desarrollador o un directorio de sonidos para palabras comunes y no comunes; 2) realice un mayor desarrollo de meSpeak.js para reducir el tiempo de carga de los tres archivos necesarios; y utilice enfoques basados ​​en Promise para proporcionar notificaciones del progreso de la carga de los archivos y la disponibilidad de la aplicación.

Según esta estimación de los usuarios, sería un recurso útil si los propios desarrolladores crearan y contribuyeran a una base de datos en línea de archivos que respondieran con un archivo de audio de la palabra específica. ¿No está completamente seguro de si github es el lugar apropiado para alojar archivos de audio? Tendrá que considerar las posibles opciones si se muestra interés en dicho proyecto.