From a162e95a38d89e2e53360cdcf5d0100aee887b3a Mon Sep 17 00:00:00 2001 From: Richard Sewell Date: Sun, 16 Aug 2015 11:40:56 +0000 Subject: [PATCH] sensible randomisation of note sequences, original chord choices from Acid sample --- world-o-techno.rb | 69 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/world-o-techno.rb b/world-o-techno.rb index 4795d75..6acccfb 100755 --- a/world-o-techno.rb +++ b/world-o-techno.rb @@ -1,5 +1,17 @@ +# Welcome to Sonic Pi v2.6 +# world-o-techno +# Acid sample coded by Sam Aaron +# Hacked around by RS & JHR +# This file should be in /home/pi/world-o-techno so the startup script can find it + +# See http://www.jarkman.co.uk/catalog/robots/worldotechno.htm and +# https://github.com/jarkman/world-o-techno for background + +# GPS ruby code derived from https://github.com/ndarilek/rb-gps +# + require '/home/pi/world-o-techno/gps/gps.rb' -use_debug true +use_debug false gps = Gps::Receiver.create('gpsd',:host => 'localhost', :port => 2947) @@ -10,27 +22,32 @@ define :gpsSatelliteCount do if gps != nil && gps.satellites != nil && gps.satellites != 0 s = gps.satellites.count end - print "Satellites: #{s}" + puts "Satellites:" + puts s return s; end define :gotFix do g = false; + print "gps in gotFix" print gps if gps != nil - g = gps.latitude != nil + g = gps.latitude != nil && gps.latitude != 0 end return g end define :lat do + l = 0.0 if gps != nil && gps.latitude != nil l = gps.latitude end + print "lat" + print l return l end @@ -40,9 +57,24 @@ define :lon do if gps != nil && gps.longitude != nil l = gps.longitude end + print "lon" + print l return l end +define :latInt do + l = lat().abs * 10**9 + print "latInt" + print l + return l +end + +define :lonInt do + l = lon().abs * 10**9 + print "lonInt" + print l + return l +end define :speed do l = 0.0 @@ -58,9 +90,9 @@ load_sample :bd_boom load_sample :bd_haus define :playSatelliteCount do - + # More satellites, more thumps, so we can hear the process of acquisition i = 0 - print "loop" + print ":playSatelliteCount" 4.times do c = gpsSatelliteCount() if i == 0 @@ -80,15 +112,18 @@ define :playSatelliteCount do end define :playTune do + print ":playTune" + cue :foo 4.times do |i| - long = (lon().abs * 10**9) % 100 + long = lonInt() % 100 use_random_seed long 4.times do sample :bd_fat, amp: 5 + use_random_seed lonInt() % 257867 # Use a selection of large primes to get different seeds for each loop 4.times do use_synth :tb303 - play chord(:e5, :minor).choose, attack: 0, release: 0.1, cutoff: rrand_i(50, 90) + i * 10 + play chord(:e3, :minor).choose, attack: 0, release: 0.1, cutoff: rrand_i(50, 90) + i * 10 sleep 0.125 end end @@ -102,10 +137,11 @@ define :playTune do use_synth :tb303 8.times do |i| sample :bd_fat, amp: 5 + use_random_seed latInt() % 1412041 4.times do gspeed = speed().modulo(1) puts gspeed - play chord(:b4, :minor).choose, attack: 0, release: 0.05, cutoff: rrand_i(70, 98) + i, res: gspeed + play chord(:e3, :minor).choose, attack: 0, release: 0.05, cutoff: rrand_i(70, 98) + i, res: gspeed sleep 0.125 end end @@ -118,10 +154,11 @@ define :playTune do with_fx :reverb, mix: 0.3 do |r| 8.times do |m| sample :bd_fat, amp: 5 + use_random_seed (lonInt() + latInt()) % 2256197 4.times do control r, mix: 0.3 + (0.5 * (m.to_f / 32.0)) unless m == 0 if m % 8 == 0 use_synth :prophet - play chord(:e6, :minor).choose, attack: 0, release: 0.08, cutoff: rrand_i(110, 130) + play chord(:a3, :minor).choose, attack: 0, release: 0.08, cutoff: rrand_i(110, 130) sleep 0.125 end end @@ -133,14 +170,16 @@ define :playTune do cue :quux in_thread do - use_random_seed 668 - slat = (lat().abs * 10**7).modulo(1) + 0.1 - with_fx :slicer, mix: 0.75, wave: 3, phase: slat do - 4.times do - sample :bd_fat, amp: 5 + + 4.times do + sample :bd_fat, amp: 5 + slat = latInt().modulo(1) + 0.1 + use_random_seed lonInt() % 9562447 + + with_fx :slicer, mix: 0.75, wave: 3, phase: slat do 4.times do use_synth :tb303 - play chord(:d3, :major).choose, attack: 0, release: 0.1, cutoff: rrand(50, 100) + play chord(:e3, :major).choose, attack: 0, release: 0.1, cutoff: rrand(50, 100) sleep 0.25 end end