File: selfsim.html

package info (click to toggle)
hugs 1.4.199801-1
  • links: PTS
  • area: non-free
  • in suites: slink
  • size: 7,220 kB
  • ctags: 5,609
  • sloc: ansic: 32,083; haskell: 12,143; yacc: 949; perl: 823; sh: 602; makefile: 236
file content (82 lines) | stat: -rw-r--r-- 5,403 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

<title>Haskore Tutorial: Fractal Music</title>
<body bgcolor="#ffffff"><i>The Haskore Tutorial</i><br><a href="index.html">top</a> <a href="ChildSong6.html">back</a> <a href="GeneralMidi.html">next</a><hr>
section D
<a name="self-similar"></a><a name="sect13"></a>
<h2>13<tt>&nbsp;&nbsp;</tt>Example of Simple Self-Similar (Fractal) Music</h2>
<p>

<tt>&nbsp;<br>
<br>
&gt;&nbsp;module&nbsp;SelfSim&nbsp;where<br>
&gt;<br>
&gt;&nbsp;import&nbsp;Haskore<br>
&gt;&nbsp;import&nbsp;TestHaskore<br>
<br>
An&nbsp;example&nbsp;of&nbsp;self-similar,&nbsp;or&nbsp;fractal,&nbsp;music.<br>
<br>
&gt;&nbsp;data&nbsp;Cluster&nbsp;=&nbsp;Cl&nbsp;SNote&nbsp;[Cluster]&nbsp;&nbsp;--&nbsp;this&nbsp;is&nbsp;called&nbsp;a&nbsp;Rose&nbsp;tree<br>
&gt;&nbsp;type&nbsp;Pat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;[SNote]<br>
&gt;&nbsp;type&nbsp;SNote&nbsp;&nbsp;&nbsp;=&nbsp;[(AbsPitch,Dur)]&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;i.e.&nbsp;a&nbsp;chord<br>
&gt;&nbsp;<br>
&gt;&nbsp;sim&nbsp;::&nbsp;Pat&nbsp;-&gt;&nbsp;[Cluster]<br>
&gt;&nbsp;sim&nbsp;pat&nbsp;=&nbsp;map&nbsp;mkCluster&nbsp;pat<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;mkCluster&nbsp;notes&nbsp;=&nbsp;Cl&nbsp;notes&nbsp;(map&nbsp;(mkCluster&nbsp;.&nbsp;addmult&nbsp;notes)&nbsp;pat)<br>
&gt;&nbsp;<br>
&gt;&nbsp;addmult&nbsp;pds&nbsp;iss&nbsp;=&nbsp;zipWith&nbsp;addmult'&nbsp;pds&nbsp;iss<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;addmult'&nbsp;(p,d)&nbsp;(i,s)&nbsp;=&nbsp;(p+i,d*s)<br>
&gt;<br>
&gt;&nbsp;simFringe&nbsp;n&nbsp;pat&nbsp;=&nbsp;fringe&nbsp;n&nbsp;(Cl&nbsp;[(0,0)]&nbsp;(sim&nbsp;pat))<br>
&gt;&nbsp;<br>
&gt;&nbsp;fringe&nbsp;0&nbsp;(Cl&nbsp;note&nbsp;cls)&nbsp;=&nbsp;[note]<br>
&gt;&nbsp;fringe&nbsp;n&nbsp;(Cl&nbsp;note&nbsp;cls)&nbsp;=&nbsp;concat&nbsp;(map&nbsp;(fringe&nbsp;(n-1))&nbsp;cls)<br>
&gt;&nbsp;<br>
&gt;&nbsp;--&nbsp;this&nbsp;just&nbsp;converts&nbsp;the&nbsp;result&nbsp;to&nbsp;Haskore:<br>
&gt;&nbsp;simToHask&nbsp;s&nbsp;=&nbsp;let&nbsp;mkNote&nbsp;(p,d)&nbsp;=&nbsp;Note&nbsp;(pitch&nbsp;p)&nbsp;d&nbsp;[]<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;line&nbsp;(map&nbsp;(chord&nbsp;.&nbsp;map&nbsp;mkNote)&nbsp;s)<br>
&gt;<br>
&gt;&nbsp;--&nbsp;and&nbsp;here&nbsp;are&nbsp;some&nbsp;examples&nbsp;of&nbsp;it&nbsp;being&nbsp;applied:<br>
&gt;<br>
&gt;&nbsp;sim1&nbsp;n&nbsp;=&nbsp;Instr&nbsp;"bass"&nbsp;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Trans&nbsp;36&nbsp;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Tempo&nbsp;4&nbsp;1&nbsp;(simToHask&nbsp;(simFringe&nbsp;n&nbsp;pat1))))<br>
&gt;&nbsp;t6&nbsp;=&nbsp;test&nbsp;(sim1&nbsp;4)<br>
&gt;<br>
&gt;&nbsp;sim2&nbsp;n&nbsp;=&nbsp;Instr&nbsp;"piano"&nbsp;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Trans&nbsp;53<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Tempo&nbsp;4&nbsp;1&nbsp;(simToHask&nbsp;(simFringe&nbsp;n&nbsp;pat2))))<br>
&gt;&nbsp;t7&nbsp;=&nbsp;test&nbsp;(sim2&nbsp;4)<br>
&gt;<br>
&gt;&nbsp;sim12&nbsp;n&nbsp;=&nbsp;sim1&nbsp;n&nbsp;:=:&nbsp;sim2&nbsp;n<br>
&gt;&nbsp;t8&nbsp;=&nbsp;test&nbsp;(sim12&nbsp;4)<br>
&gt;<br>
&gt;&nbsp;sim3&nbsp;n&nbsp;=&nbsp;Instr&nbsp;"vibes"&nbsp;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Trans&nbsp;48&nbsp;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Tempo&nbsp;4&nbsp;1&nbsp;(simToHask&nbsp;(simFringe&nbsp;n&nbsp;pat3))))<br>
&gt;&nbsp;t9&nbsp;=&nbsp;test&nbsp;(sim3&nbsp;3)<br>
&gt;<br>
&gt;&nbsp;sim4&nbsp;n&nbsp;&nbsp;=&nbsp;(Trans&nbsp;60<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Tempo&nbsp;2&nbsp;1&nbsp;(simToHask&nbsp;(simFringe&nbsp;n&nbsp;pat4'))))<br>
&gt;&nbsp;<br>
&gt;&nbsp;sim4s&nbsp;n&nbsp;=&nbsp;let&nbsp;s&nbsp;=&nbsp;sim4&nbsp;n&nbsp;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l1&nbsp;=&nbsp;Instr&nbsp;"flute"&nbsp;s<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2&nbsp;=&nbsp;Instr&nbsp;"bass"&nbsp;&nbsp;(Trans&nbsp;(-36)&nbsp;(revM&nbsp;s))<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;l1&nbsp;:=:&nbsp;l2<br>
&gt;<br>
&gt;&nbsp;ss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;sim4s&nbsp;3<br>
&gt;&nbsp;durss&nbsp;&nbsp;=&nbsp;dur&nbsp;ss<br>
&gt;<br>
&gt;&nbsp;t10&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;test&nbsp;ss<br>
&gt;<br>
&gt;&nbsp;pat1,pat2,pat3,pat4,pat4'&nbsp;::&nbsp;[SNote]<br>
&gt;&nbsp;pat1&nbsp;=&nbsp;[[(0,1.0)],[(4,0.5)],[(7,1.0)],[(5,0.5)]]<br>
&gt;&nbsp;pat2&nbsp;=&nbsp;[[(0,0.5)],[(4,1.0)],[(7,0.5)],[(5,1.0)]]<br>
&gt;&nbsp;pat3&nbsp;=&nbsp;[[(2,0.6)],[(5,1.3)],[(0,1.0)],[(7,0.9)]]<br>
&gt;&nbsp;pat4'&nbsp;=&nbsp;[[(3,0.5)],[(4,0.25)],[(0,0.25)],[(6,1.0)]]<br>
&gt;&nbsp;pat4&nbsp;=&nbsp;[[(3,0.5),(8,0.5),(22,0.5)],[(4,0.25),(7,0.25),(21,0.25)],<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(0,0.25),(5,0.25),(15,0.25)],[(6,1.0),(9,1.0),(19,1.0)]]<br>
<br>


<hr><body bgcolor="#ffffff"><i>The Haskore Tutorial</i><br><a href="index.html">top</a> <a href="ChildSong6.html">back</a> <a href="GeneralMidi.html">next</a>
</tt>