Bloque II
Experimentamos con las notas. Herramientas musicolgicas avanzadas
Anlisis musical con music21
[7.1] Cmo estudiar este tema?
[7.2] Introduccin
[7.3] Listas
[7.4] Streams y recursin
[7.5] Ejemplos de anlisis de msica tonal. Bach y Mozart
[7.6] Anlisis serial
TEMA
[7.7] Resumen
TEMA 7 Esquema
Anlisis musical de diversos
estilos
Streams como contenedores de
informacin
Listas en Python aplicadas a
music21
Serialismo. Matemticas seriales
Msica tonal. Elementos grficos
Recursin en elementos iterativos
Anlisis musical con music21
Bach (corales)
Mozart
Compases
Partes
Matemticas y Fsica Aplicadas a la Msica
Esquema
Matemticas y Fsica Aplicadas a la Msica
Ideas clave
7.1. Cmo estudiar este tema?
En este tema y en el siguiente seguimos profundizando en el aprendizaje de music21,
enfocado especialmente al anlisis de partituras. Para este tema recomendamos
consultar:
La
documentacin
de
music21
referente
stream.
Recuperado
de
http://web.mit.edu/music21/doc/moduleReference/moduleStream.html
El
captulo
de
la
gua
de
usuario
de
music21.
Recuperado
de
http://web.mit.edu/music21/doc/usersGuide/usersGuide_04_stream1.html
7.2. Introduccin
En el captulo anterior vimos los conceptos de notas y duraciones en music21. En este
captulo veremos cmo manipular listas de objetos y streams a travs de ejemplos.
7.3. Listas
En el captulo dedicado a Python vimos cmo trabajar con listas de forma abstracta, pero
ahora lo enfocaremos a su empleo en music21. Vemoslo con algunos ejemplos.
from music21 import note
#definimos 2 notas con sus duraciones
note1 = note.Note("C4")
note1.duration.quarterLength=0.5
note2 = note.Note("F#4")
note1.duration.quarterLength=0.25
#las introducimos en una lista de notas
noteList=[note1,note2,note1,note1]
TEMA 7 Ideas clave
3
Matemticas y Fsica Aplicadas a la Msica
#imprimimos el resultado
print noteList
El resultado es:
El trabajo a travs de listas es bastante til porque podemos, por ejemplo, iterar a travs
de todos los elementos.
Resultado
O acceder a un elemento individual, en este caso la duracin de la segunda nota de la
lista. IMPORTANTE. Recuerda que las listas comienzan con el ndice 0.
TEMA 7 Ideas clave
4
Matemticas y Fsica Aplicadas a la Msica
Resultado
0.25
Tambin podemos aadir o quitar elementos de las listas:
Resultado
TEMA 7 Ideas clave
5
Matemticas y Fsica Aplicadas a la Msica
7.4. Streams y recursin
Los streams son parecidos a las listas, pero especficos para objetos de music21 y con un
sentido ms amplio.
Para declarar un stream simplemente:
stream1 = stream.Stream()
y para aadir notas a nuestro stream:
stream1.append(note1)
stream1.append(note2)
stream1.append(note3)
Para visualizarlo como notacin:
stream1.show()
o como texto
stream1.show(text)
Veamos ahora algo ms complejo. Imaginemos que queremos escribir desde cero el
siguiente coral de Bach. En la siguiente imagen hay 4 partes y 4 compases (3 + anacrusa).
Por simplicidad escribiremos solo el primer comps con anacrusa.
TEMA 7 Ideas clave
6
Matemticas y Fsica Aplicadas a la Msica
from music21 import note
from music21 import stream
s=stream.Score()
partes=
[[[('A',1)],[('C5',1), ('A',1.0), ('B-',1), ('A',1)]],
[[('F',1)],[('G',1),
('G',0.5),
('F',0.5),
('E',0.5),('F',1)]],
[[('D',1)],[('C',1),
('C',1), ('B-3',1), ('C',1)]],
[[('D3',1)],[('E3',1),('F3',1), ('G3',1), ('A3',1)]]]
for parte in partes:
p=stream.Part()
for compas in parte:
m=stream.Measure()
for nota in compas:
n=note.Note(nota[0])
n.duration.quarterLength=nota[1]
m.append(n)
p.append(m)
s.append(p)
s.show()
TEMA 7 Ideas clave
7
('F',0.5),
Matemticas y Fsica Aplicadas a la Msica
Si ejecutamos el programa, el resultado es:
Y si lo vemos como texto, encontramos la siguiente estructura jerrquica:
{0.0} <music21.stream.Part 56450320>
{0.0} <music21.stream.Measure 0 offset=0.0>
{0.0} <music21.note.Note A>
{1.0} <music21.stream.Measure 0 offset=1.0>
{0.0} <music21.note.Note C>
{1.0} <music21.note.Note A>
{2.0} <music21.note.Note B->
{3.0} <music21.note.Note A>
{5.0} <music21.stream.Part 56450448>
{0.0} <music21.stream.Measure 0 offset=0.0>
{0.0} <music21.note.Note F>
{1.0} <music21.stream.Measure 0 offset=1.0>
{0.0} <music21.note.Note G>
{1.0} <music21.note.Note G>
{1.5} <music21.note.Note F>
{2.0} <music21.note.Note F>
{2.5} <music21.note.Note E>
{3.0} <music21.note.Note F>
{10.0} <music21.stream.Part 56497488>
{0.0} <music21.stream.Measure 0 offset=0.0>
{0.0} <music21.note.Note D>
{1.0} <music21.stream.Measure 0 offset=1.0>
TEMA 7 Ideas clave
8
Matemticas y Fsica Aplicadas a la Msica
{0.0} <music21.note.Note C>
{1.0} <music21.note.Note C>
{2.0} <music21.note.Note B->
{3.0} <music21.note.Note C>
{15.0} <music21.stream.Part 56499856>
{0.0} <music21.stream.Measure 0 offset=0.0>
{0.0} <music21.note.Note D>
{1.0} <music21.stream.Measure 0 offset=1.0>
{0.0} <music21.note.Note E>
{1.0} <music21.note.Note F>
{2.0} <music21.note.Note G>
{3.0} <music21.note.Note A>
TEMA 7 Ideas clave
9
Matemticas y Fsica Aplicadas a la Msica
La estructura en MusicXML es la siguiente. Si tenemos curiosidad podemos ver la salida
del sistema en google Chrome, por ejemplo:
Por ltimo vamos a aadir el comps (4/4), las claves y la armadura de clave. Vamos a
poner un sostenido como ejemplo simplemente. Algunos comentarios:
-
En meter.KeySignature() los nmeros positivos indican sostenidos y los negativos
bemoles
En clef.clefFromString(clefName,octava)
o
clefName es el nombre de la clave
octava indica si transportamos una o varias octavas
TEMA 7 Ideas clave
10
Matemticas y Fsica Aplicadas a la Msica
from music21 import note
from music21 import stream
from music21 import meter
from music21 import key
from music21 import clef
s=stream.Score()
partes=
[[[('A',1)],[('C5',1), ('A',1.0), ('B-',1), ('A',1)]],
[[('F',1)],[('G',1),
('G',0.5),
('F',0.5),
('E',0.5),('F',1)]],
[[('D',1)],[('C',1),
('C',1), ('B-3',1), ('C',1)]],
[[('D3',1)],[('E3',1),('F3',1), ('G3',1), ('A3',1)]]]
clefs=[("G2",0),("G2",0),("G2",-1),("F4",0)]
parteIndex=0
TEMA 7 Ideas clave
11
('F',0.5),
Matemticas y Fsica Aplicadas a la Msica
for parte in partes:
p=stream.Part()
#insertamos la clave de cada parte
clave=clef.clefFromString(clefs[parteIndex][0],clefs[parteIndex][1])
p.append(clave)
#el comps
p.append(meter.TimeSignature('4/4'))
#la armadura de clave
p.append(key.KeySignature(1))
for compas in parte:
m=stream.Measure()
for nota in compas:
n=note.Note(nota[0])
n.duration.quarterLength=nota[1]
m.append(n)
p.append(m)
s.append(p)
parteIndex=parteIndex+1
s.show()
El resultado:
TEMA 7 Ideas clave
12
Matemticas y Fsica Aplicadas a la Msica
El ejemplo anterior era algo complejo, pero nos permite darnos cuenta de la estructura
en arbol de las partituras musicales y cmo trasladarlo a programacin. Un esquema
general simplificado lo encontramos en la siguiente figura.
Partitura
Parte 1
Comps 1
Nota
Parte 2
Parte 3
Parte 4
Comps 2
Nota
7.5. Ejemplos de anlisis de msica tonal. Bach y Mozart
En este ltimo captulo dedicado a music21, vamos a ver algunas herramientas bastante
tiles para analizar y extraer caractersticas de las partituras. Lo primero que
necesitamos es instalar la librara matplot y algunas de sus dependencias (numpy,
dateutil,
pyparsing,
six).
Recuperado
http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib
numpy
http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
dateutil
http://www.lfd.uci.edu/~gohlke/pythonlibs/#python-dateutil
pyparsing
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyparsing
six
http://www.lfd.uci.edu/~gohlke/pythonlibs/#six
TEMA 7 Ideas clave
13
de
Matemticas y Fsica Aplicadas a la Msica
Para comprobar que todo est correctamente instalado ejecutamos el siguiente
programa:
from music21 import corpus
s = corpus.parse('bach/bwv57.8')
s.plot('histogram', 'pitch')
El resultado debe ser el siguiente:
Lo que estamos haciendo con este programa es contar la frecuencia de aparicin de
una nota en una partitura. Como vemos, la nota predominante es F4 con 32 apariciones
seguida de B4 y B3. Teniendo en cuenta que la partitura est en Sib mayor, es bastante
habitual la reiteracin de la tnica y la dominante.
TEMA 7 Ideas clave
14
Matemticas y Fsica Aplicadas a la Msica
En algunos casos puede ser ms interesante contar la nota, pero no la octava. En ese caso
cambiemos pitch por pitchClass en el programa anterior:
TEMA 7 Ideas clave
15
Matemticas y Fsica Aplicadas a la Msica
Ahora queda ms claro la reiteracin de la tnica y la subdominante, seguida de un
segundo grado, do.
En cuanto al ritmo, Qu figura es la predominante? A simple vista es la negra, pero
vamos a comprobarlo.
TEMA 7 Ideas clave
16
Matemticas y Fsica Aplicadas a la Msica
Tambin podemos ver en un grfico el ritmo y las notas. La aparicin de un ritmo de
negra en las notas de tnica y dominante es claramente superior (36 y 34 apariciones).
TEMA 7 Ideas clave
17
Matemticas y Fsica Aplicadas a la Msica
Ahora vamos a trabajar ahora con el corpus de music21. Veamos las tonalidades de los
corales de Bach y representmoslo mediante un grfico:
from music21 import *
import matplotlib.pyplot as plt
catalog = stream.Opus()
sostenidos=[0,0,0,0,0,0,0,0]
bemoles=[0,0,0,0,0,0,0,0]
for workName in corpus.getBachChorales():
work = converter.parse(workName)
ks=work.flat.getElementsByClass(key.KeySignature)[0]
TEMA 7 Ideas clave
18
Matemticas y Fsica Aplicadas a la Msica
if(ks.sharps>=0):
sostenidos[ks.sharps]+=1
if(ks.sharps<0):
bemoles[ks.sharps*-1]+=1
plt.plot(sostenidos)
plt.xlabel('sostenidos')
plt.show()
plt.plot(bemoles)
plt.xlabel('bemoles')
plt.show()
TEMA 7 Ideas clave
19
Matemticas y Fsica Aplicadas a la Msica
El resultado es:
TEMA 7 Ideas clave
20
Matemticas y Fsica Aplicadas a la Msica
Sostenidos [88, 75, 62, 37, 11, 0, 0, 0]
Bemoles [0, 55, 58, 14, 2, 0, 0, 0]
Es bastante curioso observar cmo las armaduras de clave favoritas de Bach son por este
orden
0 alteraciones (88 corales)
1 sostenido (75 corales)
2 sostenidos (63 corales)
2 bemoles (58 corales)
1 bemol (55 corales)
Si ejecutamos el mismo procedimiento para el caso de Mozart, el resultado es el
siguiente:
Sostenidos: [13, 13, 15, 10, 0, 0, 0, 0]
Bemoles: [0, 20, 12, 14, 3, 0, 0, 0]
Es interesante observar cmo la tonalidad de 1 bemol (Fa Mayor/re menor) lleva un claro
predominio seguida por dos sostenidos (Re mayor/si menor).
TEMA 7 Ideas clave
21
Matemticas y Fsica Aplicadas a la Msica
7.6. Anlisis serial
En este ltimo apartado vamos a comentar algunas de las posibilidades de music21 para
trabajar con msica serial. Por ejemplo para obtener la matriz serial de una secuencia
de notas dodecafnicas simplemente escribimos lo siguiente:
from music21 import *
print (serial.rowToMatrix([2,1,9,10,5,3,4,0,8,7,6,11]) )
Con ello obtenemos las series directa, invertida, retrogradada y retrogradada
inversa. En el siguiente grfico hemos marcado las series D, I, R, RI, sin transponer.
TEMA 7 Ideas clave
22
Matemticas y Fsica Aplicadas a la Msica
En el corpus de music21 hay algunas obras dodecafnicas de las que podemos obtener
directamente la serie y la matriz.
Para ver el caso de una obra en concreto:
from music21 import *
print (serial.getHistoricalRowByName('RowSchoenbergOp37').matrix() )
El listado de obras disponible es:
http://web.mit.edu/music21/doc/moduleReference/moduleSerial.html#music21.serial
.getHistoricalRowByName
Para ver simplemente la serie y no la matriz:
from music21 import *
a = serial.getHistoricalRowByName('RowWebernOp29')
print a.row
Veamos el caso inverso, supongamos que queremos encontrar si una serie ha sido
empleada en alguna composicin serial (dentro del corpus de music21, claro).
TEMA 7 Ideas clave
23
Matemticas y Fsica Aplicadas a la Msica
from music21 import serial
row = serial.pcToToneRow([2, 3, 9, 1, 11, 5, 8, 7, 4, 0, 10, 6])
print row.findHistorical()
El resultado
['RowSchoenbergOp32']
Para
la
manipulacin
de
las
series
en
music21
tenemos
la
funcin
zeroCenteredTransformation que permite la obtencin directa de la serie en
cualquier transposicin en cualquier estado. La convencin es:
P: directa
I: inversa
R: retrograda
RI: retrgrada inversa
Veamos un ejemplo. Vamos a crear una serie cromtica:
chromatic = serial.pcToToneRow(range(0,12))
print chromatic.pitchClasses()
La salida:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Si queremos calcular la serie directa o inversa centrado en otra altura de nota:
chromaticP3 = chromatic.zeroCenteredTransformation('P',3)
chromaticI6 = chromatic.zeroCenteredTransformation('I',6)
TEMA 7 Ideas clave
24
Matemticas y Fsica Aplicadas a la Msica
El programa complete:
from music21 import serial
chromatic = serial.pcToToneRow(range(0,12))
# La altura de nota como nmeros
print "serie original",chromatic.pitchClasses()
#Las notas con su nombre
print "las notas", chromatic.noteNames()
#La serie original centrada en la cuarta nota
chromaticP3 = chromatic.zeroCenteredTransformation('P',3)
print "P3",chromaticP3.noteNames()
#La serie invertida centrada en la sptima nota
chromaticI6 = chromatic.zeroCenteredTransformation('I',6)
print "I6",chromaticI6.noteNames()
La salida:
serie original [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
las notas ['C', 'C#', 'D', 'E-', 'E', 'F', 'F#', 'G', 'G#', 'A', 'B-',
'B']
P3 ['E-', 'E', 'F', 'F#', 'G', 'G#', 'A', 'B-', 'B', 'C', 'C#', 'D']
I6 ['F#', 'F', 'E', 'E-', 'D', 'C#', 'C', 'B', 'B-', 'A', 'G#', 'G']
TEMA 7 Ideas clave
25
Matemticas y Fsica Aplicadas a la Msica
7.7. Resumen
En este tema hemos visto cmo manipular listas y los distintos tipos streams para
insertar compases, partes y notas, as como la estructura jerrquica de una partitura. En
el ltimo ejemplo hemos comentado el concepto de recursin para iterar sobre los
diversos elementos y escribir una partitura sencilla a 4 partes como es un coral de Bach
usando music21. La actividad que proponemos en este tema va encaminada en este
sentido.
Con este tema damos por finalizado nuestro repaso de music21 y Python. En la ltima
seccin del tema nos hemos centrado en algunas de las posibilidades de anlisis tonal y
serial dentro del mundo de la musicologa, pero las posibilidades de la herramienta como
tal son amplsimas. Invitamos al alumno a seguir profundizando, para lo cual indicamos
algunos artculos y ejemplos.
TEMA 7 Ideas clave
26
Matemticas y Fsica Aplicadas a la Msica
Lo + recomendado
No dejes de leer
Sonatas para piano de Beethoven
El blog de music21 por su creador Michael Scott Cuthbert. Es especialmente
interesante el anlisis que hace de las sonatas para piano de Beethoven en el siguiente
artculo.
Accede al artculo a travs del aula virtual o desde la siguiente direccin web:
http://music21-mit.blogspot.co.uk/2014/07/beethovens-piano-sonatas-applicationof.html
TEMA 7 Lo + recomendado
27
Matemticas y Fsica Aplicadas a la Msica
+ Informacin
A fondo
Inteligencia artificial y msica
Te recomendamos leer el siguiente artculo si ests interesado en inteligencia artificial y
msica.
Accede al artculo a travs del aula virtual o desde la siguiente direccin web:
http://ismir2011.ismir.net/papers/PS3-6.pdf
Bibliografa
Cuthbert, M. (2010). music21: A Toolkit for Computer-Aided Musicology and Symbolic
Music Data. 11th International Society for Music Information Retrieval Conference
(ISMIR 2010). Recuperado de
https://www.academia.edu/243058/music21_A_Toolkit_for_ComputerAided_Musicology_and_Symbolic_Music_Data
Cuthbert, M. Modeling Beats, Accents, Beams, and Time Signatures Hierarchically with
music21 Meter Objects. Massachusetts Institute of TechnologyMusic and Theater Arts.
Recuperado de
https://www.academia.edu/243059/Modeling_Beats_Accents_Beams_and_Time_Sig
natures_Hierarchically_with_music21_Meter_Objects
TEMA 7 + Informacin
28
Matemticas y Fsica Aplicadas a la Msica
Actividades
Trabajo: Partitura en Python y music21
En este tema te vamos a pedir que escribas en Python y music21 una partitura sencilla
(los 4 primeros compases de la sonata k280 en Do Mayor de Mozart). Puedes utilizar el
procedimiento que creas oportuno, el nico requisito es que el programa est bien
ordenado y funciones correctamente. No est permitido usar tinyNotation.
TEMA 7 Actividades
29
Matemticas y Fsica Aplicadas a la Msica
Test
1. El siguiente programa muestra:
A.
B. No funciona.
C.
D.
2. El siguiente programa muestra:
A. Una escala de do a sol en corcheas.
B. Una escala de do a sol en semicorcheas.
C. Da error porque no est indicada la octava de la nota.
D. 5 veces la nota do.
TEMA 7 Test
30
Matemticas y Fsica Aplicadas a la Msica
3. El siguiente programa:
A. Muestra cmo est distribuido el ritmo en la obra de Bach.
B. Muestra la distribucin de altura de nota en la obra de Bach.
C. Dibuja una grfica con la secuencia armnica.
D. Muestra la secuencia de acordes en el coral de Bach.
4. El siguiente programa produce la siguiente salida:
A. Escribe el nmero de sostenidos de los corales de Bach.
B. Escribe el nmero de sostenidos y bemoles de los corales de Bach.
C. Representa grficamente el nmero de sostenidos en las armaduras de clave de
los corales de Bach.
D. Muestra la distribucin de probabilidad de aparicin de un sostenido en los
corales de Bach.
TEMA 7 Test
31
Matemticas y Fsica Aplicadas a la Msica
5. El siguiente programa:
A. Indica la obra y el autor de la siguiente serie dodecafnica.
B. Muestra las series directa, invertida, retrogradada y retrogradada inversa en
todas sus transposiciones.
C. Analiza la intervlica de la serie dodecafnica.
TEMA 7 Test
32