...

sábado, abril 04, 2009

Reproducir audio en python multiplataforma

una receta de como reproducir un archivo de audio con python en linux, mac y windows.

si encuentran un bug, por favor avisen en los comentarios, solo lo probe en linux :)


import os

def is_on_path(fname):
"""
returns True if fname is the name of an executable on path (*nix only)
"""
for p in os.environ['PATH'].split(os.pathsep):
if os.path.isfile(os.path.join(p, fname)):
return True

return False

def dummy_play(path):
"""
dummy method used when no method is available
"""
print "can't play", path

if os.name == 'nt':
import winsound

def play(path):
winsound.PlaySound(path, winsound.SND_FILENAME)
elif os.name == 'posix':
try:
import gst

def play(path):
"""
play a sound using gstreamer api
"""
_player = gst.element_factory_make("playbin", "player")
uri = "file://" + os.path.abspath(path)
_player.set_property('uri', uri)
_player.set_state(gst.STATE_PLAYING)
except ImportError:
if is_on_path('play'):
play = lambda path: os.popen4('play ' + path)
elif is_on_path('aplay'):
play = lambda path: os.popen4('aplay ' + path)
else:
play = dummy_play
elif os.name == 'mac':
from AppKit import NSSound
def play(path):
"""
play a sound using mac api
"""
macsound = NSSound.alloc()
macsound.initWithContentsOfFile_byReference_(soundPath, True)
macsound.play()
else:
play = dummy_play


para usarlo

import play_sound
play_sound.play('path/al/archivo.wav')

para el caso de gstreamer en linux y el de mac, hace falta un mainloop o algo que mantenga la aplicacion abierta para que reproduzca, con popen no hace falta, en windows no se si bloquea o no.

Seguidores

Archivo del blog

Datos personales

Mariano Guerra
Soy Mariano Guerra nacido en 1985 estudio ingenieria en sistemas me gusta mucho pero mucho la musica, tambien me gusta la informatica etc
Ver todo mi perfil