[pyar] Audio y música. Librerías y recomendaciones
Santiago Basulto
santiago.basulto en gmail.com
Mie Ene 22 11:59:03 ART 2014
Muchas gracias Pedro! voy a mirarlo
2014/1/4 Pedro Jose Pezzarini <jose2190 en gmail.com>
> Si te sirve de ayuda, utilice mucho GStreamer, y podés acoplar un
> ecualizador al flujo de audio saliente y capturarlo a un archivo como
> entrante.
>
> Creo que si utilizás numpy con GStremer, sería un golazo.
>
> Acá te anexo el código que utilicé de ayuda, es de MiXML (
> https://github.com/Jille/MiXML/blob/master/mixmlp/mixmlp.py):
>
> Muestra como ecualizador de 3 bandas, pero creo que soporta hasta 11
> bandas, no recuerdo bien.
>
> Exitos!
>
> -- CODE --
>
> from time import sleep
>
> import gobject
> gobject.threads_init()
>
> import pygst
> pygst.require('0.10')
> import gst
>
> mainloop = gobject.MainLoop()
>
> # gst-launch filesrc location=henk.mp3 ! decodebin ! audioconvert ! equalizer-3bands band0=12.0 ! alsasink
>
> pipeline = gst.Pipeline('audiocontroller')
> src = gst.element_factory_make('filesrc')
> # src = gst.element_factory_make('audiotestsrc')
> dec = gst.element_factory_make('decodebin')
>
>
>
> conv = gst.element_factory_make('audioconvert')
> eq = gst.element_factory_make('equalizer-3bands')
> sink = gst.element_factory_make('autoaudiosink')
>
> src.set_property('location', 'henk.mp3')
> # src.set_property('freq', 300.0)
> # src.set_property('volume', 1.0)
>
> pipeline.add(src, dec, conv, eq, sink)
>
>
>
>
> convsink = conv.get_pad('sink')
>
> def link_dec_conv(element, pad, last):
> caps = pad.get_caps()
> name = caps[0].get_name()
>
>
>
> print '\n__on_new_decoded_pad:', name
>
> if 'audio' in name:
> if not convsink.is_linked(): # Only link once
>
>
>
> pad.link(convsink)
>
> dec.connect('new-decoded-pad', link_dec_conv)
>
> src.link(dec)
> conv.link(eq)
> eq.link(sink)
>
> control = gst.Controller(eq, 'band0', 'band1', 'band2')
>
>
>
> control.set_interpolation_mode('band0', gst.INTERPOLATE_NONE)
> control.set_interpolation_mode('band1', gst.INTERPOLATE_NONE)
> control.set_interpolation_mode('band2', gst.INTERPOLATE_NONE)
> # control.set("band0", 4 * gst.SECOND, 12)
> if True:
>
> res = control.set("band1", 0, 12.0)
> assert res
> res = control.set("band1", 4 * gst.SECOND, -12.0)
>
>
>
> assert res
> res = control.set("band1", 8 * gst.SECOND, 12.0)
>
>
>
> assert res
> res = control.set("band1", 12 * gst.SECOND, -12.0)
>
>
>
> assert res
> # control.set("band0", 12 * gst.SECOND, 0)
>
> # sc = gst.Controller(src, 'volume')
> # sc.set_interpolation_mode('volume', gst.INTERPOLATE_LINEAR)
>
> res_ = pipeline.set_state(gst.STATE_PLAYING)
> if res_ == gst.STATE_CHANGE_ASYNC:
>
> res_ = pipeline.get_state()[0]
> if res_ != gst.STATE_CHANGE_SUCCESS:
> print "Could not set pipeline %s to PLAYING" % pipeline
>
>
>
> print res_
> # eq.set_property('band2', 12.0)
>
> try:
> for i in xrange(0, 20):
> print i
> if False:
>
> if i % 2 == 1:
>
> print "Whop"
> eq.set_property('band0', -12.0)
>
>
>
> else:
> print "Plop"
> eq.set_property('band0', 12.0)
> sleep(1)
> print eq
> mainloop.run()
> except KeyboardInterrupt:
> pass
>
> res = pipeline.set_state(gst.STATE_NULL)
>
>
>
> if res != gst.STATE_CHANGE_SUCCESS:
>
> print "Could not set pipeline %s to NULL" % pipeline
>
> exit(1)
>
>
>
>
> El 4 de enero de 2014, 11:36, Santiago Basulto <santiago.basulto en gmail.com
> > escribió:
>
> Impresionante Claudio! Muchísimas gracias. Me sirve todo, voy a arrancar a
>> leerlo.
>>
>>
>> 2014/1/2 Claudio Freire <klaussfreire en gmail.com>
>>
>>> 2013/12/27 Santiago Basulto <santiago.basulto en gmail.com>:
>>> > Hola amigos. Estoy buscando opciones de librerías relacionadas con
>>> música y
>>> > audio. Algunas de las cosas que estoy buscando son:
>>> >
>>> > * Eliminar ruido de fondo
>>> > * Cortar en determinados tiempos
>>> > * Unir partes cortadas
>>> > * Utilizar distintos formatos de compresión
>>>
>>>
>>> No la he usado la verdad, pero la he visto con cariño: pyffmpeg[0]
>>>
>>> ffmpeg soporta todo eso, aunque eliminación de ruido es un punto débil.
>>>
>>> Sin embargo, con numpy (que encaja bien con pyffmpeg) podés
>>> implementar las técnicas usuales de eliminación de ruido, mediante
>>> análisis de frecuencias (numpy.fft)[1].
>>>
>>> Tenés varias técnicas, todas variantes de noise gating. Si necesitás
>>> ayuda con esto, es posible que pueda desenterrar algunos de mis
>>> programas al respecto, pero advierto que son C++, así que te va a
>>> hacer falta algo de traducción al python ;)
>>>
>>> [0] http://code.google.com/p/pyffmpeg/
>>> [1] http://wiki.audacityteam.org/wiki/How_Noise_Removal_Works
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>>
>> --
>> Santiago Basulto.-
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
--
Santiago Basulto.-
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140122/13070bc3/attachment-0001.html>
More information about the pyar
mailing list