Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Peal of Church bells played by Sonic Pi. Note wobble factor added to give human touch (line 38)
#samples based chimes voice for Sonic Pi by Robin Newman Ocrtober 2014, updated December 2015 and Sep 2016
#program plays a Quarter Peal of Church Bells
#sample from Sonatina Symphonic Orchestra http://sso.mattiaswestlund.net/index.html
#Download and place on Desktop
use_debug false
sname='~/Desktop/Sonatina Symphonic Orchestra/Samples/Percussion/chimes-f#3.wav'
path='/Users/rbn/Desktop/samples/Chimes'
#set_sched_ahead_time! 4
define :pl do |n,d=0.2,pan=0,v=0.8,nodamp=1|
if nodamp!=1
sample sname,rpitch: (n-note(:fs3)),attack: 0,sustain: d*0.95,release: d*0.05,amp: v,pan: pan
else
sample sname,rpitch: (n-note(:fs3)),attack: 0,sustain: 0,release: 1,amp: v,pan: pan
end
end
#=======================define note arrays. Five parts play together=================
obells=[:db3,:eb3,:f3,:gb3,:ab3,:bb3,:c4,:db4]
obells=obells.reverse #reverse order to fit usual number of bells (1 treble to 8 tenor)
#plarray(obells,[0.5]*8)#uncomment to test
puts"Sonic Pi goes bell ringing!"
puts" "
puts"This program uses a sample based chimes voice to simulate a peal of 8 bells"
puts "Bristol Surprise Major Quarter Peal (8 bells)"
puts "Bells tuned as the bells in St. Peter's Oundle"
puts "Peal listed here http://ringing.org/main/pages/method?name=Bristol&class=4&stage=8"
#bell sound order listed in the string ch, consisting of 231 changes of 8 numbers 1-8
ch="123456782143658712346857214386752413685742316587241356784231576824351786234571683254178635247168534276183524678132547618234567812436587142638517462358716432851746238157426318752436815723461875324168572314658732415678231457682134758612435768213456781243658714263857142638574162837514268735416278534612873564218375461238576421358746231578426351872436157823465187326458172346857124365817426385714628375164827315684237518624731568427135648217534628713542681753246187354216837524613857421635874126537814623587412638571462837516482735164827356184725316487523618457326814752386417253681427358641237568421357648231754628135742683175248637154268735146283715648273516847253186745213876425317846521387645123867415326847512364871532468175236418725346812735641823756148325716842375614827351684725318674523186745238176543218675342817635248716534278615432871645237861425387641235867421536847123564872153467825136487523168472513867452318765432178563412758643215768341275863142785613248765314286751324687153428617543268714523861742538167243518764253816745231876543217856342178563427158362417853264715823467518326457813624751863425781643275861423785641328765142386754132685743128675342187654312785634217583624157382614537862413587261453782164573812467583216478531246875132647815362487516342781564327185462317586432718563421758362415738264157382645137284615732486513742685317248635712846531782643571862453781642573861247583164278536124873562147853264175836214573826415372846135274816325784612375481632574186352714685372418657321468753124865713284675318264571386245173684215378624517382641537284613527486135274863125476813524678312564873215467823514768321574862351784632571864352781465372186457328146752384165732486153728416352748613254768123456718243576814253671824356178234516873254617835241687532146783512476853217486351278463152876413257846315274861325476812345678"
puts (ch.length / 8).to_s + " changes"
puts "time taken "+(ch.length.to_f * 0.4/60).to_s+" minutes"
0.upto(ch.length - 1) do |i| #loop performs the ringing
pl(obells[ch[i].to_i - 1],0.4) #bell index offset by -1 to accommodate usual array index numbering from 0
sleep 0.3+rrand(0,0.2) #put a human "wobble" on exact timing to make it sound more realistic
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment