Python y Windows Media Player (sin WMP!)
François Heredero - Top Music SA
fheredero en topmusic.ch
Vie Mar 5 09:41:45 CET 2004
Pues a habido problema con la lista, envio otra vez mi mensage del 27 que
puede servir a alguien.
Saludos
François
------------------
Hola,
Vuelvo aqui sobre un tema que he empezado hace tiempo, por si puede servir a
alguien.
Tenia que hacer un jukebox MP3 con un viejo PC recuperado, bajo windows 98.
Para la gestion de la pantalla he utilizado pyGame, y para el MP3 winamp
controlado con python. Pero siempre he tenido problemas, porque winamp no
hera estable, y se paraba varias veces al dia.
Asi que por fin he utilisado bass (http://www.un4seen.com/), y (de momento)
todo va bien!
Aqui teneis un ejemplo minimo de control de bass, sin gestion de errores y
otras cosas... pero funciona.
Para esto, solo se necesita 'bass.dll' controlado mediante el modulo ctypes
(http://sourceforge.net/projects/ctypes/).
Si alguien quiere hacer un wrapper mas 'profesional', adelante :-)
François
------------------------------------------------------------------
# -*- coding: utf-8 -*-
from ctypes import *
class bass:
def __init__(self):
self.bass = windll.bass
r = self.bass.BASS_Init(1, 44100, 0, 0, 0)
if(not(r)):
print "Init error",self.bass.BASS_ErrorGetCode()
return None
def __del__(self):
self.bass.BASS_Free();
def loadMP3(self, mp3):
self.mp3 = self.bass.BASS_StreamCreateFile(0, mp3,0 , 0, 0)
if(not(self.mp3)):
print "Load error",self.bass.BASS_ErrorGetCode()
return 0
else:
return 1
def play(self):
if(self.mp3):
self.bass.BASS_StreamPlay(self.mp3,0,0)
self.bass.BASS_Start()
return 0
else:
print "Play error",self.bass.BASS_ErrorGetCode()
return 1
def playing(self):
# Return : cuantos bytes quedan por tocar,
# es decir 0 si toda la musica ha sido tocada !
return self.bass.BASS_StreamGetFilePosition(self.mp3, 0)
def version(self):
v = "Bass Version %0.1f" % (self.bass.BASS_GetVersion())
return v
if __name__ == "__main__":
b = bass()
if(b):
print b.version()
if(b.loadMP3("a.mp3")):
if(b.play()):
while b.playing():
pass
print "Final"
Más información sobre la lista de distribución Python-es