hmt-0.14: Haskell Music Theory

Safe HaskellSafe-Inferred

Music.Theory.Bjorklund

Description

Godfried T. Toussaint et. al. "The distance geometry of music" Journal of Computational Geometry: Theory and Applications Volume 42, Issue 5, July, 2009 (http://dx.doi.org/10.1016/j.comgeo.2008.04.005)

Synopsis

Documentation

bjorklund :: (Int, Int) -> [Bool]Source

Bjorklund's algorithm to construct a binary sequence of n bits with k ones such that the k ones are distributed as evenly as possible among the (n - k) zeroes.

 bjorklund (5,9) == [True,False,True,False,True,False,True,False,True]
 xdot (bjorklund (5,9)) == "x.x.x.x.x"
 let es = [(2,3),(2,5)
          ,(3,4),(3,5),(3,8)
          ,(4,7),(4,9),(4,12),(4,15)
          ,(5,6),(5,7),(5,8),(5,9),(5,11),(5,12),(5,13),(5,16)
          ,(6,7),(6,13)
          ,(7,8),(7,9),(7,10),(7,12),(7,15),(7,16),(7,17),(7,18)
          ,(8,17),(8,19)
          ,(9,14),(9,16),(9,22),(9,23)
          ,(11,12),(11,24)
          ,(13,24)
          ,(15,34)]
 in map (\e -> let e' = bjorklund e in (e,xdot e',iseq_str e')) es
 [((2,3),"xx.","(12)")
 ,((2,5),"x.x..","(23)")
 ,((3,4),"xxx.","(112)")
 ,((3,5),"x.x.x","(221)")
 ,((3,8),"x..x..x.","(332)")
 ,((4,7),"x.x.x.x","(2221)")
 ,((4,9),"x.x.x.x..","(2223)")
 ,((4,12),"x..x..x..x..","(3333)")
 ,((4,15),"x...x...x...x..","(4443)")
 ,((5,6),"xxxxx.","(11112)")
 ,((5,7),"x.xx.xx","(21211)")
 ,((5,8),"x.xx.xx.","(21212)")
 ,((5,9),"x.x.x.x.x","(22221)")
 ,((5,11),"x.x.x.x.x..","(22223)")
 ,((5,12),"x..x.x..x.x.","(32322)")
 ,((5,13),"x..x.x..x.x..","(32323)")
 ,((5,16),"x..x..x..x..x...","(33334)")
 ,((6,7),"xxxxxx.","(111112)")
 ,((6,13),"x.x.x.x.x.x..","(222223)")
 ,((7,8),"xxxxxxx.","(1111112)")
 ,((7,9),"x.xxx.xxx","(2112111)")
 ,((7,10),"x.xx.xx.xx","(2121211)")
 ,((7,12),"x.xx.x.xx.x.","(2122122)")
 ,((7,15),"x.x.x.x.x.x.x..","(2222223)")
 ,((7,16),"x..x.x.x..x.x.x.","(3223222)")
 ,((7,17),"x..x.x..x.x..x.x.","(3232322)")
 ,((7,18),"x..x.x..x.x..x.x..","(3232323)")
 ,((8,17),"x.x.x.x.x.x.x.x..","(22222223)")
 ,((8,19),"x..x.x.x..x.x.x..x.","(32232232)")
 ,((9,14),"x.xx.xx.xx.xx.","(212121212)")
 ,((9,16),"x.xx.x.x.xx.x.x.","(212221222)")
 ,((9,22),"x..x.x..x.x..x.x..x.x.","(323232322)")
 ,((9,23),"x..x.x..x.x..x.x..x.x..","(323232323)")
 ,((11,12),"xxxxxxxxxxx.","(11111111112)")
 ,((11,24),"x..x.x.x.x.x..x.x.x.x.x.","(32222322222)")
 ,((13,24),"x.xx.x.x.x.x.xx.x.x.x.x.","(2122222122222)")
 ,((15,34),"x..x.x.x.x..x.x.x.x..x.x.x.x..x.x.","(322232223222322)")]

xdot :: [Bool] -> StringSource

xdot notation for pattern.

 xdot (bjorklund (5,9)) == "x.x.x.x.x"

iseq :: [Bool] -> [Int]Source

The iseq of a pattern is the distance between True values.

 iseq (bjorklund (5,9)) == [2,2,2,2,1]

iseq_str :: [Bool] -> StringSource

iseq of pattern as compact string.

 iseq_str (bjorklund (5,9)) == "(22221)"