Vous êtes sur la page 1sur 32

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

Vous aimerez peut-être aussi