""

martes, 21 de julio de 2026

Convertir txt a mp3 en Python

 edge-tts es una excelente librería de Python que te permite usar las voces en línea de Microsoft Edge para convertir texto en voz. Lo mejor es que no requiere tener el navegador instalado, no usa Windows exclusivamente ni necesita claves de API. Es rápida, gratuita y muy realista.

Instalación
Para instalar la librería, abre tu terminal o consola y ejecuta el siguiente comando:
>>pip install edge-tts

¿Cómo usarlo en tu código?
Dado que la librería funciona en segundo plano comunicándose con los servidores de Microsoft, utiliza programación asíncrona (una forma de hacer que tu programa espere respuestas sin detenerse por completo). Aquí tienes un ejemplo básico de cómo crear un archivo de audio MP3: [1, 2]
>>import asyncio
>>import edge_tts

>># Texto que quieres convertir
>>TEXTO = "Hola, bienvenido a la guía de edge-tts en Python."
>>VOZ_ESPANOL = "es-ES-AlvaroNeural" # Voz de ejemplo (español de España)

>>async def main():
>>    # Inicializa el motor con el texto y la voz
>>    communicate = edge_tts.Communicate(TEXTO, VOZ_ESPANOL)
    
>>    # Guarda el resultado en un archivo de audio
>>    await communicate.save("salida.mp3")

>># Ejecuta el código
>>asyncio.run(main())


Voces y otros comandos
Para que el audio suene más natural, puedes elegir entre diferentes acentos (como español de Colombia, México o España). [1]
  • Puedes listar todas las voces disponibles usando este comando en tu terminal:
>>edge-tts --list-voices


Si quieres que el programa lea el texto en voz alta inmediatamente en lugar de guardarlo en un archivo, puedes usar:

>>edge-playback --text "Hola, esto se lee en voz alta"


Vamos a realizar el ejemplo en Google Colab:

>># 1. instalamos la libreria
>>!pip install edge-tts

Collecting edge-tts
  Downloading edge_tts-7.2.8-py3-none-any.whl.metadata (5.5 kB)
Requirement already satisfied: aiohttp<4.0.0,>=3.8.0 in /usr/local/lib/python3.12/dist-packages (from edge-tts) (3.14.1)
Requirement already satisfied: certifi>=2023.11.17 in /usr/local/lib/python3.12/dist-packages (from edge-tts) (2026.6.17)
Requirement already satisfied: tabulate<1.0.0,>=0.4.4 in /usr/local/lib/python3.12/dist-packages (from edge-tts) (0.9.0)
Requirement already satisfied: typing-extensions<5.0.0,>=4.1.0 in /usr/local/lib/python3.12/dist-packages (from edge-tts) (4.16.0)
Requirement already satisfied: aiohappyeyeballs>=2.5.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp<4.0.0,>=3.8.0->edge-tts) (2.7.1)
Requirement already satisfied: aiosignal>=1.4.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp<4.0.0,>=3.8.0->edge-tts) (1.4.0)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp<4.0.0,>=3.8.0->edge-tts) (26.1.0)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.12/dist-packages (from aiohttp<4.0.0,>=3.8.0->edge-tts) (1.8.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.12/dist-packages (from aiohttp<4.0.0,>=3.8.0->edge-tts) (6.7.1)
Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp<4.0.0,>=3.8.0->edge-tts) (0.5.2)
Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp<4.0.0,>=3.8.0->edge-tts) (1.24.2)
Requirement already satisfied: idna>=2.0 in /usr/local/lib/python3.12/dist-packages (from yarl<2.0,>=1.17.0->aiohttp<4.0.0,>=3.8.0->edge-tts) (3.18)
Downloading edge_tts-7.2.8-py3-none-any.whl (31 kB)
Installing collected packages: edge-tts
Successfully installed edge-tts-7.2.8
>>import asyncio
>>from edge_tts import Communicate

>># Configuración
>>TEXTO = input('Ingrese por favor el texto que desea convertir a audio aqui: ')
>>seleccion_voz = input('Ingrese por favor la voz que desea utilizar Hombre España 1; Hombre Mexico 2; Mujer 3;: ')
>>opcion_1 = 'es-ES-AlvaroNeural' # voz de hombre (España)
>>opcion_2 = 'es-MX-JorgeNeural' # voz de hombre (Mexico)
>>opcion_3 = 'es-ES-ElviraNeural' # voz de mujer (España)

>>if seleccion_voz == '1':
>>  VOZ = opcion_1
>>  print('Voz seleccionada: Hombre España')
>>elif seleccion_voz == '2':
>>  VOZ = opcion_2
>>  print('Voz seleccionada: Hombre Mexico')
>>elif seleccion_voz == '3':
>>  VOZ = opcion_3
>>  print('Voz seleccionada: Mujer España')
>>else:
>>  print('Opcion no valida')

>># Otras opciones: "es-ES-ElviraNeural" (Mujer), "es-MX-JorgeNeural" (México)
>>VELOCIDAD = "+10%" # Puedes poner "-20%", "+50%", etc.

>>async def generar_audio():
>>    communicate = Communicate(TEXTO, VOZ, rate=VELOCIDAD)
>>    await communicate.save("podcast_intro.mp3")

>>await generar_audio()

>># 2. Escuchar el resultado
>>from IPython.display import Audio
>>Audio("podcast_intro.mp3")

Puedes verificar el audio aquí:


domingo, 5 de julio de 2026

Python I. Ordenamiento de listas

 Fuente:edube.org

Ordenamiento Burbuja

Ahora que puedes hacer malabarismos con los elementos de las listas, es hora de aprender como ordenarlos. Se han inventado muchos algoritmos de clasificación, que difieren mucho en velocidad, así como en complejidad. Vamos a mostrar un algoritmo muy simple, fácil de entender, pero desafortunadamente, tampoco es muy eficiente. Se usa muy raramente, y ciertamente no para listas extensas.

Digamos que una lista se puede ordenar de dos maneras:

  • Ascendente (o más precisamente, no descendente): si en cada par de elementos adyacentes, el primer elemento no es mayor que el segundo.
  • Descendente (o más precisamente, no ascendente): si en cada par de elementos adyacentes, el primer elemento no es menor que el segundo.

En las siguientes secciones, ordenaremos la lista en orden ascendente, de modo que los números se ordenen de menor a mayor.

Aquí está la lista:

8
10
6
2
4

Intentaremos utilizar el siguiente enfoque: tomaremos el primer y el segundo elemento y los compararemos; si determinamos que están en el orden incorrecto (es decir, el primero es mayor que el segundo), los intercambiaremos; Si su orden es válido, no haremos nada. Un vistazo a nuestra lista confirma lo último: los elementos 01 y 02 están en el orden correcto, así como 8<10.

Ahora observa el segundo y el tercer elemento. Están en las posiciones equivocadas. Tenemos que intercambiarlos:

8
6
10
2
4

Vamos más allá y observemos los elementos tercero y cuarto. Una vez más, esto no es lo que se supone que es. Tenemos que intercambiarlos:

8
6
2
10
4

Ahora comprobemos los elementos cuarto y quinto. Si, ellos también están en las posiciones equivocadas. Ocurre otro intercambio:

8
6
2
4
10

El primer paso a través de la lista ya está terminado. Todavía estamos lejos de terminar nuestro trabajo, pero algo curioso ha sucedido mientras tanto. El elemento más grande, 10, ya ha llegado al final de la lista. Ten en cuenta que este es el lugar deseado para el. Todos los elementos restantes forman un lío pintoresco, pero este ya está en su lugar.

Ahora, por un momento, intenta imaginar la lista de una manera ligeramente diferente, es decir, de esta manera:

10
4
2
6
8

Observa - El 10 está en la parte superior. Podríamos decir que flotó desde el fondo hasta la superficie, al igual que las burbujas en una copa de champán. El método de clasificación deriva su nombre de la misma observación: se denomina ordenamiento de burbuja.

Ahora comenzamos con el segundo paso a través de la lista. Miramos el primer y el segundo elemento, es necesario un intercambio:

6
8
2
4
10

Tiempo para el segundo y tercer elemento: también tenemos que intercambiarlos:

6
2
8
4
10

Ahora el tercer y cuarto elementos, y la segunda pasada, se completa, ya que 8 ya está en su lugar:

6
2
4
8
10

Comenzamos el siguiente pase inmediatamente. Observe atentamente el primer y el segundo elemento: se necesita otro cambio:

2
6
4
8
10

Ahora 6 necesita ir a su lugar. Cambiamos el segundo y el tercer elemento:

2
4
6
8
10

La lista ya está ordenada. No tenemos nada más que hacer. Esto es exactamente lo que queremos.

Como puedes ver, la esencia de este algoritmo es simple: comparamos los elementos adyacentes y, al intercambiar algunos de ellos, logramos nuestro objetivo.

Codifiquemos en Python todas las acciones realizadas durante un solo paso a través de la lista, y luego consideraremos cuántos pases necesitamos para realizarlo. No hemos explicado esto hasta ahora, pero lo haremos pronto.

Ordenando una lista

¿Cuántos pases necesitamos para ordenar la lista completa?

Resolvamos este problema de la siguiente manera: introducimos otra variable, su tarea es observar si se ha realizado algún intercambio durante el pase o no. Si no hay intercambio, entonces la lista ya está ordenada, y no hay que hacer nada más. Creamos una variable llamada swapped, y le asignamos un valor de False para indicar que no hay intercambios. De lo contrario, se le asignará True.

>>my_list = [8, 10, 6, 2, 4]  # lista a ordenar

>>for i in range(len(my_list) - 1):  # necesitamos (5 - 1) comparaciones

>>    if my_list[i] > my_list[i + 1]:  # compara elementos adyacentes

>>        my_list[i], my_list[i + 1] = my_list[i + 1], my_list[i]  # Si terminamos aquí, tenemos que intercambiar elementos.

Deberías poder leer y comprender este programa sin ningún problema:

>>my_list = [8, 10, 6, 2, 4]  # lista a ordenar

>>swapped = True  # Lo necesitamos verdadero (True) para ingresar al bucle while.

>>while swapped:

>>    swapped = False  # no hay intercambios hasta ahora

>>   for i in range(len(my_list) - 1):

>>       if my_list[i] > my_list[i + 1]:

 >>          swapped = True  # ¡ocurrió el intercambio!

 >>           my_list[i], my_list[i + 1] = my_list[i + 1], my_list[i]

>>print(my_list)

>>>

[2, 4, 6, 8, 10]















Entradas recientes

Convertir txt a mp3 en Python

  edge-tts es una excelente librería de Python que te permite usar las voces en línea de Microsoft Edge para convertir texto en voz . Lo me...

Entradas Populares