Przygotowanie krótkiego utworu (~1min) w środowisku Sonic Pi, spełniającego następujące wymagania:
Terry Riley's "In C" - artykuł anglojęzyczny stanowiący dobry wstęp do minimalizmu.
hz_to_midi)(ring :d1, :d2, :a2, :d3, :a3, :d4, :a4, :d5, :a5, :d6, :fs6),
cały czas zwiększając głośność aż do osiągnięcia maksymalnej głośności (pełnej, 1.0)controlFunkcja control pozwala na zmianę stanu syntezatora po jego uruchomieniu.
W Sonic Pi wyrażenie play :c4 tworzy instancję domyślnego syntezatora.
Stworzoną instancję możemy zapisać w zmiennej:
c = play :c4
Po uruchomieniu i zapisaniu syntezatora możemy kontrolować jego parametry przy pomocy control
control c, note: :e4 # zmień odtwarzaną nutę na e4
control c, amp: 0.5 # zmień głośność o połowę
Niektóre parametry syntezatora (patrz wbudowana dokumentacja, stwierdzenie „Has slide options”) możemy zmieniać w sposób płynny (np. liniowo, wykładniczo, krokowo).
Płynne przechodzenie parametru kontrolujemy przez [nazwa parametru]_slide (np. dla amp mamy amp_slide), które konfiguruje czas przechodzenia pomiędzy starą, a nową wartością:
c = play :c4, note_slide: 1, sustain: 2, release: 1 # przejście pomiędzy dźwiękami będzie trwać jedno uderzenie
control c, note: :e4 # od razu po rozpoczęciu przechodzimy z :c4 do :e4
sleep 1 # czekamy aż przejście się skończy
control c, note: :g4 # i przechodzimy do g4 w trakcie jak dźwięk stopniowo zanika
Sonic Pi posiada wbudowany generator liczb pseudolosowych, którego stan początkowy jest taki sam przy każdym uruchomieniu.
rand n - losowa liczba zmiennoprzecinkowa od 0 do nrand_i n - losowa liczba całkowita od 0 do n (bez n)rrand min, max - losowa liczba całkowita od min do maxrrand_i min, max - losowa liczba całkowita od min do max (bez n)use_random_seed seed - ustawienie seed jako wartości od której zacząć generować liczby losoweakord = []
# Akord ma 12 dźwięków
12.times do
# Akord składa się z dźwięków od 60 do 72
akord.push(rrand_i(60, 72))
end
# Odtwarzamy akord
play akord
x = play [:c4, :e4, :g4], duration: 4, note_slide: 1
sleep 1
control x, notes: [:f4, :d4, :a4]
początkowy = rrand_i 40, 72
2.times do
in_thread do
dźwięk = początkowy
loop do
dźwięk += rrand_i -12, 12
play dźwięk
sleep 1
if dźwięk < note(:c2) or dźwięk > note(:c6) then
dźwięk = początkowy
end
end
end
end
akord = []
30.times do
dźwięk = rrand 200, 400
akord.push(hz_to_midi(dźwięk))
end
dron = play akord, sustain: 100000, amp: 0, amp_slide: 24, note_slide: 12
control dron, amp: 1
control dron, notes: (ring :d1, :d2, :a2, :d3, :a3, :d4, :a4, :d5, :a5, :d6, :fs6)
2.times do
in_thread do
rand_i(6).times do
# Pierwszy fragment in C
play :c4
sleep 1
end
rand_i(6).times do
# Drugi fragment in C
play :e4
sleep 1
end
rand_i(6).times do
# Trzeci fragment in C
play :g4
sleep 1
end
# i tak dalej
end
end