Tever
AST

Guía · Informática Musical

Python pa música: librosa, music21 y pretty_midi

Un mesmu llinguaxe, tres caxes de ferramientes: librosa mira l'audiu, music21 la partitura y pretty_midi el MIDI. Qué fai cada llibrería y cuándo usar cada una.

Logo de Python nel centru arrodiáu de formes d'onda d'audiu, un espectrograma, una partitura imprentada y un fragmentu de códigu con librosa, music21 y pretty_midi, colos logotipos de les tres llibreríes na parte inferior, sobre fondu escuru.

Python ye’l llinguaxe de referencia n’informática musical, pero nun ye una llibrería sola: ye un ecosistema de pieces especializaes que nun se solapen. Cuando dalguién me pregunta “¿qué llibrería uso pa trabayar con música en Python?”, la respuesta curtia ye siempre otra entruga: ¿tas mirando el soníu grabáu, la partitura escrita, o un ficheru MIDI? Cada respuesta lleva a una llibrería distinta —librosa, music21 o pretty_midi— y esta guía ye’l mapa de les tres: qué fai cada una, cuándo usar cada una y cómo se combinen nun fluxu de trabayu real.

El mapa: tres llibreríes, tres planos de la música

Enantes del códigu, convién fixar la idea de fondu. La música pue mirase en polo menos tres planos distintos, y cada llibrería vive nún:

LlibreríaPlanuQué remana
librosaAudiu (señal)Forma d’onda, espectrogrames, carauterístiques espectrales
music21Partitura (símbolu)Notes, compases, tonalidá, análisis harmónicu, MusicXML
pretty_midiMIDI (eventu)Notes como oxetos con pitch, tiempu y velocidá, ficheros .mid

Nun son alternatives ente sí: son complementaries. Un fluxu típicu de trescripción automática de música parte d’audiu (librosa pa esploralu), pasa por una representación d’eventos nota a nota (pretty_midi pa remanar el resultáu en MIDI) y pue rematar en partitura lleíble (music21 pa esportala a MusicXML).

pip install librosa music21 pretty_midi

librosa: l’audiu como señal

librosa trabaya sobre la forma d’onda: l’audiu tal como lu capta un micrófonu, enantes de saber qué notes contién. Carga un ficheru, calcula espectrogrames, estrai carauterístiques espectrales (MFCCs, chroma) y deteuta onsets y tempu.

import librosa

y, sr = librosa.load("estractu.mp3")
tempo, _ = librosa.beat.beat_track(y=y, sr=sr)

print(f"Frecuencia de muestréu: {sr} Hz")
print(f"Tempu estimáu: {tempo:.1f} BPM")

librosa.load devuelve la forma d’onda como array de numpy (y) y la so frecuencia de muestréu (sr); a partir d’ehí, tol restu de la llibrería —espectrogrames, MFCCs, deteición de beats— opera sobre esos dos valores. Yá dediqué un tutorial completu a esta llibrería, col pasu ente pasu de calcular un espectrograma real a partir d’una grabación de gaita: Cómo calcular un espectrograma con librosa. Equí abonda con situala nel mapa: ye la puerta d’entrada cuando’l puntu de partida ye audiu, non partitura nin MIDI.

music21: la partitura como símbolu

music21 ye la llibrería de Python del MIT pa musicoloxía computacional. Nun mira la señal d’audiu: mira la partitura, nel so planu simbólicu —notes, compases, tonalidá, dixitación, dinámica—. Llee y escribe MusicXML, MIDI y otros formatos de notación, lo que la fai la ferramienta davezu pa análisis de corpus musicales y teoría musical computacional en códigu.

from music21 import corpus, key

# Corpus d'exemplu que trai music21 (un coral de Bach)
sinfonia = corpus.parse("bach/bwv66.6")

# Estimación de tonalidá a partir del análisis harmónicu
tonalidad = sinfonia.analyze("key")
print(f"Tonalidá estimada: {tonalidad}")

for nota in sinfonia.flatten().notes[:5]:
    print(nota.nameWithOctave, nota.quarterLength)

corpus.parse carga una de les partitures d’exemplu que s’instalen con music21 —corales de Bach ente elles—; analyze("key") aplica un algoritmu d’estimación de tonalidá sobre les notes de la pieza; flatten().notes percuerre les notes una a una col so altor (nameWithOctave) y duración (quarterLength). Nada d’esto pasa per audiu: tol análisis asocede sobre la partitura yá codificada.

Esa capacidá de lleer y escribir MusicXML ye la que uso pa comparar, con datos reales, qué información de notación sobrevive al esportar una mesma frase musical a distintos formatos: MIDI vs MusicXML en Python: qué se pierde y qué non.

pretty_midi: el MIDI como oxetos remanables

pretty_midi zarra’l mapa: trabaya con ficheros MIDI a nivel de programa. Carga un .mid y espón les sos notes, instrumentos, control changes y cambios de tempu como oxetos Python fáciles de percorrer, en vez de bytes crudos del protocolu.

import pretty_midi

pm = pretty_midi.PrettyMIDI("exemplu.mid")

for instrumentu in pm.instruments:
    print(f"Instrumentu: {instrumentu.program}")
    for nota in instrumentu.notes[:5]:
        print(
            f"  pitch={nota.pitch} "
            f"start={nota.start:.2f} end={nota.end:.2f} "
            f"velocity={nota.velocity}"
        )

Cada nota trai el so altor MIDI (pitch, 0-127), el so entamu y fin en segundos —non en compases nin figures, como en music21— y la so intensidá (velocity). Esa ye la diferencia de fondu con music21: pretty_midi describe una interpretación temporizada, non una partitura con compases y dixitación. Ye la ferramienta davezu pa xenerar el MIDI de salida en sistemes de trescripción automática de música y pa evaluar una trescripción comparando eventos nota a nota escontra una referencia.

Cuándo usar cada una

La entruga de partida decide la llibrería:

  • ¿Quiero analizar o tresformar audiu grabáu? librosa: espectrogrames, MFCCs, deteición d’onsets y tempu, estraición de carauterístiques.
  • ¿Quiero trabayar cola partitura —tonalidá, compases, dixitación— o esportar a MusicXML? music21: análisis harmónicu, xeneración de notación, musicoloxía computacional.
  • ¿Quiero lleer, xenerar o editar un ficheru MIDI a nivel de nota, instrumentu o tempu? pretty_midi: la capa d’abstracción sobre’l protocolu MIDI que fai remanable trabayar con él en códigu.

Na práutica nun s’escueye una sola: nun mesmu cuadernu d’investigación ye davezu usar librosa pa esplorar l’audiu d’entrada, pretty_midi pa remanar la salida d’un modelu de trescripción y music21 pa convertir esa salida nuna partitura lleíble. Les tres llévense bien con Jupyter, l’entornu davezu d’esti tipu de trabayu esploratoriu: cargar, tresformar y ver el resultáu nel mesmu documentu ensin montar un programa aparte.

Ónde encaxa esto nel MIR

Les tres llibreríes —y el propiu Python como llinguaxe de factu— son ferramienta de trabayu dientro del campu del Music Information Retrieval (MIR): l’estudiu de cómo estrayer, organizar y recuperar información a partir de señales musicales, n’audiu o en forma simbólica. librosa cubre el llau de la señal; music21 y pretty_midi, el llau simbólicu —partitura y MIDI, respeutivamente—. Denguna fai MIR por sí sola: son el vocabulariu nel que s’implementen les sos xeres, dende’l reconocimientu d’acordes fasta la trescripción automática de música.

Bibliografía

Les referencies nes que s’apoya esti artículu y per ónde siguir lleendo: