97 lines
3.4 KiB
Python
97 lines
3.4 KiB
Python
# Módulo: logica/T2/musicReproductor.py
|
||
|
||
import vlc
|
||
import threading
|
||
import os
|
||
import sys
|
||
|
||
|
||
# --- BLOQUE DE CÓDIGO OPCIONAL PARA SOLUCIÓN DE ERRORES DE RUTA DE VLC ---
|
||
# Si al ejecutar el programa obtienes un error de "ImportError: DLL load failed"
|
||
# o similar con 'vlc', DESCOMENTA el siguiente bloque y AJUSTA la ruta de vlc_path.
|
||
# Esto ayuda a que Python encuentre las librerías principales de VLC.
|
||
#
|
||
# if sys.platform.startswith('win'):
|
||
# # RUTA DE EJEMPLO PARA WINDOWS (AJUSTA según tu instalación)
|
||
# vlc_path = r"C:\Program Files\VideoLAN\VLC"
|
||
# if vlc_path not in os.environ.get('PATH', ''):
|
||
# os.environ['PATH'] += os.pathsep + vlc_path
|
||
# -------------------------------------------------------------------------
|
||
|
||
class MusicReproductor:
|
||
"""
|
||
Gestiona la reproducción de streams de radio usando la librería python-vlc.
|
||
"""
|
||
|
||
def __init__(self, initial_volume=50.0):
|
||
"""Inicializa la instancia de VLC y el reproductor."""
|
||
|
||
# Instancia de VLC y objeto Reproductor
|
||
self.instance = vlc.Instance()
|
||
self.player = self.instance.media_player_new()
|
||
self.current_media = None
|
||
self.is_playing = False
|
||
|
||
# Configurar volumen inicial
|
||
self.ajustar_volumen(initial_volume)
|
||
print(f"🎵 [VLC] Reproductor inicializado. Volumen: {self.player.audio_get_volume()}")
|
||
|
||
def ajustar_volumen(self, valor_porcentual):
|
||
"""
|
||
Ajusta el volumen del reproductor (0 a 100).
|
||
"""
|
||
volumen_int = int(max(0, min(100, valor_porcentual)))
|
||
self.player.audio_set_volume(volumen_int)
|
||
# No imprimimos el volumen aquí para evitar saturar la consola con cada movimiento del Scale
|
||
|
||
def cargar_y_reproducir(self, url_stream):
|
||
"""
|
||
Carga una nueva URL de stream y comienza la reproducción.
|
||
"""
|
||
if not url_stream:
|
||
print("❌ [VLC] URL del stream vacía.")
|
||
return
|
||
|
||
print(f"🔄 [VLC] Intentando cargar y reproducir: {url_stream}")
|
||
|
||
self.player.stop()
|
||
|
||
self.current_media = self.instance.media_new(url_stream)
|
||
self.player.set_media(self.current_media)
|
||
|
||
self.player.play()
|
||
self.is_playing = True
|
||
print("✅ [VLC] Reproducción iniciada.")
|
||
|
||
def reproducir(self):
|
||
"""
|
||
Reanuda la reproducción si está pausada.
|
||
"""
|
||
if self.player.get_state() == vlc.State.Paused:
|
||
self.player.play()
|
||
self.is_playing = True
|
||
print("▶️ [VLC] Reproducción reanudada.")
|
||
else:
|
||
print("ℹ️ [VLC] Ya está reproduciéndose o esperando un stream.")
|
||
|
||
def pausar(self):
|
||
"""
|
||
Pausa la reproducción.
|
||
"""
|
||
if self.player.get_state() == vlc.State.Playing:
|
||
self.player.pause()
|
||
self.is_playing = False
|
||
print("⏸️ [VLC] Reproducción pausada.")
|
||
else:
|
||
print("ℹ️ [VLC] No se puede pausar, el reproductor no está en estado de reproducción.")
|
||
|
||
def detener(self):
|
||
"""
|
||
Detiene la reproducción y libera los recursos. Crucial al cerrar la aplicación.
|
||
"""
|
||
if self.player:
|
||
self.player.stop()
|
||
# 🎯 Solo liberamos el reproductor. No eliminamos self.instance.
|
||
self.player.release()
|
||
self.player = None # Esto asegura que el player se recree si es necesario
|
||
print("⏹️ [VLC] Reproductor detenido y recursos liberados.") |