![]() | 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
|
| 2009.03.13 | Introduction to programming with numbers and words (J.N. Oliveira) | ipm0809sl2.pdf
|
| 2009.05.08 | Words which mean music (J.N. Oliveira) | ipm0809sl3.pdf
|
| 2009.05.19 | Map & filter for (quantitative) musical analysis (J.N. Oliveira) | ipm0809sl4.pdf
|
| 2009.06.12 | Towards Music Pattern Recognition (J.N. Oliveira) | ipm0809sl5.pdf
|
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.