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.
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ía | Planu | Qué remana |
|---|---|---|
| librosa | Audiu (señal) | Forma d’onda, espectrogrames, carauterístiques espectrales |
| music21 | Partitura (símbolu) | Notes, compases, tonalidá, análisis harmónicu, MusicXML |
| pretty_midi | MIDI (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:
- McFee, B., Raffel, C., Liang, D., Ellis, D. P. W., McVicar, M., Battenberg, E., & Nieto, O. (2015). librosa: Audio and Music Signal Analysis in Python. Proceedings of the 14th Python in Science Conference, 18–24.
- Cuthbert, M. S., & Ariza, C. (2010). music21: A Toolkit for Computer-Aided Musicology and Symbolic Music Data. Proceedings of the 11th International Society for Music Information Retrieval Conference (ISMIR).
- Documentación oficial de music21.
- Raffel, C., & Ellis, D. P. W. pretty_midi: A Python Library for Handling MIDI Data — repositoriu y documentación oficial.
- Documentación oficial de librosa.