• Nie Znaleziono Wyników

Rozdziaª 3. Implementacja systemu algorytmicznego komponowania

3.1. Komponowanie bez deniowania formy kompozycji

3.1.1. Generowanie wzorców muzycznych

Proces generowania wzorców muzycznych przez system jest realizowany w spo-sób iteracyjny w gªównej p¦tli programu, której przykªad realizacji przedstawiono w liniach 16 - 159 na listingu 5.16. Zaªo»enia teoretyczne dotycz¡ce mini-generatorów wykorzystanych w komponowaniu utworu bez deniowania jego ostatecznej formy, przedstawiono w ( 2.9) na stronie 56. W przyj¦tej koncepcji zakªada si¦ przy-nale»no±¢ mini-generatora do jednej z trzech zdeniowanych klas: generatora mono-fonicznego, polifonicznego oraz perkusyjnego. Implementacja z listingu 5.16 wyko-rzystuje mini-generatory klasy perkusyjnej i monofonicznej.

Na listingu 3.2 przedstawiono fragment implementacji generowania wzorców mu-zycznych z wykorzystaniem mini-generatorów perkusyjnych. Do generowania wyko-rzystane zostaªy struktury przedstawione w ( 3.2) i ( 3.3).

W gªównej p¦tli programu tworzonych jest n wzorców muzycznych (linia 1, na listingu 3.2). W liniach 2 - 10 przedstawiono generowanie wzorców dla dwóch instru-mentów perkusyjnych: b¦bna basowego (bass) oraz werbla (snare). Procedura polega na wyznaczeniu wspóªczynnika step dla generowanego wzorca na podstawie zde-niowanego dla instrumentu wspóªczynnika z macierzy rhytmic_step, a nast¦pnie

Rozdziaª 3. Implementacja systemu algorytmicznego komponowania muzyki 79 List. 3.2. Fragment implementacji z listingu 5.16 - generowanie wzorców muzycznych przez mini-generatory perkusyjne w komponowaniu bez deniowania formy utworu.

‘rodowisko Matlab. Opracowanie wªasne.

1 f o r i =1:n 2 %bass

3 step = f i x ( pattern_l / f i x ( rand (1)∗ rhytmic_step (1)+1) ) ; 4 temppattern ( rhytmic_value {1 }( 1: step : end ) , 4) = 36;

5 bass = temppattern ;

6 %snare

7 temppattern = basepattern ;

8 step = f i x ( pattern_l / f i x ( rand (1)∗ rhytmic_step (2)+1) ) ; 9 temppattern ( rhytmic_value {2 }( 1: step : end ) , 4) = 40;

10 snare = temppattern ;

11 . . .

12 %ornaments

13 temppattern = basepattern ;

14 step = f i x ( pattern_l / f i x ( rand (1)∗ rhytmic_step (7)+1) ) ; 15 vec = rhytmic_value {8 } ( 1 : step : end ) ;

16 temppattern ( vec , 4 ) = [60:1:60+ length ( vec ) −1];

17 harmonization = temppattern ;

18 temppattern = createnmat ( z e r o s (1 , pattern_l ∗ 2 ) , 0 . 2 5 , 1 2 7 , 1 0 ) ; 19 step = f i x ( pattern_l / f i x ( rand (1)∗ rhytmic_step (7)+1) ) ; 20 vec = rhytmic_value {7 } ( 1 : step : end ) ;

21 temppattern ( vec , 4 ) = [60:1:60+ length ( vec ) −1];

22 harmonization2 = temppattern ; 23 temppattern = basepattern ; 24 . . .

25 end

wykorzystania go do ulokowania d¹wi¦ku MIDI danego instrumentu perkusyjnego (36 dla b¦bna basowego oraz 40 dla werbla) w ramach pustego wzorca temppattern przy wykorzystaniu wektora rhytmic_value. Analogicznie proces ten jest powta-rzany dla pozostaªych instrumentów perkusyjnych z listingu 5.16 z wyª¡czeniem mini-generatorów, które generuj¡ serie wyst¡pie« ró»nych instrumentów perkusyj-nych (zmienne harmonization i harmonization2 na listingu 3.2) z wykorzystaniem zadanego wektora jako motywu MM (denicja mini-generatora ( 2.9) na stronie 56.

W liniach 12 - 23 listingu 3.2 przedstawiono przykªadowy fragment pro-cesu generowania wzorców muzycznych przez mini-generatory perkusyjne bazuj¡ce na motywie MM zdeniowanym jako wektor d¹wi¦ków MIDI, interpretowanych jako ró»ne instrumenty perkusyjne. Pocz¡tek tworzenia wzorców harmonization i harmonization2 jest analogiczny do tego zaprezentowanego dla mini-generatorów perkusyjnych generuj¡cych wzorce dla jednego instrumentu (wtedy motyw MM mini-generatora jest skalarem). W liniach 16 i 22 listingu 3.2 nast¦puje wypeªnienie wzorca muzycznego d¹wi¦kami z wektora < 60 : 1 : 60 − length(vec) − 1 > w lokalizacjach zdeniowanych przez wektor vec, przy czym wektor ten deniowany jest niezale»nie dla obu wzorców (w liniach 15 i 20).

Rozdziaª 3. Implementacja systemu algorytmicznego komponowania muzyki 80 List. 3.3. Fragment implementacji z listingu 5.16 - generowanie wzorców muzycz-nych przez mini-generator monofoniczny w komponowaniu bez deniowania formy

utworu. ‘rodowisko Matlab. Opracowanie wªasne.

1 f o r i =1:n 2 . . .

3 %mini−generator monofoniczny 1

4 temppattern = bass_pattern ;

5 step = f i x ( pattern_l / f i x ( rand (1)∗ rhytmic_step (9)+1) ) ;

20 basspiano_vec = basspiano_vec + 12;

21 end

22 temppattern ( vec , 4) = basspiano_vec ;

23 basspiano = temppattern ;

24 . . . 25 end

Odr¦bnego omówienia wymaga proces generowania wzorców muzycznych przez mini-generatory monofoniczne. Na listingu 3.3 przedstawiono przykªadowy fragment implementacji generowania linii melodycznej (monofonicznej) przez mini-generator z wykorzystaniem struktur przedstawionych w ( 3.2) i ( 3.3).

Procedury wyznaczania wspóªczynnika step oraz zwi¡zanego z nim wektora vec lokalizacji d¹wi¦ków w ramach wzorca muzycznego s¡ analogiczne do tych przed-stawionych w przykªadach implementacji mini-generatorów perkusyjnych. Odr¦bnie natomiast przebiega proces wypeªniania wzorca muzycznego d¹wi¦kami z motywu mm. Wzorzec mm losowany jest ze zbioru bassoctave wygenerowanych wcze±niej kombinacji motywu, a jego d¹wi¦ki wstawiane s¡ do odpowiednich lokalizacji wzorca muzycznego w obr¦bie p¦tli zaprezentowanej na listingu 3.3 w liniach 11 - 18. Je»eli dªugo±¢ motywu mm jest mniejsza ni» dªugo±¢ wektora vec lokalizacji d¹wi¦ków, d¹wi¦ki wstawiane s¡ do wektora muzycznego od pocz¡tku motywu mm. Dodatkowo wprowadzona zostaªa reguªa transpozycji o oktaw¦ w gór¦ co drugiego wygenerowa-nego wzorca monofoniczwygenerowa-nego (linie 19 - 21 na listingu 3.3).

Ostatnim etapem generowania wzorców muzycznych jest ª¡czenie wyj±ciowych wzorców muzycznych generowanych przez mini-generatory w jeden wzorzec

przy-Rozdziaª 3. Implementacja systemu algorytmicznego komponowania muzyki 81 List. 3.4. Fragment implementacji z listingu 5.16 - konkatenacja wzorców muzycz-nych w obr¦bie zdeniowamuzycz-nych klas wzorców w komponowaniu bez deniowania

formy utworu. ‘rodowisko Matlab. Opracowanie wªasne.

1 f o r i =1:n 2 . . .

3 i f ( ( i /n∗100) <= 25 ) %k la sa A

4 pattern = [ bass ; snare ; c l o s e d h i h a t ; low_mid_tom ;

5 high_mid_tom ; tambourine ; harmonization ; basspiano ; 6 basspiano1 ; basspiano2 ] ;

7 end

8 i f ( ( i /n∗100) > 25 && ( i /n∗100) <= 50 ) %k l a s a B

9 pattern = [ bass ; snare ; c l o s e d h i h a t ; low_mid_tom ; 10 high_mid_tom ; tambourine ; basspiano2 ; basspiano1 ] ; 11 end

12 i f ( ( i /n∗100) > 50 && ( i /n∗100) <= 75 ) %k l a s a C

13 pattern = [ bass ; snare ; c l o s e d h i h a t ; low_mid_tom ; 14 high_mid_tom ; tambourine ; f i l l ; basspiano ;

15 basspiano1 ; basspiano2 ] ; 16 end

nale»¡cy do zdeniowanej przez u»ytkownika klasy, w ramach reguªy konkatenacji zdeniowanej w (2.6) na stronie 55.

Przykªad implementacji konkatenacji wzorca muzycznego oraz deniowania klas wzorców muzycznych przedstawiono na listingu 3.4. W przykªadzie zdeniowane zostaªy cztery klasy, a ich wypeªnienie wzorcami muzycznymi zostaªo uj¦te w wa-runkach logicznych opisanych w liniach 3, 8, 13 i 18. Autor w przedstawionej im-plementacji zaªo»yª równomierne rozªo»enie generowanych wzorców w ramach klas, badaj¡c zmienn¡ i - iterator p¦tli generowania wzorców oraz zmienn¡ n deniuj¡ca ogóln¡ liczb¦ wygenerowanych wzorców. W prezentowanym przykªadzie ka»da z ge-nerowanych klas zawiera tak¡ sam¡ liczb¦ wzorców muzycznych, a ka»dy z nich zdeniowany jest jako macierz pattern, b¦d¡ca wynikiem konkatenacji wzorców mu-zycznych generowanych przez ró»ne mini-generatory opisane w poprzedniej cz¦±ci tego rozdziaªu. Skªadowe wzorców generowanych przez mini-generatory zostaªy do-kªadnie przedstawione w implementacji na listingu 5.16 w cz¦±ci Dodatek A: Listingi kodów.

Deniowanie klas wzorców muzycznych ma charakter subiektywny, dlatego w implementacji 3.4 autor zaproponowaª nast¦puj¡ce struktury klas:

 klasa A zbudowana jest ze wzorców muzycznych zbudowanych na pod-stawie wzorców: bass, snare, closedhihat, low_mid_tom, high_mid_tom, tambourine, harmonization, basspiano, basspiano1 i basspiano2,

Rozdziaª 3. Implementacja systemu algorytmicznego komponowania muzyki 82 List. 3.5. Przykªad implementacji tworzenia macierzy podobie«stwa wzorców mu-zycznych w komponowaniu bez deniowania formy utworu. ‘rodowisko Matlab.

Opracowanie wªasne.

 klasa B zbudowana jest ze wzorców generowanych na podstawie wzorców: bass, snare, closedhihat, low_mid_tom, high_mid_tom, tambourine, basspiano1 i basspiano2,

 klasa C zbudowana jest ze wzorców powstaªych na podstawie wzorców:

bass, snare, closedhihat, low_mid_tom, high_mid_tom, fill, basspiano, basspiano1 i basspiano2,

 klasa D zawiera wzorce muzyczne wygenerowane na podstawie wzorców: bass, closedhihat, tambourine, fill i basspiano.

Warto w tym miejscu zaznaczy¢, »e w przypadku wykorzystanego w implementacji narz¦dzia MIDI Toolbox, podana kolejno±¢ konkatenacji wzorców nie ma znaczenia, poniewa» podczas przetwarzania wynikowej macierzy nut wygenerowanej kompo-zycji muzycznej, jej dane s¡ analizowane i przetwarzane na wiadomo±ci MIDI w kolejno±ci ich wyst¡pienia w czasie (kolumna 1 i 6 macierzy nut) od pocz¡tku pliku.

W nast¦pnej cz¦±ci tego rozdziaªu opisany zostaª etap tworzenia kompozycji mu-zycznej na podstawie wygenerowanych wcze±niej wzorców. Autor dokonaª analizy kolejnych skªadowych tego procesu wedªug implementacji z listingu 5.16.