[pyar] Audio y música. Librerías y recomendaciones

Pedro Jose Pezzarini jose2190 en gmail.com
Sab Ene 4 16:38:56 ART 2014


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140104/3f4e10d9/attachment.html>


More information about the pyar mailing list