Programowanie na usługach muzyki

Wziąłem się ostatnio za nagrywanie muzyki z filmów i seriali ("Pieśń o Małym Rycerzu", muzyka z "Lalki", temat z "Terminatora 2") i ckni mi się do stworzenia nowego gadesowego albumu. Do tego stopnia, że aż w tak zwanym międzyczasie popatruję sobie na kanał ThinkSpace Education - i tutaj prowadzący, Guy Michelmore, podpowiedział ciekawy sposób na walkę z niemocą twórczą. Otóż posługuje się on w takich momentach... kostkami do gry. Rzuca pięcioma lub sześcioma kostkami, a numery, które wypadły, to po prostu kolejne dźwięki przyjętej skali muzycznej. Potem wystarczy spróbować je zagrać i można wpaść na bardzo inspirujące melodie.

Programista

Nie mam, niestety, odpowiedniej liczby kostek do gry pod ręką, ale za to jestem przecież programistą. Postanowiłem napisać sobie "wirtualne kostki" w oparciu o generator liczb pseudolosowych. Sam programik był gotowy bardzo szybko, ale... wiadomo, że nie mogłem poprzestać tylko na tym.

W głowie wykiełkowała mi inna myśl. Jako że mam braki w edukacji muzycznej (bo i do żadnej szkoły muzycznej nie chodziłem), to postanowiłem od razu rozprawić się z takimi problemami, jak skale i akordy. Zwłaszcza to pierwsze sprawiało mi do tej pory sporo trudności, ale i z akordów w miarę sprawnie posługiwałem się tylko zwykłymi durowymi i molowymi, od czasu do czasu używając (głównie intuicyjnie) akordów zawieszonych i septymowych. Uf!

Część pierwsza - skale i progresje

Na początek zatem postanowiłem zbudować algorytm, który w oparciu o zestawy interwałów zbuduje mi skalę dowolnego typu w dowolnej tonacji i poda dodatkowo akordy dla każdego stopnia skali. No, a potem, oczywiście, wygeneruje losową melodię opartą już na dźwiękach wybranej skali.

Pewnym problemem okazało się zdobycie informacji o budowie poszczególnych skal (bo jest ich naprawdę sporo), ale późniejsza praca była już czystą przyjemnością (no, może poza programowaniem interfejsu użytkownika).

W ramach rozwoju dodałem także akordy ułożone względem "podobieństwa" (czyli np. w skali C-Dur dla akordu opartego na trzecim stopniu, czyli e-moll, będą to akordy C-Dur i G-Dur (z pierwszym łączą go dwa dźwięki, "e" i "g", z drugim także dwa: "g" i "h"). W wersji 1.4 Chordera pojawiła się także zakładka z popularnymi progresjami akordów dla danej skali.

Część druga - akordy

Skoro już rozgryzłem budowanie skal i tworzenie akordów na podstawie poszczególnych stopni, postanowiłem "z rozpędu" rozprawić się w ogóle z akordami, ich budową i rozpoznawaniem. Tutaj najwięcej czasu spędziłem znów na gromadzeniu wiedzy, jak są zbudowane poszczególne typy akordów (z jakich interwałów się składają) oraz na... testowaniu. Przydatne okazały się tu wszelkiego typu strony z teorią muzyczną, choćby Muzyczne Laboratorium.

Ta część działa na dwa sposoby. Pierwszy umożliwia poznanie dźwięków tworzących wybrany akord (np. C9 albo d-moll) i polega na wybraniu dźwięku podstawowego oraz typu akordu. Drugi sposób działa odwrotnie: wskazujemy na "klawiaturce" dźwięki, a program rozpoznaje na tej podstawie akord (np. dźwięki C-E-G-ais dadzą nam akord C7).

Część trzecia - koło kwintowe

W temacie skal i akordów przydatne okazałoby się też koło kwintowe, na którym wyraźnie widać, które akordy "pasują" do których (generalnie te położone najbliżej siebie brzmią "spójnie").

Koło wyszło trochę mało koliście, ale nie chciałem wklejać ładnego obrazka, bo zależało mi na tym, by móc po najechaniu myszką na konkretny akord zobaczyć informacje o nim. Wygląda to więc nieco "biednie", ale za to działa, a na tym najbardziej mi zależało.

Matematyczna muzyka

Przy okazji tworzenia tego prostego programu po raz kolejny przekonałem się, że muzyka to czysta matematyka. Tu nie ma przypadków, wszystko jest jasne i proste, i wynika z matematycznych zależności (mam na myśli tylko sprawy "techniczne", jak tworzenie akordów, a nie dobór harmonii, budowanie napięcia czy rozwiązywanie melodii).

I choć nie są to zagadnienia skomplikowane, to jednak potrzebowałem "ubrać" je w algorytmy i zrozumieć to od podszewki, żeby już się więcej nie zastanawiać, w jaki sposób wygląda akord Gmaj7 albo co oznacza Dm6 lub Bsus4. Czy to z kolei pomoże mi w nagrywaniu muzyki? Przekonamy się.

Chętni mogą pobrać program stąd, jest to archiwum jar, do uruchomienia którego potrzeba Javy w wersji przynajmniej 8 (1.8).

Komentarze