• Nie Znaleziono Wyników

Automatyczne tworzenie linii melodycznej

N/A
N/A
Protected

Academic year: 2021

Share "Automatyczne tworzenie linii melodycznej"

Copied!
8
0
0

Pełen tekst

(1)

LABORATORIUM AKUSTYKI MUZYCZNEJ

Ćw. 6

Algorytmy automatycznego generowania linii melodycznej

Wykonujący: Ocena:

Specjalność: IDiO, sem. III Data wykonania ćwiczenia:

opracowanie: mgr inż. Adam Kurowski, wersja instrukcji z dnia: 6. maja 2019 roku

1. PODSTAWY TEORETYCZNE

Próby formalizowania zapisu muzycznego oraz podejścia do kompozycji są tak stare jak sama muzyka. Przykładem takiej próby sformalizowania zasad tworzenia muzyki jest Pitagorejska klasyfikacja interwałów oraz strój naturalny wywodzący się z wprowadzonych przez niego zasad. Przejawem formalizacji muzyki jest także zbiór zasad kompozycji muzyki. Potrafi się on różnić w zależności od gatunku muzycznego, epoki, z której dane utwory pochodzą, czy wręcz może być on inny dla każdego kompozytora. Podejmowane są próby, aby tego typu formalizacja mogła być dokonywana nie tylko przez kompozytora spisującego na papierze reguły dotyczące współbrzmień (np. harmonia tonalna), czy też współistnienia i równoległego prowadzenia wielu głosów melodycznych (tzw. kontrapunkt). Pewną inspiracją dla kompozytora mogą być sygnały o losowym charakterze, którego własności statystyczne są zbliżone do analogicznych właściwości przejawianych przez ciągi melodyczne. Pierwsza kompozycją uznaną za wynik kompozycji dokonanej przez komputer jest Illiac Suite for String Quartet. Algorytm kompozycji bazował zarówno na klasycznych regułach harmonii tonalnej oraz kontrapunktu, jak i na regułach tonalności rozluźnionej i dodekafonii. Dodatkowo wykorzystano także moduły oprogramowania bazujące na wykorzystaniu łańcuchów Markowa. Autorami oprogramowania był Lejaren Hiller oraz Leonard Isaacson. Innym znanym kompozytorem wykorzystującym w swojej praktyce artystycznej algorytmy komputerowe był Iannis Xenakis, który chętnie stosował metody bazujące na teorii wielkich liczb Bernoulliego, procesach Markowa, czy teorii gier. Utwory komponowane przez algorytmy implementowane w postaci programów komputerowych mogły stanowić dzieła same w sobie, ale mogły także posłużyć za punkt wyjścia, inspirację dla kompozytora, który komponował dzieła muzyczne przetwarzając tego typu materiał wygenerowany przez maszynę. Jest to tak zwana komputerowo wspomagana kompozycja algorytmiczna (ang. computer aided algotirthmic composition, CAAC).

Niniejsze laboratorium ma za zadanie przybliżyć tematykę technik stosowanych do komputerowego wspomagania procesu twórczego jakim jest komponowanie melodii na bazie modeli matematycznych mających na celu uchwycenie jej wewnętrznej struktury lub na bazie wykorzystania zjawisk mających z sygnałem muzycznym pewne wspólne cechy. Wszystkie metody kompozycji algorytmicznej oraz sposoby jej wspomagania zostały zaimplementowane w języku programowania Python przy wykorzystaniu następujących bibliotek:

numpy

obliczenia numeryczne ogólnego przeznaczenia

mido

do odczytu i zapisu plików MIDI

tensorflow, keras

biblioteki realizujące zadania uczenia maszynowego oraz obliczeń koniecznych w tym celu

(2)

W ramach laboratorium zbadane zostaną trzy sposoby wspomagania i automatycznej kompozycji linii melodycznych. Pierwszym z nich są sposoby bazujące na generowaniu próbek szumu o własnościach statystycznych podobnych do własności przejawianych przez rozkład wysokości nut w kompozycji muzycznej. Wykorzystany jest tutaj fakt, że następujące po sobie nuty są ze sobą skorelowane oraz że całość kompozycji muzycznej posiada charakter samopodobny. Sygnały losowe o takich cechach mogą być wykorzystane do generowania ciągów nut. Tego typu zjawiska można zaobserwować na przykładzie pokazanym na Rysunku 1.

Rysunek 1. Przykład frazowania oraz samopodobieństwa ciągów nut w utworze muzycznym, źródło: N. Vaccai, Metodo practico di canto italiano.

Widoczne są frazy muzyczne, które powtarzają się z pewną dokładnością co dwa takty, Jednocześnie zachodzi prawdopodobieństwo, że następna nuta melodii znajdzie się blisko nuty ją poprzedzającej (najczęstszym interwałem jest sekunda), co pozwala przypuszczać, że ze statystycznego punktu widzenia zachodzi zależność pomiędzy wysokościami kolejnych nut melodii.

Innym sposobem generowania melodii jest posłużenie się łańcuchami Markowa oraz innymi, bardziej złożonymi gramatykami losowymi. W łańcuchu Markowa istnieje zależność jedynie pomiędzy dwoma następującymi po sobie stanami procesu losowego. W przypadku kompozycji algorytmicznej są to wysokości generowanych nut. Jednak, na potrzeby konstrukcji tego typu systemów czasami dobrze jest uwzględnić więcej niż jedną poprzedzającą nutę, co pozwala na bardziej dokładne odtwarzanie sposobu konstrukcji fraz w dziele muzycznym. Gramatyki stochastyczne mogą być wygenerowany na podstawie dostarczonych przykładów. Dodatkowo, przejścia pomiędzy kolejnymi stanami łańcucha są losowe, zatem do algorytmu kompozycji wprowadzony jest element losowości, dzięki któremu za każdym uruchomieniem algorytmu generowany jest trochę inny wynik. Przykład łańcucha Markowa zastosowanego w roli stochastycznej gramatyki generującej sekwencje nut przedstawiony jest na Rysunku 2.

(3)

Rysunek 2. Przykład wykorzystania gramatyki stochastycznej w postaci łańcucha Markowa do

stworzenia modelu generowania melodii. Na rozkład prawdopodobieństwa następnej nuty w sekwencji ma w tym przypadku wpływ jedynie wysokość nuty poprzedzającej. Na przykład: jeżeli poprzednią nutą była nuta C, to istnieje prawdopodobieństwo równe 0.6, że następna nutą będzie D, a 0.4, że następną nutą będzie nuta E.

Ostatnim zaprezentowanym sposobem jest wykorzystanie rekurencyjnej sieci neuronowej do generowania kolejnych nut utwory na bazie kilku nut je poprzedzających. Najprostszym rozwiązaniem w tego typu zastosowaniu jest użycie tradycyjnej sieci ze sprzężeniem zwrotnym, jednak źle sprawdzają się one w przypadku analizy długich ciągów. Z tego względu w zastosowaniach tego typu znacznie częściej wykorzystuje się sieci typu LSTM (ang. long short-term memory), których konstrukcja bazująca na blokach pamięci sterowanych przez osobne podsieci wspiera uczenie się długich sekwencji. Właśnie taka sieć jest wykorzystywana w trakcie laboratorium. Przykład konstrukcji takiej sieci przedstawiony jest na Rysunku 3.

Rysunek 3. Konstrukcja pojedynczego bloku sieci neuronowej typu LSTM. Żółte bloczki

oznaczają poszczególne podsieci odpowiedzialne za sterowanie przepływem informacji w pojedynczym bloku sieci, źródło: http://colah.github.io/posts/2015-08-Understanding-LSTMs/, data dostępu 30. maja 2017.

(4)

W przypadku kompozycji algorytmicznej za pomocą sieci neuronowej konieczne jest ustalenie kodowania umożliwiającego odpowiednie wprowadzenie i wyprowadzenie danych z sieci neuronowej. Przykładem takiego kodowania może być zapis typu „one-hot”. Realizuje się go w ten sposób, że sieć neuronowa ma tyle wyjść, ile jest możliwych dźwięków w melodii. W jednej chwili wartość „1” może mieć tylko jedno wyjście, natomiast pozostałe mają wartość „0”. Melodia jest w takim przypadku ciągiem wektorów o długości takiej, jak liczba możliwych nut w melodii (dla standardowej klawiatury fortepianowej liczba klawiszy, a co za tym idzie długość tego wektora, wynosi 88). Długość nuty można regulować za pomocą powtarzania tego samego wektora. Przykładowo, jeżeli pojedynczy wektor oznacza ósemkę, to czterokrotnie powtórzony będzie oznaczać wygenerowanie półnuty. Przykład tego typu zapisu został przedstawiony na Rysunku 4.

Rysunek 4. Sposób kodowania „one hot” umożliwiający proste kodowanie wysokości oraz

długości trwania nuty. Przykłady dźwiękowe zapisane w tej konwencji mogą być wykorzystane do uczenia sieci LSTM, która następnie może być wykorzystana do wygenerowania ciągów o charakterystyce podobnej do ciągów uczących.

(5)

2. OPROGRAMOWANIE I SKRYPTY

Na potrzeby ćwiczenia przygotowany został zestaw skryptów umożliwiający generowanie przebiegów nut sterowanych za pomocą generatora wartości losowych, kompozycję za pomocą gramatyk stochastycznych oraz kompozycję z wykorzystaniem sieci LSTM. Każde z ćwiczeń posiada swój osobny folder odpowiadający numerowi ćwiczenia z sekcji 2. instrukcji laboratoryjnej. Modyfikacja nastaw odbywa się przez modyfikację zawartości skryptów napisanych w języku Python. Sekcje w których należy dokonać modyfikacji są oznaczone w plikach stosownym komentarzem, wszelkie nastawy, których wartości można zmieniać są wyszczególnione jako osobne zmienne i także opatrzone odpowiednim komentarzem dotyczącym ich funkcji. Skrypty można w szybki sposób uruchomić naciskając dwukrotnie na plik start.bat. W przypadku ćwiczenia 2. oraz 3. konieczne jest poleganie na bazie nagrań uczących, ta znajduje się w folderze music_examples. Skrypty wczytują zawarte w tym folderze pliki, możliwe jest wyłączenie plików ze zbioru uczącego poprzez przeniesienie do innego folderu (np. do folderu

hidden utworzonego w folderze z przykładami). Wynikowe pliki generowane przez skrypt są

zapisywane w folderze output_examples. Istnieje możliwość modyfikacji lub dodania własnych przykładów uczących, w tym celu należy posłużyć się edytorem midi takim jak np. MuseScore dostępny na stanowiskach laboratoryjnych

W zadaniu drugim istnieje możliwość obejrzenia wynikowych gramatyk generowanych na podstawie wzorców. Są one zapisywane w postaci plików txt w następującym formacie:

[0,-2,-1,-2,-2,0,] ---> 2: 0.666666666667 9: 0.166666666667 12: 0.166666666667

gdzie w górnej linijce zaznaczone są sekwencje poprzedzających interwałów (algorytm analizuje odległości między dźwiękami wyrażone w półtonach, z uwzględnieniem kierunku, ujemne wartości to przeskok melodii w dół), a następnie podawane są możliwe następne interwały oraz, po dwukropku, ich prawdopodobieństwa.

W zadaniu 3. istnieje możliwość wytrenowania własnego modelu sieci neuronowej lub wczytania któregoś z wcześniej wczytanych wzorców, szczegółowy opis linijek służących do tego celu znajduje się w sekcji skryptu przeznaczonej do edycji.

(6)

2. ZADANIA

Zad. 2.1: Generatory szumu

a) Wygeneruj ciągi nut bazujące na próbce szumu białego, Browna oraz różowego. Odsłuchaj ich. Jakie własności tego typów szumu można zidentyfikować słuchając tych ciągów.

b) Wykreśl widmo częstotliwościowe oraz funkcję autokorelacji każdego z nich, załącz je do niniejszego sprawozdania. Z czego wynikają różnice pomiędzy wynikami dla każdego typu szumu? Jak te różnice wpływają na generowane ciągi nut?

c) Jak zmienianie parametrów generowania szumu różowego wpływa na otrzymywane rezultaty oceniane w podpunktach a) oraz b)?

d) Dlaczego cechy takie jak samopodobieństwo i skorelowanie próbek szumu są pożądane z punktu widzenia algorytmu generującego ciągi nut mające stanowić podstawę dla generatora melodii?

Zad. 2.2: Gramatyki stochastyczne

a) Zapoznaj się z nagraniami umieszczonymi w folderze z przykładami uczącymi. Uruchom skrypt i posłuchaj plików MIDI wygenerowanych przez gramatykę stochastyczną. Jak zmieniają się generowane melodie w zależności od ilości przykładów uczących?

b) Uruchom algorytm tylko dla jednego nagrania oraz dla kilku nagrań, jak zmieniają się generowane utwory? Jak zmienia się złożoność generowanej gramatyki? (złożoność i liczba reguł)

c) Uruchom algorytm dla stałej ilości przykładów jednocześnie zmieniając rząd gramatyki. Jak zmieniają się generowane utwory? Jaka jest przyczyna tych zmian? Jak zmienia się złożoność generowanej gramatyki?

(7)

Zad. 2.3: Rekurencyjna sieć neuronowa

a) Korzystając z przykładowych, wytrenowanych sieci, wygeneruj melodie za pomocą sieci neuronowej. Jak melodie te różnią się w stosunku do tych wygenerowanych w poprzednich punktach?

b) Spróbuj wytrenować własny model do generowania melodii. W jaki sposób zmienia się czas uczenia w zależności od liczby przykładów i liczby próbek rozpatrywanych przez algorytm w trakcie syntezy?

Zad. 2.4: Pytania ogólne

a) Czy zaprezentowane w trakcie laboratorium metody faktycznie mogą stanowić samodzielne sposoby kompozycji, czy służyć za źródło inspiracji dla kompozytora? Odpowiedź uzasadnij.

b) Jak złożoność modelu wpływa na jakość generowanych melodii? Czy zawsze bardzo wysoka złożoność modelu jest pożądana z punktu widzenia implementacji?

c) Jakie cechy utworu muzycznego powinny być uwzględniane przez algorytm kompozycji automatycznej? Które z tych cech są, a które nie są uwzględniane przez modele zaprezentowane w trakcie laboratorium?

d) W jaki sposób można poprawić jakość melodii generowanych przez zaprezentowane w trakcie laboratoriów algorytmy?

e) Jakie mogą być potencjalne zastosowania algorytmów automatycznej kompozycji muzyki? Jakie są słabe i mocne strony tego typu algorytmów?

(8)

3. OPRACOWANIE

Do każdego z podpunktów zadania odpowiedzieć na zadane w nich pytania, dopisać komentarze i wnioski, należy zamieścić także rysunki zawierające wymagane wizualizacje.

4. LITERATURA

[1] Kotoński, W., Muzyka Elektroniczna, PWM, Kraków, 2002.

[2] Gwizdalanka, D., Historia Muzyki 1, podręcznik dla szkół muzycznych, PWM, Kraków, 2005. [3] Fernandez, J., Vico, F., AI Methods In Algorithmic Composition: A Comprehensive Survey, Journal of Artificial Inteligence (48), 513-583, 2013.

[4] Elowsson, A., Friberg, A., Algorithmic Composition of Popular Music, Proceedings of the International Conference on Music Perception and Cognition, 276-281, 2012.

[5] https://keras.io/ - strona internetowa biblioteki Keras służącej do realizacji algorytmów uczenia maszynowego, data dostępu: 30. maja 2017.

[6] https://deepmind.com/blog/wavenet-generative-model-raw-audio/ - przykład neuronowego modelu generatywnego opracowany przez firmę Deep Mind, data dostępu: 6. maja 2019.

Cytaty

Powiązane dokumenty

1 Wybierz dwa prawa rachunku zbiorów i udowodnij je formalnie (postaraj się wybrać inne prawa niż te udowodnione na

Wpływa on na większość mechanizmów odpowiedzialnych za zapew- nienie ochrony przed szkodliwymi patogenami, a pozytyw- ny bądź negatywny wpływ wysiłku fizycznego obserwuje się

Czy istnieje taki czworościan, w którym co najmniej jedna ściana jest trójką- tem rozwartokątnym, a środek sfery opisanej na tym czworościanie leży w jego wnętrzu2.

Rozważmy rentę prostą z góry o 20 ratach, przy czym pierwsza rata wynosi 100 zł, a każda następna jest o 5% większa od poprzedniej. Wyznaczyć wartość początkową i końcową

The research project is structured in three parts: a first part for the definition of the framework and fundamental aspects; a second one for the exploration of

Polecenie: Na jakie dyrektywy wykładni (i na jaki rodzaj wykładni) powoływał się Sąd Najwyższy uzależniając odpowiedzialność za funkcjonariusza od jego winyB.

Nowo tworzone terminy naukowe powinny nawiązywać pod względem znacze­ nia i formy do wyrazów już istniejących w języku, a także charakteryzować się

Porównaj (wymieniając wady i zalety) metody grupowania i podziału połówkowego pod kątem aktualizacji systemów informacyjnych pracujących zgodnie z tymi metodami wyszukiwania..