<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>live/db_drum_definition.rb</filename>
    </added>
    <added>
      <filename>live/harmonic_cycle.rb</filename>
    </added>
    <added>
      <filename>music_software_files/fuck.rns</filename>
    </added>
    <added>
      <filename>music_software_files/yurt.rns</filename>
    </added>
    <added>
      <filename>yurt.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -22,11 +22,13 @@ def note(midi_note_number, channel)
 end
 
 notes = []
-(36..45).each do |midi_note_number|
-  notes &lt;&lt; Drum.new(:note =&gt; note(midi_note_number, 4),
-                    :when =&gt; L{|beat| false},
-                    :number_generator =&gt; L{rand},
-                    :next =&gt; L{|queue| queue[rand(queue.size)]},
-                    :probabilities =&gt; probabilities[midi_note_number] || probabilities[:none])
+if rand &gt; 0.75
+  (36..45).each do |midi_note_number|
+    notes &lt;&lt; Drum.new(:note =&gt; note(midi_note_number, 4),
+                      :when =&gt; L{|beat| false},
+                      :number_generator =&gt; L{rand},
+                      :next =&gt; L{|queue| queue[rand(queue.size)]},
+                      :probabilities =&gt; probabilities[midi_note_number] || probabilities[:none])
+  end
 end
 notes</diff>
      <filename>ethniq.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,11 +22,13 @@ def note(midi_note_number, channel)
 end
 
 notes = []
-(36..45).each do |midi_note_number|
-  notes &lt;&lt; Drum.new(:note =&gt; note(midi_note_number, 5),
-                    :when =&gt; L{|beat| false},
-                    :number_generator =&gt; L{rand},
-                    :next =&gt; L{|queue| queue[rand(queue.size)]},
-                    :probabilities =&gt; probabilities[midi_note_number] || probabilities[:none])
+if rand &gt; 0.85
+  (36..45).each do |midi_note_number|
+    notes &lt;&lt; Drum.new(:note =&gt; note(midi_note_number, 5),
+                      :when =&gt; L{|beat| false},
+                      :number_generator =&gt; L{rand},
+                      :next =&gt; L{|queue| queue[rand(queue.size)]},
+                      :probabilities =&gt; probabilities[midi_note_number] || probabilities[:none])
+  end
 end
 notes</diff>
      <filename>forest_sounds.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,32 +2,85 @@ $clock.bpm = 30
 $mutation = L{|measure| 0 == (measure - 1) % 2}
 $measures = 4
 
-root = OCTAVES[2].to_a[SCALE[CIRCLE_OF_FIFTHS.next]]
-puts root
+@root = OCTAVES[2].to_a[SCALE[[CIRCLE_OF_FIFTHS,CIRCLE_OF_FOURTHS][rand(2)].next]]
 
-def note(midi_note_number, channel)
+def midi_note(midi_note_number, channel, duration)
   Note.create(:channel =&gt; channel,
               :number =&gt; midi_note_number,
-              :duration =&gt; 3.00,
+              :duration =&gt; duration,
               :velocity =&gt; 100 + rand(27))
 end
 
 notes = []
-bass = Drum.new(:note =&gt; note(root - 36, 1),
+bass = Drum.new(:note =&gt; midi_note(@root - 36, 1, 3.00),
                 :when =&gt; L{|beat| false},
                 :next =&gt; L{|queue| queue[queue.size - 1]},
                 :number_generator =&gt; L{rand},
                 :probabilities =&gt; [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0])
 notes &lt;&lt; bass
+bass5th = Drum.new(:note =&gt; midi_note((@root - 36) + 5, 1, 3.00),
+                   :when =&gt; L{|beat| false},
+                   :next =&gt; L{|queue| queue[queue.size - 1]},
+                   :number_generator =&gt; L{rand},
+                   :probabilities =&gt; [0.0, 0.0, 0.0, 0.0, 0.15, 0.0, 0.0, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.15, 0.0])
+notes &lt;&lt; bass5th
 
+# channel 9 is the easter egg!
+pad_channel = [2,2,2,2,2,2,2,2,
+               7,7,7,7,7,7,7,7,7,
+               8,8,8,8,8,8,8,8,
+               9,
+               10,10,10,10,10,10,10,
+               11,11,11,11,11,11,11,11][rand(41)] # 11 is unassigned - sometimes it's silent
+# pad_channel = 8
 MAJOR_TRIAD.each do |number|
-  notes &lt;&lt; Drum.new(:note =&gt; note(root + number, 2),
+  notes &lt;&lt; Drum.new(:note =&gt; midi_note(@root + number, pad_channel, 3.00),
                     :when =&gt; L{|beat| false},
                     :next =&gt; L{|queue| queue[queue.size - 1]},
                     :number_generator =&gt; L{rand},
                     :probabilities =&gt; [1.0] + [0.0] * 15)
+end
+
+def temple_bells
+  boost = {}
+  # (0..11).each {|note| boost[note] = 0.0}
+  # MAJOR_SCALE.each {|note| boost[note] += 0.05}
+  # root = MAJOR_SCALE[0] ; boost[root] += 0.2
+  MAJOR_TRIAD.each {|note| boost[note] = 0.1}
+  
+  rhythm = [0.0, 0.0, 0.5, 0.0,
+            0.25, 0.0, 0.0, 0.0,
+            0.25, 0.0, 0.75, 0.0,
+            0.0, 0.05, 0.0, 0.05]
+  
+  bells = {}
+  boost.keys.each do |note|
+    bells[note] = rhythm.collect {|probability| probability + boost[note]}
   end
-notes
+  
+  elevated_root = 60 + @root
+  wtf = []
+  bells.each do |note, probabilities|
+    next unless rand &gt; 0.7
+    wtf &lt;&lt; Drum.new(:note =&gt; midi_note(elevated_root + note, 6, 0.25),
+                      :when =&gt; L{|beat| false},
+                      :next =&gt; L{|queue| queue[queue.size - 1]},
+                      :number_generator =&gt; L{rand},
+                      :probabilities =&gt; probabilities)
+  end
+  wtf.compact
+  wtf
+end
+
+notes += temple_bells
+
+
 
-# def temple_bells ; do(:awesome).stuff ; end
-# notes &lt;&lt; temple_bells
+
+
+
+
+
+
+# this file expected to return array of notes!
+notes</diff>
      <filename>harmonic_cycle.rb</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>music_software_files/temple.rns</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@
 
 require 'lib/archaeopteryx'
 
-$clock = Clock.new(60)
+$clock = Clock.new(30)
 $mutation = L{|measure| 0 == (measure - 1) % 2}
 $measures = 4
 </diff>
      <filename>temple.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,11 +22,13 @@ def note(midi_note_number, channel)
 end
 
 notes = []
-(36..45).each do |midi_note_number|
-  notes &lt;&lt; Drum.new(:note =&gt; note(midi_note_number, 3),
-                    :when =&gt; L{|beat| false},
-                    :number_generator =&gt; L{rand},
-                    :next =&gt; L{|queue| queue[rand(queue.size)]},
-                    :probabilities =&gt; probabilities[midi_note_number] || probabilities[:none])
+if rand &gt; 0.95
+  (36..45).each do |midi_note_number|
+    notes &lt;&lt; Drum.new(:note =&gt; note(midi_note_number, 3),
+                      :when =&gt; L{|beat| false},
+                      :number_generator =&gt; L{rand},
+                      :next =&gt; L{|queue| queue[rand(queue.size)]},
+                      :probabilities =&gt; probabilities[midi_note_number] || probabilities[:none])
+  end
 end
 notes</diff>
      <filename>xanadu.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>150acc422389af20b197d8a4c07f2b1a1d966c30</id>
    </parent>
  </parents>
  <author>
    <name>Giles Bowkett</name>
    <email>gilesb@gmail.com</email>
  </author>
  <url>http://github.com/gilesbowkett/archaeopteryx/commit/5abd15a768ceb09926bbba869adeb4267f532fae</url>
  <id>5abd15a768ceb09926bbba869adeb4267f532fae</id>
  <committed-date>2008-08-24T09:29:32-07:00</committed-date>
  <authored-date>2008-08-24T09:29:32-07:00</authored-date>
  <message>Got the ambient thing working to the point where I can call it done. Started in on a thing for
live performance.

The ambient thing runs off the file temple.rns (Reason file) and temple.rb. It plays nice slow
ambient music until the end of time.

The live performance thing uses yurt.rb, yurt.rns, fuck.rns, and the files in live/. The live thing
can do chord progressions; everything else in this commit can also do key changes, basslines, etc.,
I think that was all in the last commit and since then I've only been tweaking the ambient one to
make it sound better, but I'm not really sure. The past few days have involved a lot of last-minute
logistical panicking.

This process, getting stuff ready, is uncovering loads of flaws. I've got a to-do list going on.
Maybe upgrade to a Lighthouse account near-future.

The chord progressions work pretty well. It's actually almost at a point of sounding good for the
dance music use case when you just leave it running. The goal is this is something I can play live
and tweak. In practice it's not totally there yet. I might be able to hack on it *at* Burning Man
but it seems unlikely, given the cost, the once-a-year-ness, the it-only-it-happens-here-ness, the
general wonder and indescribability, the fact that many of the women are topless, and the fact that
I can hack on my laptop more or less anywhere anytime.

Burning Man is kind of the opposite of Hollywood in that it's a very, very failure-tolerant
environment for artistic experiments. Obviously this only applies to the art side of things; the
desert is not failure-tolerant from a survival point of view at all. But my point is, this live
stuff, I knew it would be good enough for a one-hour live set in a failure-tolerant artistic
environment. I'm beginning to see how it can become good enough for hour-plus live sets in highly
*competitive* artistic environments in the reasonably near future.</message>
  <tree>d930a7f7bc906e4b76d2672f6b3957152f437fc7</tree>
  <committer>
    <name>Giles Bowkett</name>
    <email>gilesb@gmail.com</email>
  </committer>
</commit>
