Convierte texto a audio con Azure Speech y almacenamiento en la nube

  • Imagen de redactor Daniel J. Saldaña
  • 20 de octubre de 2025
Convierte texto a audio con Azure Speech y almacenamiento en la nube

Si alguna vez has querido transformar contenido de texto en archivos de audio de alta calidad y almacenarlos de forma segura en la nube, Azure Speech Services y Azure Blob Storage ofrecen una solución potente y escalable. En este artículo, te guiaré a través del proceso de convertir texto a voz usando Azure Speech Services y luego almacenarlo en Azure Blob Storage, una opción ideal para almacenar y gestionar tus archivos de audio de manera eficiente y segura.

Este proceso es útil en una variedad de escenarios, como la conversión de artículos, posts de blogs, documentos educativos o cualquier otro tipo de contenido textual en audios. A lo largo de este tutorial, utilizaremos ejemplos prácticos basados en Ghost CMS, pero los conceptos y el código son totalmente aplicables a cualquier sistema de gestión de contenido o aplicación que genere texto.

¿Por Qué convertir texto a audio?

El proceso de convertir texto a audio tiene múltiples aplicaciones, entre las que se incluyen:

  • Accesibilidad: Permite a personas con dificultades visuales o de lectura acceder al contenido de forma más cómoda.
  • Mejor Retención: Escuchar contenido puede mejorar la comprensión y retención, especialmente en contextos educativos.
  • Interactividad: Ofrece a los usuarios la opción de consumir contenido sin necesidad de leerlo, lo que fomenta una mayor interacción y flexibilidad.

Servicios necesarios

En este tutorial, utilizaremos dos servicios clave de Azure:

  1. Azure Speech Services: Un servicio de conversión de texto a voz que ofrece voces de alta calidad, como la voz HD Dragon Nanami en japonés.
  2. Azure Blob Storage: Un servicio de almacenamiento en la nube donde guardaremos los archivos de audio generados, con un acceso seguro mediante SAS Tokens (firma de acceso compartido).

Flujo de trabajo

El proceso de convertir texto a audio y almacenarlo en la nube sigue estos pasos:

  1. Prepara el texto: Recibimos el contenido textual que queremos convertir a voz.
  2. Convierte el texto a audio: Usamos Azure Speech Services para generar el audio en el formato adecuado.
  3. Sube el archivo de audio a Azure Blob Storage: Usamos Azure Blob Storage para almacenar el archivo de audio, generando una URL temporal que permite acceder al archivo.

Paso 1: Configuración de Azure Speech Services

El primer paso es configurar Azure Speech Services, que nos permitirá convertir el texto a voz. Necesitarás crear un recurso de Speech Services en el portal de Azure y obtener una clave de suscripción.

Configuración de la voz

Seleccionamos una voz adecuada para el proceso de conversión. En este caso, usaremos la voz HD Dragon Nanami para la conversión de texto a voz en japonés. Aquí tienes el código para configurar la voz:

// Configuración de la voz
export const VOICE_CONFIG = {
voice_name: 'ja-JP-Nanami:DragonHDLatestNeural', // Voz japonesa HD Dragon
language: 'ja-JP', // Idioma japonés
name: 'Nanami Dragon HD Latest',
description: 'Voz japonesa HD Dragon Latest multilingüe'
};
// Función para obtener la configuración de la voz
export function getVoiceConfig() {
return {
voice_name: VOICE_CONFIG.voice_name,
language: VOICE_CONFIG.language
};
}

En este fragmento, definimos la voz Nanami Dragon HD en japonés. Este paso es crucial para que Azure pueda procesar correctamente el texto.

Paso 2: Convertir texto a audio con Azure Speech

Azure Speech Services utiliza SSML (Speech Synthesis Markup Language) para procesar el texto. SSML nos permite controlar cómo se debe leer el texto, incluyendo pausas, tono y velocidad. Vamos a crear una función que convierte el texto en el formato SSML y lo envía a la API de Azure para generar el audio.

Ejemplo de conversión de texto a SSML
export function wrapWithSSML(text) {
const BREAK_MARKER = '___SSML_BREAK___';
const breaks = [];
let sanitizedText = text.replace(/<break\s+time="[^"]+"\s*\/>/g, _ => {
breaks.push(_);
return BREAK_MARKER;
});
sanitizedText = sanitizedText
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&apos;')
.replace(/\*/g, '')
.replace(/[“”«»]/g, '"')
.replace(/[–—]/g, '-');
let breakIdx = 0;
sanitizedText = sanitizedText.replace(new RegExp(BREAK_MARKER, 'g'), () => {
return breaks[breakIdx++] || '<break time="500ms"/>';
});
return `<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="${VOICE_CONFIG.language}">
<voice name="${VOICE_CONFIG.voice_name}">
${sanitizedText}
</voice>
</speak>`;
}

Este código toma el texto de entrada, lo sanitiza y lo convierte en SSML para enviarlo a la API de Azure Speech. Las pausas también se gestionan en este formato, lo que hace que el audio resultante sea más natural y comprensible.

Llamada a la API de Azure Speech

Ahora que tenemos el texto en formato SSML, podemos enviarlo a Azure Speech Services para generar el audio. Aquí te mostramos cómo hacerlo:

const AZURE_SPEECH_KEY = 'tu-clave-de-api';
const AZURE_ENDPOINT = 'https://westeurope.api.cognitive.microsoft.com'; // Cambiar por la región correspondiente
async function generateAudio(ssmlInput) {
const response = await fetch(`${AZURE_ENDPOINT}/cognitiveservices/v1`, {
method: 'POST',
headers: {
'Ocp-Apim-Subscription-Key': AZURE_SPEECH_KEY,
'Content-Type': 'application/ssml+xml',
'X-Microsoft-OutputFormat': 'audio-24khz-160kbitrate-mono-mp3'
},
body: ssmlInput
});
if (!response.ok) {
throw new Error(`Error en Azure Speech: ${response.statusText}`);
}
return await response.arrayBuffer(); // Devuelve el audio en formato binario
}

Este código envía una solicitud POST a Azure Speech Services con el SSML. La respuesta es un archivo de audio, que podemos almacenar en el siguiente paso.

Paso 3: Subir el asudio a Azure Blob Storage

Una vez que el audio ha sido generado, debemos subirlo a Azure Blob Storage para su almacenamiento seguro y accesible. Azure Blob Storage nos permite generar SAS Tokens, que son URLs temporales para acceder al archivo sin exponer la cuenta de almacenamiento.

Subir el archivo a Azure Blob Storage
async function uploadToAzureBlob(audioBuffer, filePath, sasUrl) {
const sasIndex = sasUrl.indexOf('?');
const baseUrl = sasUrl.slice(0, sasIndex);
const sasToken = sasUrl.slice(sasIndex + 1);
const uploadUrl = `${baseUrl}/${filePath}?${sasToken}`;
const response = await fetch(uploadUrl, {
method: 'PUT',
headers: {
'x-ms-blob-type': 'BlockBlob',
'Content-Type': 'audio/mpeg'
},
body: audioBuffer
});
if (!response.ok) {
throw new Error(`Error al subir el audio a Azure Blob Storage: ${response.statusText}`);
}
return uploadUrl; // URL del archivo de audio en Azure Blob Storage
}

Este código sube el archivo de audio generado a Azure Blob Storage, utilizando la URL con el SAS Token para acceder de manera controlada al archivo.

Al integrar Azure Speech Services y Azure Blob Storage en tu flujo de trabajo, podrás transformar cualquier contenido textual en audios de alta calidad y almacenarlos de manera segura en la nube. Esta solución no solo mejora la accesibilidad y la interacción con el contenido, sino que también ofrece una manera eficiente de gestionar los archivos de audio generados, optimizando el almacenamiento y el acceso.

Si queréis ver esta aplicación en funcionamiento, podéis visitar el siguiente enlace: Aprende Japonés.

¡Suscríbete y recibe actualizaciones sobre tecnología, diseño, productividad, programación y mucho más!
0
0