Grać jak z nut – cz. 2

W pierwszej części artykułu poznaliśmy bardzo dużo pojęć muzycznych i technicznych. Teraz czas je wykorzystać do zbudowania automatycznego kompozytora. Zanim jednak do tego przystąpimy, musimy przyjąć pewne założenia (a raczej uproszczenia):

  • utwory będą się składały z 8 taktów w budowie okresowej (poprzednik 4 takty, następnik 4 takty)
  • metrum będzie 4/4 (czyli 4 ćwierćnuty na takt, akcent na pierwszą i trzecią miarę taktu)
  • długość każdego motywu wynosi 1 takt (mimo że to wymaganie wydaje się restrykcyjne, jednak wiele popularnych utworów jest zbudowanych właśnie z motywów, które trwają 1 takt).
  • stosowana będzie tylko tonacja C-dur (w razie potrzeby zawsze można po wygenerowaniu utworu przetransponować go do dowolnej tonacji)
  • ograniczymy się do ok. 25 najczęściej stosowanych odmian stopni harmonicznych (stopni jest 7, ale część z nich ma kilka wersji, z dodatkowymi dźwiękami, które zmieniają barwę akordu).

Co jest potrzebne do stworzenia utworu?

Do stworzenia w automatyczny sposób prostego utworu muzycznego potrzebne nam jest:

  • wygenerowanie harmonii utworu – akordów i ich rytmu
  • stworzenie motywów – ich dźwięków (wysokości) i rytmu
  • stworzenie wariacji tych motywów – j.w.
  • połączenia motywów i wariacji w melodię, dopasowując je do harmonii

Po opanowaniu podstaw możemy przejść do pierwszej części automatycznego komponowania – generowania harmonii. Zacznijmy od stworzenia rytmu harmonii.

Wolny rytm

Choć można by się pokusić o stworzenie statystycznego modelu rytmu harmonicznego, to, niestety, (przynajmniej w chwili pisania tego artykułu) nie ma dostępnej bazy, która by to umożliwiła. Wobec powyższego, musimy poradzić sobie w inny sposób – sami wymyślmy taki model. W tym celu wybierzmy kilka “sensownych” rytmów harmonicznych i zadamy im jakieś “sensowne” prawdopodobieństwa.

rytmprawdopodobieństworytmprawdopodobieństwo
[8]0.2[2,2]0.1
[6, 2]0.1[2,1,1]0.02
[2, 6]0.1[3,1]0.02
[7, 1]0.02[1,1,1,1]0.02
[4]0.4[1,1,2]0.02
Tab1. Rytmy harmoniczne, wartości wyrażane w ćwierćnutach – [6, 2] oznacza rytm, w którym są dwa akordy, pierwszy trwa 6 ćwierćnut, a drugi 2 ćwierćnuty.


Rytmy w tabeli przedstawione są w postaci tego, jak długo akordy będą trwały, a długość trwania przedstawiona jest w liczbie ćwierćnut. Niektóre rytmy trwają dwa takty (np. [8], [6, 2]), a pozostałe jeden takt ([4], [1, 1, 2] itd.).

Generowanie rytmu harmonii przebiega w następujący sposób. Losujemy kolejne rytmy aż do momentu, gdy otrzymamy tyle taktów, ile potrzebowaliśmy (w naszym przypadku 8). Ze względu na to, że rytmy mają różną długość, czasami mogą wyniknąć z tego pewne komplikacje. Przykładowo, może zaistnieć taka sytuacja, że do zakończenia generacji będzie potrzebny ostatni rytm o długości 4 ćwierćnut, a my natomiast wylosujemy rytm o długości 8. W takim przypadku, aby uniknąć niepotrzebnych problemów, można wymusić losowanie z podzbioru rytmów o długości 4 ćwierćnut.

W takim razie, zgodnie z powyższymi ustaleniami, załóżmy, że wylosowaliśmy następujące rytmy:

  • poprzednik: [4, 4], [2, 2], [3, 1], 
  • następnik: [3, 1], [8], [2, 2]

Likelihood

W kolejnym kroku będziemy wykorzystywali pojęcie likelihood. Jest to nieznormalizowane do jedynki prawdopodobieństwo (tzw. pseudo-prawdopodobieństwo), które pomaga ocenić względny poziom prawdopodobieństwa różnych zdarzeń. Dla przykładu, jeżeli likelihoody zdarzeń A i B wynoszą odpowiednio 10 oraz 20, to oznacza, że zdarzenie B jest dwa razy bardziej prawdopodobne od zdarzenia A. Równie dobrze mogłyby te likelihoody wynosić 1 oraz 2, albo 0.005 oraz 0.01. Z likelihoodów można policzyć prawdopodobieństwo. Jeśli założymy, że jedynie zdarzenia A i B mogą wystąpić, to ich prawdopodobieństwa będą wynosić odpowiednio:

Obrazek posiada pusty atrybut alt; plik o nazwie Zasob-1.svg

Progresje akordów

Aby wygenerować prawdopodobne przebiegi harmoniczne najpierw przygotujemy sobie modele N-gramowe stopni harmonicznych. W tym celu skorzystamy z modeli n-gramów udostępnionych na githubie (https://github.com/DataStrategist/Musical-chord-progressions).

Nasz przykładzie będzie wykorzystywać 1-, 2-, 3-, 4- i 5-gramy.

W rytmie harmonii poprzednika jest 6 wartości rytmicznych, więc musimy przygotować przebieg 6 stopni harmonicznych. Pierwszy akord generujemy z użyciem unigramów (1-gramów). Przygotowujemy sobie zatem najpierw likelihoody dla każdego możliwego stopnia, a następnie losujemy z uwzględnieniem tych likelihoodów. Wzór na likelihood jest w tym przypadku dość prosty:

likelihoodX=p(X)

gdzie
X oznacza dowolny stopień harmoniczny
p(X) to prawdopodobieństwo 1-gramu X

My w tym przypadku wylosowaliśmy IV stopień (w tej tonacji F-dur).

Drugi akord generujemy z użyciem bigramów oraz unigramów, z wagą większą dla bigramów:

likelihoodX=waga2gramp(X v IV)+waga1gram*p(X)

gdzie:

  • p(X v IV) to prawdopodobieństwo przebiegu (IV, X)
  • wagaNgram to przyjęta waga N-gramu (im większa tym większy wpływ tego modelu n-gramowego, a mniejszy wpływ innych modeli)

Wagi n-gramów możemy przyjąć takie, jakie chcemy. Na potrzeby przykładu wybraliśmy takie:

n-gram12345
waga0.0010.010.115

Kolejny akord jaki wylosowaliśmy to: vi stopień (a-moll).

Generowanie trzeciego akordu przebiega podobnie, z tym że możemy już wykorzystać 3-gramy:

likelihoodX=waga3gramp(X v IV, vi)+waga2gramp(X v IV)+waga1gram*p(X)

I tak kontynuujemy, aż wygenerujemy wszystkie potrzebne akordy. W naszym przypadku wylosowaliśmy:

IV,  vi, I, iii, IV, vi (w przyjętej tonacji C-dur to są kolejno akordy F-dur, a-moll, C-dur, e-moll, F-dur, a-moll)

Nie jest to jakiś bardzo często spotykany przebieg akordów, ale jak się okazuje występuje w 5 popularnych piosenkach (https://www.hooktheory.com/trends#node=4.6.1.3.4.6&key=rel)

Podsumowanie

Udało nam się wygenerować rytmy i akordy, które są składowymi harmonii utworu. Należy tutaj jednak zwrócić jeszcze uwagę, że dla uproszczenia, nie wzięliśmy pod uwagę dwóch ważnych czynników:

  • Przebiegi harmoniczne poprzednika i następnika są bardzo często w jakiś sposób powiązane. Harmonia następnika może być identyczna do tej poprzednika lub ewentualnie lekko zmieniona, aby sprawiać wrażenie, że te dwa zdania są ze sobą w jakiś sposób powiązane.
  • Poprzednik i następnik kończą się prawie zawsze na konkretnych stopniach harmonicznych. Nie jest to ścisła reguła, ale niektóre stopnie harmoniczne są o wiele bardziej prawdopodobne od innych na końcach zdań muzycznych.

Na potrzeby przykładu można jednak uznać zadanie za zakończone. Harmonię utworu mamy już gotową, teraz należy jedynie stworzyć melodię do tej harmonii. W trzeciej części naszego artykułu można dowiedzieć się, jak właśnie taką melodię skomponować.

Chmura obliczeniowa a środowisko

Termin chmury obliczeniowej trudno jest jednoznacznie zdefiniować. Inne podejście do chmury będą miały przedsiębiorstwa czy osoby prywatne. Zwykle mówimy o chmurze obliczeniowej jako o sieci dostępnych na żądanie zasobów serwerowych – mocy obliczeniowej oraz przestrzeni dyskowej, ale również i oprogramowania – dostarczanych przez zewnętrzne podmioty, czyli tzw. dostawców chmury (ang. cloud provider). Dostarczane zasoby są dostępne przez Internet oraz zarządzane przez dostawcę, eliminując tym samym wymóg kupowania sprzętu oraz bezpośredniego zarządzania fizycznymi serwerami przez firmy. Dodatkowo, chmura jest rozproszona na wiele centrów danych w wielu rejonach świata, dzięki czemu możemy liczyć na mniejszą awaryjność oraz większą dostępność naszych usług [1].

Podstawowe działanie chmury

Zasoby dostępne w chmurze są współdzielone przez wielu klientów, dzięki czemu można lepiej wykorzystać dostępną moc obliczeniową oraz przy odpowiednim użyciu, może okazać się ona korzystniejsza cenowo. Takie podejście do współdzielenia zasobów może budzić pewne obawy, jednak dzięki wykorzystaniu technologii wirtualizacji, chmura zapewnia wyższe bezpieczeństwo niż w klasycznym modelu obliczeniowym. Wirtualizacja pozwala na tworzenie symulowanych komputerów, tzw. maszyn wirtualnych, które zachowują się tak jak ich fizyczne odpowiedniki, jednak znajdują się na jednym serwerze i są od siebie w pełni odizolowane. Współdzielenie zasobów i wirtualizacja pozwalają na efektywne wykorzystanie sprzętu oraz ostatecznie ograniczenie poboru prądu przez serwerownie. Oszczędności finansowe możemy natomiast odczuć ze względu na powszechnie stosowany przez dostawców model biznesowy “pay-as-you-go” polegający na rozliczaniu użytkowników za faktycznie wykorzystane zasoby (np. za minuty czy nawet sekundy wykorzystanego czasu obliczeniowego) w przeciwieństwie do stałego abonamentu. 

Samo określenie “chmury” zapoczątkowało się jako termin slangowy. Często na schematach technicznych infrastrukturę sieciową i serwerową reprezentujemy jako ikonę chmury [2]. Aktualnie “chmura obliczeniowa” jest powszechnie przyjętym określeniem w środowisku IT oraz popularnym modelem obliczeniowym. Przystępność cenowa chmury oraz brak konieczności samodzielnego zarządzania nią, sprawia, że ten model obliczeniowy jest coraz częściej wybierany przez firmy informatyczne, co pozytywnie przekłada się na aspekty środowiskowe [3].

Mniejsze zużycie energii elektrycznej 

Wzrastające zapotrzebowanie na rozwiązania z obszaru IT niesie za sobą równocześnie większe zapotrzebowanie na energię elektryczną – zasób strategiczny z punktu widzenia utrzymania chmury. Utrzymywanie swojej własnej serwerowni w przedsiębiorstwie wiąże się jednak z ogromnymi nakładami energetycznymi, które generuje nie tylko sam sprzęt komputerowy, ale także system do chłodzenia serwerowni. 

Wbrew pozorom większe serwerownie, które przeliczają na raz ogromne ilości danych są bardziej przyjazne środowisku niż lokalne serwerownie w przedsiębiorstwach [4]. Według badań Accenture, przeniesienie własności przedsiębiorstwa do chmury może zredukować zużycie energii nawet o prawie 65%. Jest to wynikiem tego, że największe rozwiązania chmurowe budowane są zazwyczaj w przeznaczonym do tego miejscu, co pozwala na lepszą organizację infrastruktury i zarządzanie zasobami [5]. Dostawcy dużych usług chmurowych mogą z wyprzedzeniem zaplanować system chłodzenia, który będzie dawać najlepsze efekty. Dodatkowo dysponują nowoczesnym, często dużo wydajniejszym prądowo sprzętem niż przeciętna serwerownia. W badaniach przeprowadzonych w 2019 roku, stwierdzono, że chmura AWS była 3,6 razy bardziej efektywna pod względem wykorzystywanej energii niż mediana badanych centrów danych przedsiębiorstw w USA [6].

Co więcej, ze względu na to, że chmura jest środowiskiem współdzielonym, można efektywnie sterować mocą. Skala użytkowników jednej chmury obliczeniowej pozwala na bardziej rozważne rozdysponowanie zużywanej energii pomiędzy poszczególnymi przypadkami. Zrównoważone zarządzanie zasobami umożliwia również nasz produkt Data Engineering, który zbiera i analizuje dane w celu maksymalizacji wydajności i efektywności pracy.

Zmniejszenie emisji szkodliwych substancji

Poprzez budowę centrów przetwarzania danych, które korzystają z ekologicznych źródeł energii oraz opierają się na niskoemisyjnych rozwiązaniach, można chociażby kontrolować emisję dwutlenku węgla i innych gazów mających wpływ na efekt cieplarniany. Zgodnie z danymi z raportu “The Green Behind Cloud” [7] migracje do chmury publicznej mogą zredukować globalną emisję dwutlenku węgla o 59 mln ton rocznie, co jest porównywalne do usunięcia 22 milionów samochodów z drogi.

Warto również zainteresować się migracją do dostawców mających na uwadze swój ślad węglowy. Dla przykładu chmura firmy Google jest w pełni neutralna pod względem emisji dwutlenku węgla wykorzystując energię odnawialną, a od roku 2030 zobowiązuje się do wykorzystywania wyłącznie energii bezemisyjnej przez całą dobę we wszystkich centrach danych [8]. Chmura Azure firmy Microsoft jest neutralna emisyjnie od 2012 roku, a klienci mogą śledzić emisję swoich usług w specjalnie przygotowanym kalkulatorze [9].

Redukcja hałasu związanego z użytkowaniem sprzętu IT 

Hałas klasyfikowany jest jako zanieczyszczenie środowiska. Mimo że na pierwszy rzut oka wydaje się on całkiem niepozorny i nieszkodliwy, ma on negatywny wpływ na zdrowie człowieka i jakość środowiska. W odniesieniu do człowieka, zwiększa on ryzyko chorób takich jak nowotwór, zawał serca czy nadciśnienie. Z kolei z perspektywy środowiskowej ma on wpływ na zmianę zachowania zwierząt, migracji ptaków czy też ich reprodukcję.

Głównym źródłem hałasu w rozwiązaniach przechowywania danych w serwerach w firmie jest specjalny system chłodzenia, który pozwala utrzymać odpowiednią temperaturę w serwerowni. Wykorzystanie rozwiązań chmurowych pozwala zredukować emitowany hałas przez urządzenia chłodzące w miejscach pracy, co w konsekwencji przyczynia się do zmniejszenia zanieczyszczenia środowiska hałasem.

Jeśli chcesz dowiedzieć się więcej o dostępnych rozwiązaniach pozwalających na redukcję hałasu przemysłowego, sprawdź nasz produkt Intelligent Acoustics.

Redukcja poziomu odpadów 

Zastosowanie chmury obliczeniowej w swojej działalności, w przeciwieństwie do posiadania tradycyjnych serwerów w zasobach firmowych, wpływa również na zmniejszenie ilości produkowanych odpadów komputerowych. Wynika to głównie z faktu, iż chmura obliczeniowa nie wymaga zakupu dodatkowego wyposażenia czy też przygotowania infrastruktury do serwerowni w firmie, co w późniejszej perspektywie ogranicza ilość sprzętu do utylizacji.  

Ponadto, stosowane mechanizmy wirtualizacji, polegające na zastępowaniu większej liczby serwerów z małą mocą obliczeniową na mniejsze ilości serwerów, które później skuteczniej wykorzystują ową moc, optymalizują i zwiększają wydajność serwera, a to w rezultacie zmniejsza zapotrzebowanie na zasoby sprzętowe.  

Podsumowanie 

Aktualnie działanie zrównoważone jest ważnym czynnikiem przy wyborze technologii. Ochrona środowiska staje się dla firm, a także producentów urządzeń sieciowych czy telekomunikacyjnych, sprawą priorytetową, co przekłada się na szukanie bardziej ekologicznych rozwiązań. Chmura obliczeniowa zdecydowanie wpisuje się w ten trend. Nie tylko przyczynia się do ograniczenia zużycia zasobów sprzętowych, energetycznych, a także redukuje emisję szkodliwych substancji do ekosystemu czy emitowany hałas do środowiska.  

Bibliografia

[1] https://www.wit.edu.pl/dokumenty/wydawnictwa_naukowe/zeszyty_naukowe_WITZ_06/0006_Joszczuk-Januszewska.pdf 

[2] https://rocznikikae.sgh.waw.pl/p/roczniki_kae_z36_21.pdf 

[3] http://yadda.icm.edu.pl/yadda/element/bwmeta1.element.ekon-element-000171363539  

[4] Paula Bajdor, Damian Dziembek “Środowiskowe i społeczne efekty zastosowania chmury obliczeniowej w przedsiębiorstwach”, 2018 

[5] https://www.accenture.com/_acnmedia/PDF-135/Accenture-Strategy-Green-Behind-Cloud-POV.pdf  

[6] “Reducing carbon by moving to AWS” https://www.aboutamazon.com/news/sustainability/reducing-carbon-by-moving-to-aws

[7] https://www.accenture.com/us-en/insights/strategy/green-behind-cloud

[8] “Operating on 24/7 Carbon-Free Energy by 2030.” https://sustainability.google/progress/energy/

[9] https://www.microsoft.com/en-us/sustainability/emissions-impact-dashboard