Przygotowanie krótkiego utworu (~1min) w środowisku Sonic Pi, spełniającego następujące wymagania:
Przydatne informacje: mikrotony, generowanie skal równomiernie temperowanych.
Przygotowanie programu w Sonic Pi, który:
/next
od dowolnego nadawcy/next
Przyklady przekształceń: zmiana o oktawę, dodanie losowego przesunięcia, reinterpretacja w innej skali, zmiana kolejności dźwięków. Zachęcam do kreatywności!
Akordy można tworzyć poprzez funkcję chord
, przyjmującą bazowy dźwięk oraz rodzaj akordu.
# To:
play :c4
play :g4
play :e4
sleep 1
# Jest równoważne temu:
play [:c4, :g4, :e4], amp: 3
sleep 1
# i temu:
play chord(:c4, :maj), amp: 3
sleep 1
# A to:
play [:c4, :g4, :e4]
sleep 1
# Temu:
play :c4, amp: 1/3r
play :g4, amp: 1/3r
play :e4, amp: 1/3r
sleep 1
# I temu:
play chord(:c4, :maj)
W trakcie zajęć 2024-10-30 znaleziono kilka problematycznych zachowań Sonic Pi w ramach komunikacji OSC. Komunikaty nie były zawsze przesyłane pomiędzy komputerami, na niektórych udawało się wyłącznie nadawać, na innych wyłącznie odbierać. Wykorzystywanie OSC uznawane jest przez to jako eksperymentalne.
Komunikaty OSC odbierane są poprzez funkcję sync
; wysyłane poprzez funkcje osc
, osc_send
.
/path
: osc_send "150.254.65.170", 4560, "/path"
/path
: sync "/osc*/path"
sync "/osc:150.254.65.170:*/path"
sync "/osc:150.254.65.170:8888/path"
osc_send "150.254.65.170", 4560, "/path", :c4
live_loop :consumer do
a, b = sync "/osc:127.0.0.1:*/go"
play a
sleep 1
play b
end
live_loop :producer do
osc_send "127.0.0.1", 4560, "/go", :e4, :f4
sleep 2
end
Z użyciem pierścieni:
live_loop :transform do
sounds = (sync "/osc*/next").ring
play_pattern_timed sounds, 1
osc_send "adres IP kolejnej osoby", 4560, "/next", *sounds.reverse
end
Manualnie:
live_loop :transform do
a, b, c, d = sync "/osc*/next"
play_pattern_timed ring(a, b, c, d), 1
osc_send "adres IP kolejnej osoby", 4560, "/next", d, c, b, a
end
Mikrotony - interwały mniejsze od półtonu. W Sonic Pi półton to wartość 1, więc mikrotony to wartości ułamkowe jak 0.5. Poniższe przykłady odtwarzają te same dźwięki, zapisane w różnych formatach:
# stosując zapis z przecinkiem
play 60
sleep 1
play 60.25 # przesunięcie o 0.25 półtonu (= 25 centów)
sleep 1
play 60.5 # przesunięcie o 0.5 półtonu (= 50 centów)
sleep 1
# stosując zapis ułamkowy
play 60
sleep 1
play 60 + 1/4r
sleep 1
play 60 + 1/2r
sleep 1
# zapisując w centach
play 60
sleep 1
play 60 + 25/100r
sleep 1
play 60 + 50/100r
sleep 1
# zapisując w Hz
play hz_to_midi(261.6255653005986)
sleep 1
play hz_to_midi(265.4309967761148)
sleep 1
play hz_to_midi(269.2917795270241)
sleep 1