Tau is improving all the time. Tonight coded in some Bach organ music. Works well. Had to split one part as there is a 250 character buffer on typed literal arrays.
You can past the code or use the link to load
--IN DULCI JUBILO coded by Robin Newman for Sonic Tau April 2026
use_bpm 267
--note and duration data
a1 = [:r, :r, :G4, :G4, :G4, :B4, :C5, :D5, :E5, :D5, :G4, :G4, :G4, :B4, :C5, :D5, :E5, :D5, :D5, :E5, :D5, :C5, :B4, :A4, :B4, :G4, :G4, :A4, :A4, :B4, :A4, :G4, :A4, :B4, :D5, :B4, :G4, :D5, :E5, :C5, :D5, :B4, :G4, :D5, :C5, :E4, :B4, :G4, :D4, :B4, :A4, :C4, :G4, :D4, :B3, :Fs4, :G4, :A4, :E4, :C4, :E4, :A4, :Fs4, :B4, :G4, :D4, :B4, :A4, :C4, :G4, :D4, :B3, :G4, :A4, :C4, :B4, :G4, :D4, :G4, :B4, :E4, :E4, :Fs4, :Fs4, :G4, :A4, :B4, :C5, :D5, :B4, :B4, :A4, :A4, :G4, :G4, :Fs4, :G4, :B4, :C5, :D5, :E5, :D5, :Cs5, :A4, :B4, :Cs5, :D5, :A4, :G4, :A4, :Fs4, :G4, :A4, :G4, :Fs4, :D4, :D4, :D4, :Fs4, :G4, :A4, :B4, :A4, :D4, :D4, :D4, :Fs4, :G4, :A4, :B4, :A4, :A4, :B4, :A4, :G4, :Fs4, :E4, :Fs4, :D4, :D4, :E4, :E4, :Fs4, :E4, :D4, :E4, :Fs4, :A4, :Fs4, :D4, :A4, :B4, :G4, :A4, :Fs4, :D4, :A4, :G4, :B3, :Fs4, :D4, :A3, :Fs4, :E4, :G3, :D4, :A3, :Fs3, :Cs4, :D4, :E4, :B3, :G3, :B3, :E4, :Cs4, :Fs4, :D4, :A3, :Fs4, :E4, :G3, :D4, :A3, :Fs3, :D4, :E4, :G3, :Fs4, :D4, :A3, :D4, :Fs4, :E4, :E4, :Fs4, :Fs4, :G4, :A4, :B4, :C5, :D5, :B4, :B4, :A4, :A4, :G4, :Fs4, :G4, :D4, :E4, :Fs4, :G4, :A4, :G4, :Fs4, :G4, :A4, :B4, :C5, :B4, :C5, :D5, :E5, :F5, :E5, :Fs5, :G5]
b1 = [2.0, 2.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 6.0, 4.0, 2.0, 4.0, 2.0, 2.0, 2.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 6.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 4.0, 2.0, 4.0, 2.0, 3.0, 1.0, 1.0, 1.0, 6.0, 4.0, 2.0, 4.0, 2.0, 6.0, 4.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 6.0, 4.0, 2.0, 4.0, 2.0, 2.0, 2.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 4.0, 2.0, 6.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 4.0, 2.0, 4.0, 2.0, 3.0, 1.0, 1.0, 1.0, 6.0, 4.0, 2.0, 4.0, 2.0, 10.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.5, 1.0, 1.0, 6.0]
a2 = [:r, :r, :B3, :B3, :A3, :B3, :C4, :D4, :C4, :D4, :E4, :B3, :G3, :A3, :B3, :C4, :B3, :C4, :B3, :A3, :B3, :C4, :B3, :A3, :B3, :C4, :D4, :C4, :D4, :E4, :B3, :G3, :A3, :B3, :C4, :B3, :G4, :F4, :E4, :D4, :C4, :B3, :F4, :E4, :D4, :C4, :B3, :C4, :D4, :E4, :D4, :E4, :C4, :E4, :D4, :C4, :B3, :C4, :D4, :C4, :B3, :C4, :B3, :C4, :A3, :B3, :C4, :D4, :B3, :C4, :D4, :C4, :D4, :B3, :G3, :A3, :B3, :C4, :B3, :C4, :D4, :E4, :Fs4, :D4, :G4, :r, :r, :r, :r, :r, :r, :r, :r, :r, :C4, :B3, :C4, :A3, :r, :D4, :C4, :D4, :B3, :r, :E4, :D4, :C4, :B3, :A3, :A4, :G4, :A4, :Fs4, :E4, :D4, :G4, :E4, :Fs4, :G4, :E4, :Fs4, :G4, :Fs4, :r, :D4, :C4, :D4, :E4, :D4, :r, :C4, :B3, :C4, :D4, :C4, :B3, :G4, :G4, :Fs4, :E4, :D4, :Cs4, :D4, :Fs3, :Fs3, :E3, :Fs3, :G3, :A3, :G3, :A3, :B3, :Fs3, :D3, :E3, :Fs3]
b2 = [2.0, 2.0, 2.0, 2.0, 1.0, 1.0, 2.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0, 2.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 4.0, 2.0, 4.0, 2.0, 2.0, 2.0, 2.0, 4.0, 2.0, 2.0, 1.0, 1.0, 2.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0]
a2b = [:G3, :Fs3, :G3, :Fs3, :E3, :Fs3, :G3, :Fs3, :E3, :Fs3, :G3, :A3, :G3, :A3, :B3, :Fs3, :D3, :E3, :Fs3, :G3, :Fs3, :D4, :C4, :B3, :A3, :G3, :Fs3, :C4, :B3, :A3, :G3, :Fs3, :G3, :A3, :B3, :A3, :B3, :G3, :B3, :A3, :G3, :Fs3, :G3, :A3, :G3, :Fs3, :G3, :Fs3, :G3, :E3, :Fs3, :G3, :A3, :Fs3, :G3, :A3, :G3, :A3, :Fs3, :D3, :E3, :Fs3, :G3, :Fs3, :G3, :A3, :B3, :Cs4, :A3, :D4, :r, :r, :r, :r, :r, :r, :r, :r, :r, :C4, :B3, :C4, :A3, :r, :D4, :C4, :D4, :B3, :r, :E4, :D4, :C4, :B3, :A3, :A4, :G4, :A4, :Fs4, :E4, :D4, :G4, :E4, :Fs4, :G4, :E4, :Fs4, :G4, :Fs4, :r, :D4, :C4, :D4, :E4, :D4, :r, :C4, :B3, :C4, :D4, :C4, :B3, :A3, :B3, :C4, :B3, :C4, :D4, :E4, :D4, :B3, :C4, :D4]
b2b = [2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0, 2.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 6.0]
a3 = [:G1, :r, :r, :E1, :E1, :Fs1, :Fs1, :G1, :A1, :B1, :C2, :D2, :B1, :B1, :A1, :A1, :G1, :r, :r, :D1, :r, :r, :E1, :E1, :Fs1, :Fs1, :G1, :A1, :B1, :C2, :D2, :B1, :B1, :A1, :A1, :G1]
b3 = [150.0, 6.0, 6.0, 4.0, 2.0, 4.0, 2.0, 3.0, 1.0, 1.0, 1.0, 6.0, 4.0, 2.0, 4.0, 2.0, 6.0, 6.0, 6.0, 150.0, 6.0, 6.0, 4.0, 2.0, 4.0, 2.0, 3.0, 1.0, 1.0, 1.0, 6.0, 4.0, 2.0, 4.0, 2.0, 24.0]
with_fx :reverb, room: 0.7, mix: 0.7 do
use_synth :tri
in_thread do
a1.length.times do
play a1.tick, sustain: b1.look * 0.95, release: b1.look * 0.05, pan: -0.5
sleep b1.look
end
end
in_thread do
--this part split into becuase exceeds 250 char buffer limit
in_thread do
-- each half ina separate thread with sleep before 2nd thread starts
a2.length.times do
play a2.tick, sustain: b2.look * 0.95, release: b2.look * 0.05, pan: 0.5
sleep b2.look
end
end
sleep 238
--duration of b2 in beats
in_thread do
a2b.length.times do
play a2b.tick, sustain: b2b.look * 0.95, release: b2b.look * 0.05, pan: 0.5
sleep b2b.look
end
end
end
in_thread do
use_synth :saw
a3.length.times do
play a3.tick, sustain: b3.look * 0.95, release: b3.look * 0.05
sleep b3.look
end
end
end