[Haskell-cafe] Analysing music
s.clover at gmail.com
Thu Jun 5 15:14:26 EDT 2008
Hofstadter (he of Godel Escher Bach) naturally has a lovely essay on
Chopin reproduced in Metamagical Themas, which might be helpful as well.
On Jun 5, 2008, at 2:46 PM, Kenn Knowles wrote:
> David Cope's early research seems relevant. Some LISP code to train a
> Markov chain on Bach is available from the web page for his current
> He eschews higher-order functions; using them, you should be able to
> port it to very concise and readable Haskell. For the musical side of
> things, the powerpoint presentations hint at additional data you can
> put into your states and transitions to get better results for e.g.
> cadences, characteristic embellishments, and melodic arcs.
> Hope this is helpful,
> - Kenn
> On Thu, Jun 5, 2008 at 11:27 AM, Achim Schneider <barsoap at web.de>
>> The recent discussion about Markoff chains inspired me to try to
>> train one with all the Bach midi's I have on my disk, collecting
>> statistics on what intervals tend to get played simultaneously,
>> which follow others and in which way the pitch offsets from its mean,
>> so that melodies fall and raise "naturally".
>> The rationale is that if it's Bach, it's harmonious but not
>> any kind of usual chord progression.
>> So far, I got (a bit confused around the edges):
>> getMid mf = do
>> mid <- MidiLoad.fromFile mf
>> return $ MidiRead.retrieveTracks mid
>> toMelody :: MidiMusic.T -> StdMelody.T
>> toMelody = Music.mapNote f
>> f note =
>> let body = MidiMusic.body note
>> in Melody.Note StdMelody.na (MidiMusic.pitch body)
>> main = do
>> args <- Env.getArgs
>> let mf: = args
>> m <- getMid mf
>> putStr $ Format.prettyMelody $ Optimise.all
>> $ Music.chord $ map (\m -> Music.line $ map toMelody m) m
>> which results in
>> [e 3 bn na,
>> [b 2 wn na,
>> [hnr, d 3 wn na, hnr, cs 3 hn na, a 2 hn na,
>> chord [cs 3 hn na, line [b 2 hn na, c 3 hn na]]]]]
>> , for a set of random clicks in rosegarden's matrix editor.
>> Right now, I'm desperately searching for functions that can help me
>> analyse this beast, which afaict right now works best by having a
>> multitude of transformations (e.g. one big top-level chord with
>> polyphony and a hell a lot of rests) that provide easy access to
>> whatever information is needed.
>> Does anyone of you know about previous work in this area? I don't
>> to break cultural imperatives by not being as lazy as possible.
>> (c) this sig last receiving data processing entity. Inspect
>> headers for
>> past copyright information. All rights reserved. Unauthorised
>> hiring, renting, public performance and/or broadcasting of this
>> signature prohibited.
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe