Informática para a Musicologia - 2008/09 | |
---|---|
[ DI/UM ] |
Equipa docente |
Ref | Dia | Hora | Tipo | Sala | Cursos | Docente |
---|---|---|---|---|---|---|
1 | 6.ª-feira | 18h00-20h00 | TP+P | DI 1.08 | LM | J.J. Almeida |
2 | 6.ª-feira | 20h30-22h30 | T | DI 1.08 | LM | J.N. Oliveira |
Dia | Hora | Cursos | Docente |
---|---|---|---|
5.ª-feira | 18h00-19h00 | LM | J.N. Oliveira |
4.ª-feira | 18h00-19h00 | LM | J.J. Almeida |
db1
de todos os opus de L.v. Beethoven (1770-1827) disponível a
partir de LvB.hs
:
import Ipm import LvB -- given: sup [a] = a sup(a:l) = max a (sup l) inf [a] = a inf(a:l) = min a (inf l) diff l = (sup l) - (inf l) tones x = [ getclef t | t <- gather [m1,m2,m3,m4,m5,m6,m7] x , "" /= t ] -- we build the query: tonal_span_h = hist (map diff [ tones x | x <- db1, tones x /= [] ])
diff [3,0,-4,2,1] = 3-(-4) = 7
. Já tones x
é mais
complicada de analisar, pois baseia-se na função gather
(de Ipm.hs
)
que dá listas de atributos de obras musicais, neste caso a lista das tonalidades
de todos os andamentos de uma obra x
. Por exemplo,
gather [m1,m2,m3,m4] (head db1) = ["-3","-4","-3","-3"]
onde head db1
nos dá a primeira obra da lista db1
, o op.1.nr.1
(`head
' quer dizer `cabeça', indicando a selecção do elemento que está à cabeça de uma sequência).
A função tones
usa ainda a função getclef
que extrai o número de bemóis (se negativo)
ou de sustenidos (se positivo) de uma dada tonalidade, abstraíndo do facto de estar em modo menor ou maior.
Por exemplo, o número de bemóis de Mi bemol maior é o mesmo que o de Dó menor, como se pode ver calculando
getclef "-3" = -3
getclef "-3m" = -3
Voltando a tones
tem-se, por exemplo,
tones (head db1) = [-3,-4,-3,-3]
o que permite dizer que a amplitude tonal desta obra é diff [-3,-4,-3,-3] = 1
, oscilando entre -3
(Mi bemol maior) e -4
(Lá bemol maior).
Ora é precisamente isso que tonal_span_h
faz: constrói o histograma da amplitude tonal das obras de Beethoven:
tonal_span_h = [(1,34),(3,33),(0,65),(2,2),(4,15),(9,1),(7,1),(5,4),(8,1),(6,2)]
onde vemos existirem 34 obras com amplitude 1, 33 com amplitude 3, etc. A amplitude máxima é 9, existindo apenas uma obra nessas circunstâncias, a sonata op.27, nr.2, em Dó# menor. Como verificar este facto? Para isso há que responder às questões que se seguem:
getAll n = [ x | x <- db1, ............., ............... == n ]
que deverá dar todas as obras com amplitude n
. Por exemplo, deverá obter
tones
sob a forma map & filter, isto é, usando os combinadores map
e filter
.
filter
, map
, concat
e gather
, defina a `query'
que nos dá o histograma das tonalidades de todos os andamentos das
obras de L.v. Beethoven que constam de LvB.hs.
Data | Descrição | Ficheiro(s) |
---|---|---|
2009.03.06 | Computing for Musicology -- introduction to the course (J.N. Oliveira) | ipm0809sl1.pdf (4.6Mb) |
2009.03.13 | Introduction to programming with numbers and words (J.N. Oliveira) | ipm0809sl2.pdf (919Kb) |
2009.05.08 | Words which mean music (J.N. Oliveira) | ipm0809sl3.pdf (3.1Mb) |
2009.05.19 | Map & filter for (quantitative) musical analysis (J.N. Oliveira) | ipm0809sl4.pdf (220Kb) |
2009.06.12 | Towards Music Pattern Recognition (J.N. Oliveira) | ipm0809sl5.pdf (1.3Mb) |
J.M. Valença and J.B. Barros.
Fundamentos da Computação II: Programação funcional.
Universidade Aberta, 2000.
ISBN 972-674-318-4, 234 p.
Douglas R. Hofstadter.
Gödel, Escher, Bach: An Eternal Golden Braid.
Basic Books, January 1999.
Prova | Data | Hora | Salas | Enunciado |
---|---|---|---|---|
Exercício escrito | 20-Jul | 17h00-19h00 | DI 1.08 | |
Exame de recurso | 24-Jul | 17h00-19h00 | DI 1.08 |
Voltar à página principal de IPM.