Muzyka algorytmiczna

Zajęcia 11 (2024-12-11)

Cel zajęć

  1. Zaprezentowanie przykładów kompozycji zaliczeniowych
  2. Przedstawienie dodatkowych inspiracji algorytmicznych

Zadanie

Na kolejne zajęcia (2024-12-18)

Przygotowanie koncepcji utworu zaliczeniowego (np. fragment planowanego utworu, ogólny pomysł w liście kroków, pomysł). Zaprezentowana koncepcja nie jest zobowiązaniem - można ją zmienić.

Na kolejnych zajęciah (2024-12-18) będzie można zaprezentować koncepcję (dowolnie skomplikowaną) oraz wykorzystać wiedzę muzyczno-programistyczną osób prowadzących do ewaluacji pomysłu, porad, szukania rozwiązań itp.

Koncert zaliczeniowy

Prawdopodobny termin: 2025-01-31 (do potwierdzenia).

Wymagania kompozycji zaliczeniowej:

Utwór można:

Wejście MIDI Sonic Pi

Podobny mechanizm do OSC, można odebrać komunikaty typu note_on, note_off, control_change, ...

Specyfikacja: /midi:nazwa_portu:nr_kanału/typ_komunikatu

live_loop :receive_midi do
  use_real_time
  note, velocity = sync "/midi:*:*/note_on"
  synth :blade, note: note, amp: velocity / 127.0
end

Przykłady muzyki algorytmicznej

Akordeon Laptopowy. W opisie link do artykułu wprowadzającego urządzenie, polecam przeczytać!

Dźwięki sortowania

Przykład w którym wykorzystywany jest Sonic Pi do realizacji argumentów sortujących, w celu prezentacji algorytmu w formie muzycznej. W celu wizualizacji graficznej wykorzystuje dodatkowy program stworzony w języku Python. Inspirowane „The Sound of Sorting - "Audibilization" and Visualization of Sorting Algorithms”, zapraszam do zapoznania się z artykułem jak i kodem programu, który jest dostępny do pobrania.

Uruchomienie

Wymagania wstępne: interpreter języka Python 3, pip

  1. Pobranie kodu źródłowego programu wizualizacyjnego: osc.py
  2. Instalacja zależności: pip3 install pygame python-osc
  3. Uruchomienie programu wizualizującego: python3 osc.py
  4. Załadowanie implementacji algorytmów sortujących w Sonic Pi: sound.rb
  5. Uruchomienie jednego z sortowań dla przykładowych danych:
    use_bpm 520
    use_synth :tri
    
    sort_array("Bitonic Sort",
               method(:bitonic_sort),
               (1..128).ring.reverse.to_a)

Prezentacja wszystkich zaimplementowanych sortowań:

use_bpm 520
use_synth :tri

sort_array("Insertion Sort (linear lookup)",
           method(:insertion_sort_linear),
           (1..100).ring.reverse.to_a)

sleep 1


sort_array("Radix Sort (Least Significant Digit)",
           method(:radix_sort_lsd),
           (1..256).ring.shuffle.to_a)

sleep 1

sort_array("Bitonic Sort",
           method(:bitonic_sort),
           (1..128).ring.shuffle.to_a)

sleep 1

sort_array("Coctail Shaker Sort",
           method(:coctail_shaker_sort),
           (1..64).ring.shuffle.to_a)

sleep 1

sort_array("Selection Sort",
           method(:selection_sort),
           (1..64).ring.shuffle.to_a)

sleep 1

with_fx :lpf, cutoff: :c8 do
  sort_array("Bubble Sort",
             method(:bubble_sort),
             (1..64).ring.shuffle.to_a)
end