Tutorial Azuracast Como usar Now Playing en Radios con RDS,en Radio que tieme empty Title con Python y Mostrar Imagenes (Showing Images) con mejor calidad
Tutorial Azuracast Como usar Now Playing en Radios con RDS,en Radio que tieme empty Title en Shoutcast con Python y en Radio RDS con StereoTool Codigo en negrita y cursiva para que lo entiendan mejorNecesitan Descargar Python :
https://www.python.org/
Azuracast :
http://azuracast.com y como usar la API de AzuraCast para obtener su API :
En Azuracast deben ir a Mi Cuenta
Añadir llave API
y Descripcion de la API
ej para now playing : nowplayingRDS
para imagenes : showingimages (que es mostrar imagenes) y les crea la clave y genera la API (en showing images la necesitan, para ver imagenes azuracast en mejor calidad)
Codigo Python import requests
import time # URL de la API
url = "http://localhost/api/station/8/nowplaying" (aca su api de AzuraCast) import time
import requests # Archivo donde se guardarán los títulos
file_path = "now_playing.txt"
url = "http://localhost/api/station/8/nowplaying" # Asegúrate de definir la URL de la API aquí def obtener_info():
response = requests.get(url)
return response.json() def actualizar_cancion():
while True:
data = obtener_info() # Obtener solo el título y el artista
song_title = data['now_playing']['song']['title']
song_artist = data['now_playing']['song']['artist'] # Crear el texto para escribir en el archivo (artista seguido de guion y título)
song_info = f"{song_artist} - {song_title}\n" # Escribir en el archivo con codificación utf-8
with open(file_path, "w", encoding="utf-8") as f:
f.write(song_info) print(f"Ahora suena: {song_info}") # Esperar 30 segundos antes de hacer otra consulta
time.sleep(30) if __name__ == "__main__":
actualizar_cancion()
Mostrar imagenes Azuracast con mejor calidad :
Codigo en negrita y cursiva para que lo entiendan mejor
import requests
from PIL import Image, ImageTk
import tkinter as tk
from io import BytesIO
import time
# URL de la API de AzuraCast (reemplaza con la tuya)
url_api = "http://localhost/api/station/14/nowplaying" (Aca su APÍ de AzuraCast)
headers = {"Authorization": "Bearer (Aca su APÍ de AzuraCast)"} # Si usas un token de API
# Función para obtener la miniatura desde AzuraCast
def obtener_miniatura():
try:
# Obtener datos de la canción actual
response = requests.get(url_api, headers=headers)
response.raise_for_status()
data = response.json()
image_url = data['now_playing']['song']['art'] # URL de la miniatura de la canción
if image_url:
# Descargar la imagen de la miniatura
image_response = requests.get(image_url)
image_response.raise_for_status()
# Convertir la imagen a formato PIL
img = Image.open(BytesIO(image_response.content))
# Ajustar la imagen y guardarla
img_guardada = ajustar_y_guardar_imagen(img)
# Mostrar la imagen en Tkinter
return img_guardada
else:
print("No se encontró una miniatura.")
return None
except requests.exceptions.RequestException as e:
print(f"Error al obtener la miniatura: {e}")
return None
# Función para ajustar y guardar la imagen (sin perder calidad)
def ajustar_y_guardar_imagen(img):
# Dimensiones deseadas
target_width, target_height = 1280, 720
# Obtener las dimensiones de la imagen original
img_width, img_height = img.size
# Si la imagen es más ancha que alta, ajustamos al ancho, si es más alta ajustamos al alto
if img_width / img_height > target_width / target_height:
# Ajustar la imagen al ancho de la ventana
new_height = int(target_width * img_height / img_width)
img = img.resize((target_width, new_height), Image.Resampling.LANCZOS)
else:
# Ajustar la imagen a la altura de la ventana
new_width = int(target_height * img_width / img_height)
img = img.resize((new_width, target_height), Image.Resampling.LANCZOS)
# Recortar la imagen al centro si es necesario para ajustarse a 1280x720
img_width, img_height = img.size
left = (img_width - target_width) // 2
top = (img_height - target_height) // 2
right = (img_width + target_width) // 2
bottom = (img_height + target_height) // 2
img = img.crop((left, top, right, bottom))
# Guardar la imagen ajustada (en formato PNG para evitar compresión)
img.save("miniatura_actualizada.png", "PNG")
print("Miniatura guardada como 'miniatura_actualizada.png'.")
return img
# Función para mostrar la imagen con Tkinter
def mostrar_imagen(img, ventana, canvas):
# Convertir la imagen a formato compatible con Tkinter
img_tk = ImageTk.PhotoImage(img)
# Mostrar la imagen en el canvas
canvas.create_image(0, 0, anchor="nw", image=img_tk)
# Mantener la imagen en memoria para evitar que se pierda
canvas.image = img_tk
ventana.update_idletasks() # Actualizar la ventana sin cerrarla
ventana.update()
# Función para actualizar la miniatura periódicamente
def actualizar_miniatura_periodicamente(ventana, canvas):
img = obtener_miniatura() # Llamar a la función para obtener la miniatura
if img:
mostrar_imagen(img, ventana, canvas) # Mostrar la imagen actualizada en Tkinter
ventana.after(10000, actualizar_miniatura_periodicamente, ventana, canvas) # Esperar 10 segundos antes de actualizar de nuevo
# Crear la ventana de Tkinter
ventana = tk.Tk()
ventana.title("Miniatura AzuraCast")
# Crear un canvas para mostrar la imagen
canvas = tk.Canvas(ventana, width=1280, height=720)
canvas.pack()
# Iniciar la actualización periódica
actualizar_miniatura_periodicamente(ventana, canvas)
# Iniciar el loop de la ventana
ventana.mainloop()
Para funcionar los codigos python con CMD :
cd : C:\Users\Super Radio Genial\AppData\Local\Programs\Python\Python313\now_playing.py (nombre de su proyecto python)
otro CMD para mostrar imagenes (por que el otro cmd estara ocupado en el otro proyecto)
cd : C:\Users\Super Radio Genial\AppData\Local\Programs\Python\Python313\showing_images.py (nombre de su proyecto python) (en super radio genial, cambienlo por su nombre de usuario, sino no funciona)
https://help.stereotool.com/rds_encoder_texts.shtml (esta pagina explica detalladamente los RDS con now playing, para stereotool, esta en ingles, si no entienden, lo pueden traducir, en todo caso en el video les muestro algo como se usa RDS now playing, con stereotool, necesitan un archivo txt que genera codigo python, sino no funciona (ej : este now_playing.txt, en todo caso, la pagina les explica mas detalladamente que yo por si no me entienden)