Języki

You are here

Generator muzyki w javie

Oto program musicgen w javie (jako applet osadzony na stronie). Prawdopodobnie Twoja przeglądarka go nie uruchamia (powinieneś widzieć przycisk poniżej). Jeśli chcesz, możesz mimo wszystko ten program uruchomić, chociaż jest to nieco skomplikowane:

  • musisz mieć zainstalowaną na swoim komputerze javę
  • ściągnij musicgen na swój dysk
  • stwórz prosty plik html (powiedzmy music.html) w tym samym katalogu, do którego ściągnąłeś plik jar, z następującą zawartością: <html> <applet code="JavaSoundApplet.class" archive="MusicGen.jar" width="760" height="480"> </applet> </html>
  • użyj "appletviewer" (program z dystrybucji javy) aby uruchomić plik html: w systemowym okienku konsoli, napisz: appletviewer music.html

Nowsza wersja działająca bez problemów w przeglądarce jest tutaj.

Opis korzystania z programu

Instrukcja obsługi

Menu

Ewolucja
  • Nowa – powoduje restart procesu ewolucji. Uwaga Wszystkie dane z poprzedniego procesu ewolucji są w tym przypadku tracone.
  • Dodaj nową frazę – umożliwia dodanie frazy zapisanej w formacie programu MusicGen.
  • Zapisz frazę – umożliwia zapis frazy w formacie programu MusicGen.
  • Zapisz frazę jako midi – umożliwia zapis frazy w formacie midi.
Opcje
  • Ustawienia procesu ewolucji – wywołuje okno Parametry procesu ewolucji.
  • Applet Info – pokazuje jakie ustawienia w pliku .java.policy są wymagane aby korzystać ze wszystkich możliwości programu.

Obiekty w głównym oknie

  • Pole liczba pokoleń i przycisk start – naciśnięcie przycisku powoduje uruchomienie procesu ewolucji przeprowadzanego przez liczbę pokoleń odpowiadającą zawartości pola.
  • Lista fraz – wszystkie opisane niżej przyciski z tego okna operują na frazie wybranej z listy.

Opis frazy na liście osobników:
[Ranking] w:Wiek M=_evalMelo->evalMelo V=_evalVelo->evalVelo I=_evalInter->evalInter R=_evalRthm->evalRthm [l_Nut:l_Taktów*Metrum@Tempo] Komentarz

  • Przyciski Zagraj i Stop – umożliwiają rozpoczęcie i zatrzymanie odtwarzania wybranej frazy.
  • Pole i przycisk Ustaw czas ochronny (liczbę pokoleń) na – umożliwia ustawienie okresu w czasie którego fraza bez względu na jej jakość nie będzie usuwana z populacji.
  • Przyciski Ustaw ocenę, Ustaw ocenę zgodną z rankingiem i suwak Ocena – Suwak Ocena pokazuje aktualną ocenę wybranej frazy. Ocenę tą użytkownik może zmienić zgodnie z własnymi odczuciami, poprzez zmianę pozycji suwaka i naciśnięcie przycisku Ustaw ocenę. Możliwy jest także powrót do oceny wyznaczonej przez program poprzez naciśnięcie przycisku Ustaw ocenę zgodną z rankingiem.

Obiekty w oknie Parametry ewolucji

W celu dokładnego zrozumienia wpływu ustawień, jakie udostępnia to okno, na proces ewolucji fraz muzycznych konieczne jest przeczytanie części dotyczącej ewolucji fraz muzycznych.

  • Pole Prawdopodobieństwo mutacji – ustawia prawdopodobieństwo mutacji każdego z genów populacji.
  • Pole Prawdopodobieństwo krzyżowania – ustawia prawdopodobieństwo krzyżowania fraz muzycznych.
  • Pole Wielkość populacji – ustawia wielkość populacji fraz muzycznych.
  • Pole Maksymalna liczba nut we frazie – ustawia liczbę nut frazy – nie powinna być ona duża (większa niż 30).
  • Przyciski krzyżowanie muzyczne, krzyżowanie zwykłe – ustawiają sposób krzyżowania fraz muzycznych.

Ewolucja

Poniżej opisano zasady ewolucji fraz muzycznych jaka ma miejsce w programie MusicGen. Autorzy zakładają, że czytelnik posiada podstawowe wiadomości z dziedziny Algorytmy ewolucyjne. W przeciwnym przypadku odsyłamy do książek:

  • Zbigniew Michalewicz "Algorytmy genetyczne + struktury danych = programy ewolucyjne WNT, Warszawa, 1996"
  • D. E. Goldberg "Algorytmy genetyczne i ich zastosowania", WNT, Warszawa, 1995

Dużo informacji związanych z tematem znajduje się również w sieci, polecamy stronę odnośników jako początek poszukiwań.

Zasady ewolucji i selekcji

Proces ewolucyji w programie MusicGen skład się z następujących faz:
  • Usunięcie fraz zaznaczonych przez użytkownika jako do usunięcia ;
  • Ocena fraz ;
  • Selekcja fraz do krzyżowania – Selekcja jest dokonywana na podstawie rankingu pareto, na podstawie którego tworzona jest ruletka. Losowane są następnie dwa osobniki które z prawdopodobieństwem określonym przez parametry procesu ewolucji będą poddane procesowi krzyżowania tworząc nową frazę muzyczną.
  • Krzyżowanie ;
  • Usuwanie nadmiarowych osobników – usuwane są zawsze osobniki najgorsze względem utworzonego w poprzedniej fazie rankingu pareto.;
  • Mutacja – mutacji mogą podlegać wszystkie geny każdego z osobników populacji. Prawdopodobieństwo mutacji każdego z genów jest parametrem procesu ewolucji. Niektóre z genów mają jednak zmniejszone prawdopodobieństwo mutacji. Są to geny wprowadzające duże zmiany do genotypu (np. metrum).

Zastosowany model ewolucji zakłada stałą wielkość populacji w trakcie procesu ewolucji. Odstępstwo od tej zasady jest dopuszczalne w następującym przypadku- jeżeli użytkownik usunie z populacji frazy. Nowe frazy wstawiane na miejsce usuniętych zostaną dodane jedynie jako powstałe na drodze krzyżowania. Ze wzgędu na niedeterminizm tej fazy procesu ewolucji populacja może się zmniejszyć.

Generowanie rozwiązań początkowych

Rozwiązania początkowe, występujące w procesie ewolucji, dzielimy na dwa typy:

  • Rozwiązania początkowe losowe – geny takiego rozwiązania mają charakter losowy. Zastosowano jednak do takiego rozwiązania pewne ograniczenia mające na celu stworzenie frazy akceptowalnej (zgodnie z ogólnymi zasadami estetyki muzycznej). Nie są to silne ograniczenia – np. generacja rozwiązania jest przeprowadzana w taki sposób aby odległości pomiędzy dźwiękami w frazie nie były zbyt duże.
  • Rozwiązania początkowe wczytywane z pliku – Istnieje możliwość dodawania pewnych np. ulubionych lub o porządanych cechach fraz muzycznych i w ten sposób sterowania procesem ewolucji fraz. W szczególnym przypadku również mogea być to rozwiązania losowe.

Genotyp

Genotyp osobnika (fraza muzyczna) składa się z genów opisujących następujące własności:

  • Skala - jest indeksem do tablicy skal z których korzysta program MusicGen (predefiniowanych skal jest około 50, dla uproszczenia przyjęto, że dźwiękiem podstawowym jest zawsze środkowe C);
  • Metrum - metrum frazy muzycznej (dla uproszczenia przyjęto, że jest stałe w całej frazie i zawsze jest wielokrotnością 1/4);
  • Tempo - liczba ćwierćnut na minutę;
  • Liczba taktów melodii
  • Nuty – każda z nut ma takie własności jak: wysokość, położenie, długość i siła artykulacji;

Operatory

Krzyżowanie

  • Krzyżowanie zwykłe – Nowy osobnik tworzony jest na podstawie dwóch "rodziców", przez losowe kopiowanie genów z jednego i drugiego osobnika ze zwiększonym prawdopodobieństwem kopiowania genu z rodzica od którego gen był kopiowany ostatnio. Geny kodujące nuty frazy muzycznej mogą być kopiowane "od początku" lub "od końca", zdecydowanie większe jest prawdopodobieństwo kopiowania "od początku". Warto zwrócić uwagę na to, że taki sposób krzyżowania zaburza w dużym stopniu brzmienie nowo powstałej frazy w stosunku do brzmienia rodziców. Przy kopiowaniu genów nie jest brane pod uwagę położenie czasowe kopiowanych nut, kolejna nuta jest dokładana zawsze za ostatnią w tworzonej frazie.
  • Krzyżowanie muzyczne – W dużym stopniu jest podobne do poprzedniego. Zmiany dotyczą jednak sposobu tworzenia genów nowego osobnika odpowiedzialnych za kodowanie nut frazy muzycznej. Podczas kopiowania tych genów brane jest pod uwagę ich położenie w sensie czasowym w rodzicach, jak również wysokość kolejnych nut w obu rodzicach. Dokładniej wygląda to w następujący sposób: zawsze jest kopiowana ta z kolejnych nut w rodzicach która występuje wcześniej, a do jej wysokości sumowana jest losowa wartość (zgodnie z rozkładem normalnym) związana z wysokością drugiej nuty z pary.

Mutacja

  • Mutacja prosta - Każdy z genów ma szansę mutować. Geny odpowiadające wysokości dźwięku, jego położeniu w frazie, długości i sile akcentu z jakim dźwięk jest artykułowany mają jednakowe prawdopodobieństwo mutacji. Metrum frazy muzycznej ma zmniejszone prawdopodobieństwo mutacji, jest to spowodowane faktem, że zmiana tego pojedynczego genu ma wpływ na postać całej frazy- w odróżnieniu od pozostałych. Podobnie rozwiązywana jest mutacja indeksu skali (w programie MusicGen rozpatrywana jest jedynie zamiana skali w obrębie skal pamiętanych przez program). Charakterystyki czasowe w obrębie frazy są zmieniane w sposób losowy zgodnie z rozkładem normalnym.

Nowe Krzyżowanie

W ogólności, omawiane krzyżowanie pomyślane zostało tak, by do uzyskanego wyniku przenieść jak najwięcej cech wspólnych osobników wejściowych, o ile takie cechy udało się znaleźć.

Nowy osobnik tworzony jest na podstawie dwóch "rodziców" w 2 etapach:

  1. ustalanie „kompromisowych” wartości cech (kolejno: skali, długości, metrum i tempa) i transformowanie obu rodziców. Należy zaznaczyć (co jest być może pewna słabością procesu krzyżowania), ze melodie poddawane są „uzgadnianiu” i transformacji ze względu na kolejne cechy, tj. podczas wyboru nowej cechy i transformacji do niej nie bierze się pod uwagę, jak podjęte w tym etapie decyzje wpłyną na następne etapy; co więcej, podczas ustalania wspólnej wartości genu nie bierze się pod uwagę „łatwości”, z jaka można by dane frazy transformować do odpowiedniej wartości (przykład: dane są frazy 12-taktowa, w której „widać” powtórzenia 2-taktowych fragmentów i 19-taktowa, z której można „wygodnie” usunąć 5-taktowy odcinek; mimo, ze faktycznie najkorzystniejsze jest sprowadzenie obu osobników do 14 taktów, podczas losowania faworyzowane będą 15 i 16)
  2. utworzenie nowej melodii na podstawie 2 osobników w jednakowej skali, metrum, tempie i o jednakowej liczbie taktów, lecz o innej liczbie nut (i – oczywiście – różnej wysokości dźwięków)

Miary odległości – wybór wartości wspólnej

Funkcje miary odległości używane są do ustalenia wspólnej wartości danego genu, gdy dwie różniące się melodie należy przetransformować do możliwie najbardziej podobnych reprezentacji oraz podczas mutacji, tak by prawdopodobieństwo przyjęcia pewnej nowej wartości było tym większe, im jest ona bliższa wartości oryginalnej.

W ogólności, prawdopodobieństwo wylosowania danej aleli jest proporcjonalne do kwadratu odległości do odpowiedniej wartości oryginalnej frazy w przypadku mutacji, a do sumy kwadratów tych odległości – w przypadku krzyżowania.

Długość melodii (w sensie liczby taktów), metrum i tempo pozwalają na bezpośrednie wzięcie ich wartości jako miary; w przypadku skali konieczne było stworzenie specjalnej funkcji odległości.

Odległość skal

Odległość od skali A do B jest zależna od 4 składników:

  • różnicy w liczbie stopni (liczonej względem liczby stopni w skali A),
  • liczbie wspólnych stopni, czyli interwałów od dźwięku podstawowego (względem liczniejszej skali),
  • zgodności interwałów miedzy kolejnymi stopniami (np. wszystkie skale diatoniczne są pod tym względem zgodne, gdyż występują w nich jedynie sekundy małe i wielkie, w odróżnieniu od kilku skal, których pojawiają się sekundy zwiększone lub skali całotonowej, w której występują tylko sekundy wielkie) oraz
  • zgodności interwałów pomiędzy wszystkimi stopniami skali (najczęściej wewnątrz skali można uzyskać wszystkie interwały, zdarzają się jednak wyjątki – w przypadku skali całotonowej można wykonać skok jedynie o wielokrotność całego tonu).

Transformacje

Zmiana skali

Podczas transformacji skali frazy do z góry zadanej innej skali, tworzony jest wektor par .... Należy dodać, że wspomniany "wektor mapowania" tworzony jest wyłącznie na podstawie tonów zawarytch w rozpatrywanych skalach, nie uwzględnia się więc faktycznej zawartości frazy.

Wektor budowany jest z pomocą algorytmu porównywania łańcuchów tekstowych (kolejne znaki "stringów" odpowiadają tonom tworzącym kolejne stopnie skali) tak, by możliwie jak najwięcej ich wspólnych fragmentów było mapowanych 1:1.

Zmiana długości melodii

Zmianę długości frazy można uzyskać w ogólności na 2 sposoby: usunięcia lub powtórzenia fragmentu melodii oraz rozciągnięcia lub ściśnięcia kilku taktów. Jeżeli melodia ma zostać skrócona lub wydłużona co najmniej dwukrotnie, stosuje się rozciągniecie lub ściśniecie całej melodii, równocześnie kompensując te modyfikacje zmiana tempa, tak by melodia brzmiała tak samo (przykład: dana jest fraza składająca się z 4 taktów, która trzeba przetransformować do 10 – w pierwszej kolejności dzieli się ją na 8 taktów, podwajając tempo i zachowując metrum, a dopiero po tej operacji wykonywane jest wydłużenie o 2 takty podstawową techniką).

Usuwanie i powielanie fragmentu frazy

Wewnątrz melodii szuka się przedziałów o długości całkowitej liczby taktów, takich, ze:

  1. zarówno początek jak i koniec przedziału znajdują się „wewnątrz” odgrywanych dźwięków, wtedy wymaga się dodatkowo, by były to dźwięki tej samej wysokości

lub

  1. początek i koniec przedziału znajdują się „wewnątrz” pauz.

Rozpatrywane są także przedziały o długości różniącej się od pożądanej, w szczególności bierze się pod uwagę nie usuwanie żadnego fragmentu z melodii (co jest szczególnie istotne, gdy nie znaleziono przedziałów spełniających warunek (a) lub (b)). Prawdopodobieństwo wylosowania każdego z przedziałów zależne jest od zgodności sąsiedztwa: „melodycznej” - tj. bliskości (w sensie interwału muzycznego) dźwięków bezpośrednio poprzedzających i następujących po granicach przedziału oraz „czasowej” – odległość od najbliższych zdarzeń początku/końca nuty następujących po obu granicach przedziału powinny być zbliżone (podobnie zdarzenia występujące bezpośrednio przed granicami). „Zwycięzca” losowania jest usuwany z melodii (jeśli transformacja polega na skróceniu melodii) lub podwajany (w p.p.).

Jeśli wylosowany fragment miał inna długość niż różnica miedzy zadana a oryginalną długością melodii, przeprowadza się ściśnięcie lub rozciągnięcie (w obu przypadkach dwukrotne) odpowiedniej liczby sąsiednich taktów.

Zmiana metrum

Zmiana metrum odbywa sie w dwóch etapach: ustalenie nowego metrum na podtawie metrum dwóch fraz (w tym wypadku metrum fraz będących rodzicami tworzonego w procesie krzyżowania osobnika), właściwa zmiana metrum (powstającego w wyniku procesu krzyżowania osobnika).

Ustalanie nowego metrum
Nowe metrum jest losowane z przedziału < metrum_pierwszego_rodzica, metrum_drugiego_rodzica >. Przy założeniu, że metrum_pierwszego_rodzica < metrum_drugiego_rodzica i 2*metrum_pierwszego_rodzica > metrum_drugiego_rodzica. Gdy drugi z warunków nie jest spełniony metrum_pierwszego_rodzica jest zwiększane dwukrotnie (przy jednoczesnym zmniejszaniu tempa – tak by zachować charakter melodii), aż do spełnienia tego warunku. Przy losowaniu faworyzowane są wartości metrum leżące w środku wspomnianego powyżej przedziału.
Zmiana metrum
Zmiana metrum na nowe powoduje, że każdy z dzwięków melodii musi zostać przemapowany tak aby mieścił się w nowej długości taktu. Takie podejście do problemu sprawia, że dostosowywanie frazy do nowego metrum będziemy rozpatrywać dzieląc melodię na takty. W każdym takcie każda nuta zostanie przeskalowana w następujący sposób:
  • Wybór punktów charakterystycznych – na płaszczyźnie X, Y gdzie X odpowiada liczba osemek (metrum) w takcie pierwszej frazy Y'owi liczba osemek w takcie drugiej frazy. Szukamy krzywej odcinkami liniowej któa będzie podstawą transformacji każdego taktu frazy do nowego metrum. Krzywa ta jest wybierana w sposób losowy.
  • Transformacja wszystkich nut frazy na podstawie otrzymanej w pierwszym etapie krzywej.

Faktyczne krzyżowanie: tworzenie nowej melodii

W drugim etapie krzyżowania tworzony jest potomek 2 osobników o jednakowej skali, metrum, tempie oraz jednakowej liczbie taktów; inna może być jednak liczba nut i wysokości dźwięków.

Początki i długości nut

Przy ustalaniu miejsc zdarzeń początku i końca nut kierowano się następującymi zasadami:

  1. w wynikowej frazie nuty mogą „brzmieć” tylko w tych miejscach, w których trwają jakieś dźwięki w przynajmniej jednym z osobników wejściowych (to samo dotyczy pauz);
  2. liczby nut zaczynających się między dowolnymi dwoma punktami w melodiach potomków (które po transformacjach mają tę samą długość i metrum) tworzą przedział dopuszczalnej liczby nut pomiędzy tymi samymi punktami w tworzonej frazie.

Dodatkowo przyjęliśmy, że w nowej melodii dźwięki zaczynać będą się jedynie w tych punktach, w których zaczyna się przynajmniej jedna nuta z fraz wejściowych (założenie to ma zapobiec „rozdrobnieniu” rytmu). Długości nut losowane były na podstawie długości pauz (w osobnikach rodziców) poprzedzających miejsce, w którym w tworzonym osobniku miała początek następna nuta (przy zachowaniu założenia (a)).

Wysokości dźwięków

Podobnie jak w przypadku generowania rozwiązań początkowych, wysokość dźwięków ustalana jest „od końca” frazy (ostatni dźwięk ma zawsze wysokość podstawowego tonu wybranej skali). W przedziałach, które w osobnikach wejściowych odpowiadają czasowo rozpatrywanej nucie, odczytywane występujące tam nuty. Wysokość i czas trwania tych dźwięku wpływa na losowany ton wg zasady odwrotności ważonej (wg czasu trwania w ramach rozpatrywanego przedziału) sumy kwadratów odległości (tu: różnicy wysokości między tonem, którego prawdopodobieństwo wylosowania jest ustalane, a wszystkimi występującymi w rodzicach nutami). Dodatkowo obliczana jest najbardziej centralna wysokość z dopuszczalnego przedziału tonów. Różnica między tą „wartością oczekiwaną” a wybraną uwzględniana jest przy kolejnych losowaniach.

Według bardzo podobnej zasady ustalana jest siła ataku (Velocity) każdej nuty.

Ocena fraz

W projekcie podjęto próbę skonstruowania funkcji automatycznej oceny fraz muzycznych. Ocena walorów estetycznych za pomocą ściśle matematycznych wzorów nie wydaje się rzeczą łatwą (o ile jest w ogóle możliwa), dlatego nie powinno dziwić, że efekty tego eksperymentu nie są zadowalające. Z tych samych powodów, tj. faktycznego niezdefiniowania funkcji celu, czuliśmy się upoważnieni do stosowania rozwiązań (w kilku przypadkach wręcz "trickowych"), których zasadność trudno dowieść, a które – być może - prowadziły do uzyskania pewnego przybliżonego sposobu oceny frazy pod kątem wyszczególnionych cech.

Zastosowano 4 funkcje oceny cech melodii:

  • Melo – zadaniem funkcji jest ocena zmienności wysokości dźwięku w całej frazie z użyciem transformaty Fouriera (DFT),
  • Velo – funkcja ocenia zmienność głośności dźwięku ('ataku') w całej frazie z użyciem DFT,
  • Inter - to – w uproszczeniu – średnia wielkość interwałów pomiędzy kolejnymi dźwiękami,
  • Rthm - zadaniem funkcji jest ocena "bogactwa" rytmu w kolejnych taktach.

Ostatnim etapem jest obliczenie wartości funkcji preferencji "użytkownika" (eval) na podstawie oceny danej cechy (eval_index).

Funkcje oceny cech frazy

"Bogactwo" melodii (Melo)

Funkcja dokonuje dyskretnej transformacji Fouriera (DFT); zestawem próbek wejściowych jest wektor wysokości nut, przetworzony tak, by ciąg kolejnych identycznych wartości był proporcjonalny do czasu trwania nuty, której ten ciąg odpowiada. Dodatkowym etapem przetwarzania jest "zalepienie" pauz sąsiednimi wartościami. Wartość eval_index_Melo jest w przybliżeniu sumą amplitud kolejnych dodatnich składowych DFT podzielonych przez numer składowej. Dodatkowo, funkcja Melo jest jedyną funkcją oceny biorącą pod uwagę tempo melodii.

Funkcja ta – w założeniu – miała zwiększać swą wartość wraz z pojawianiem się w melodii większych interwałów i/lub szybszych fragmentów melodii.

Zróżnicowanie dynamiki (Velo)

Funkcja dokonuje dyskretnej transformacji Fouriera (DFT), a zestawem próbek wejściowych jest wektor wartości głośności nut "przygotowany" wg identycznej zasady, jak w poprzednim punkcie.

eval_index_Velo = (Sk = (1, fmax) (|F|k / k) + 0.25 * maxk = (1, fmax)|F|k ) / fmax, gdzie
|F|k jest amplitudą k-tej składowej DFT.

Średni interwał (Inter)

eval_index_Inter = sumeval / sumdiv

sumeval = Sk intereval (nk-nk+1) * divk,k+1
sumdiv = Sk divk,k+1
divk,k+1 = min {(dk + dk+1) / (dk + dk+1 + pk,k+1), (dk + pk,k+1) / (dk+1 + pk,k+1)}
, gdzie

nk - oznacza wysokość k-tej nuty (odległość w półtonach od "środkowego" C),
dk – długość k-tej nuty,
pk,k+1 – pauzę pomiędzy k-tą nutą, a następną.

Wprowadzenie wagi divk,k+1 uzasadnione jest tym, że duży interwał pomiędzy kolejnymi nutami jest mniej "odczuwalny", jeśli dźwięki te oddziela duża pauza lub pierwszy z nich jest krótką "przednutką" (ozdobnikiem) drugiego.

intereval (k) = 0.8 * log (|k| + 3)
+ 1.0 * log (8 – ||k| mod 12 – 6|)
+ 1.0 * tabeval |k| mod 12
+ 1.0 * [(|k| - 1) / 12]

Wartość powyższej funkcji jest sumą 4 składowych. Dwie z nich zależą od wartości logarytmu z wielkość interwału i odległości interwału od wielkości 6 półtonów (kwinta zmniejszona). Wektor tabeval zawiera (dobrane "arbitralnie") wartości zależne w przybliżeniu od tego, w jakim stopniu dysonansowy jest dany interwał. Ostatni składnik przyjmuje niezerowe wartości tylko, gdy interwał jest większy od oktawy.

"Bogactwo" rytmu (Rthm)

Funkcja dokonuje (osobno dla każdego taktu) dyskretnej transformacji kosinusowej (DCT); zestawem próbek wejściowych jest wektor wartości rosnących o 1 z każdą nutą.

eval_index_Rthm = Sk = (1, fmax) (avgk + std_devk) / fmax, gdzie
avgk jest średnią wartością |Fk, j| obliczoną po j (taktach),
std_devk jest ochyleniem standardowym wśród wartości Fk, j obliczonym po j (taktach),
Fk, j jest wartością k-tej składowej kosinusowej obliczonej dla j-tego taktu.

Zarówno zastąpienie transformaty Fouriera transformatą kosinusową, jak i jej obliczanie osobno dla każdego taktu (wraz z późniejszym uwzględnianiem różnorodności tych wartości) uzasadnione jest chęcią wychwycenia nie tylko bogactwa podziału rytmicznego na przestrzeni całej melodii, ale także różnic podziału "lokalnego".

Ocena fraz na podstawie oceny cech

Dla każdej z badanych cech wartość funkcji preferencji wynosi:

eval = min {a/b, b/a}, gdzie

a = eval_index + add,
b = best + add.

Jest to, jak widać, ilorazowe skalowanie do przedziału [0,1]. Zastosowanie stałej add (oprócz skalowania ilorazu)zapobiega błędnym operacjom arytmetycznym, gdyby best lubeval_index było równe 0. Wartości stałych best i add ustalono arbitralnie.

Wnioski

  • Udało się stworzyć działające czysto matematycznie, tj.niewykorzystujące zaawansowanej wiedzy muzycznej, funkcje krzyżowania, które – mimo, że są bardzo niedeterministyczne – zapewniają odpowiednią zbieżność procesu ewolucji.
  • Całkowite (lecz zgodne z oczekiwaniami) niepowodzenie przy konstrukcji funkcji oceny walorów estetycznych.
  • Testy wykazaly zbieżność procesu ewolucji przy rozsądnie ustawionych współczynnikach krzyżowania i mutacji.
  • Proces ewolucji fraz muzycznych powinien byc nadzorowany przez uzytkownika (ostatecznie to użytkownik powinien decydować o tym które frazy podobaja mu sie, a tym samym powinny przetrwać i mieć wpływ na postać całej populacji).
  • Ciekawym eksperymentem jest dodawanie do populacji melodii do której chcielibysmy aby ewolucj dażyła lub której fragmenty byly by pożądane w frazach.
  • Ważnym miejscem dla dalszych ulepszeń systemu MusicGen jest generacja fraz początkowych (w obecnej postaci jest ona zbyt uproszczona).
  • Dużą pomocą w badaniu przebiegu procesu ewolucji fraz jest generowany przez system MusicGen log w postaci pliku XML.
Program i tekst: Jerzy Błaszczyński, Marcin Szymański
Prowadzący: Maciej Komosiński