2010-08-29 8 views
7

Tengo problemas para conectar un controlador de eventos para indicar cuándo una canción ha terminado de reproducirse cuando se utilizan los enlaces de VLC Python. La función event_attach se queja del tipo de devolución de llamada.Tipo de devolución de llamada VLC Python EventManager?

def __init__(self): 
    self.vlc = vlc.Instance() 
    self.vlc_playlist = self.vlc.media_list_new() 
    self.vlc_player = self.vlc.media_list_player_new() 
    self.vlc_player.set_media_list(self.vlc_playlist) 
    self.vlc_events = self.vlc_player.event_manager() 
    self.vlc_events.event_attach(vlc.EventType.MediaPlayerEndReached, self.SongFinished, 1) 
    .... 
def SongFinished(self, *args, **kwargs): 
    pass 

Errores:

self.vlc_events.event_attach(vlc.EventType.MediaPlayerEndReached, self.SongFinished, 1) 
return libvlc_event_attach(self, i_event_type, f_callback, user_data) 
    ArgumentError: argument 3: <type 'exceptions.TypeError'>: wrong type 
+1

por desgracia me miró una vez y no ver muchos buenos tutoriales sobre la materia evento pitón. http://www.google.com/search?hl=es&client=safari&pwst=1&rls=en&q=+site:forum.videolan.org+python+vlc+event+attach&sa=X&ei=VO97TLvWL5OqsAPSx7SCBw&ved=0CBsQrQIwAA podría ayudar – rogerdpack

Respuesta

7

encontrado, VLC.py incluye una pequeña función ctypes decorador para devoluciones de llamada de embalaje:

callbackmethod=ctypes.CFUNCTYPE(None, Event, ctypes.c_void_p)

Para usar:

@callbackmethod 
def SongFinished(self, data): 
    print data 

.event_attach(vlc.EventType.MediaPlayerEndReached, SongFinished, 1)

+0

gracias dulce por la punta – rogerdpack

+1

La última versión de vlc.py usa una envoltura para que dicho decorador ya no sea necesario –

0

Aquí es el código básico para el más reciente vlc.py utilizando el event_manager:

import vlc 
finish = 0 

def SongFinished(event): 
    global finish 
    print "Event reports - finished" 
    finish = 1 

instance = vlc.Instance() 
player = instance.media_player_new() 
media = instance.media_new_path('vp1.mp3') #Your audio file here 
player.set_media(media) 
events = player.event_manager() 
events.event_attach(vlc.EventType.MediaPlayerEndReached, SongFinished) 
player.play() 
while finish == 0: 
     sec = player.get_time()/1000 
     m, s = divmod(sec, 60) 
     print "%02d:%02d" % (m,s) 
Cuestiones relacionadas