Akolada

Eksperymentując z komputerowymi sposobami tworzenia (pisania) muzyki, na próżno szukałem wymarzonego, odpowiedniego dla mnie narzędzia.

Moje ulubione środowisko pracy to pliki tekstowe, bash, vim, linux. Pełnoekranowe systemy graficzne (w stylu MuseScore i jego bardziej profesjonalnych krewnych) nie są dla mnie odpowiednie. Myszka może się pośliznąć, nie widać wszystkich szczegółów, łatwo utknąć, nie działa diff, nie da się kopiować i wklejać - jednym słowem - nie da się pracować jak porządny programista.

Z drugiej strony csound, lilypond i tego typu narzędzia są potwornie niewygodne dla muzyka. Gdzie są nuty ?! Chcę je widzieć!

Chciałem znaleźć (lub napisać, w końcu okazało się, że muszę napisać) program, w którym “Wlazł Kotek” wygląda prawie jak na pięciolinii :

           >     >     >     >     >     >
               O=            O== O=
               +-----O=----+-----+-----O=----+-----
               | O O        O      O O        O
               +-----+-O O +-----+-----+-O O +-----
               |           O                 O O==.
               +-----+-----+-----+-----+-----+-----
               |
        G:     +-----+-----+-----+-----+-----+-----
               |
               +-----+-----+-----+-----+-----+-----

Prototyp

Zrobiłem to. Prototyp już istnieje, nazywa się improviso, niedługo go pokażę. Potrafi wczytać zapis podobny do powyższego i wygenerować plik MIDI. Po zrenderowaniu za pomocą FluidSynth powstaje zaskakująco dobry kawałek!

Prototyp działa, a Akolada będzie gotowym produktem, językiem w wersji 1.0. Na razie jest w fazie opracowywania szczegółów. Dzielę się tutaj przemyśleniami i planami, bo nie wiadomo, kiedy gotowy produkt powstanie. Dla porządku spisałem je po kolei:

Cele

  1. Akolada to język, a nie GUI
    Akolada działa w trybie wsadowym. Jej implementacja wzorcowa będzie pracować jak klasyczny kompilator, bez interaktywnych interfejsów graficznych, ale z precyzyjną diagnostyką błędów.

  2. Zamkniętość wersji 1.0 – brak założeń o przyszłej kompatybilności
    Pierwsza wersja nie będzie rozwijana w sposób wstecznie kompatybilny. Jeśli projekt się rozwinie, kolejne wersje powstaną jako odrębne inicjatywy, bez konieczności zachowywania zgodności ze wcześniejszym kodem.

  3. Nie ingerujemy w brzmienie – to zadanie syntezatorów MIDI
    Akolada generuje pliki MIDI, ale nie definiuje samych brzmień. Instrumenty General MIDI są wykorzystywane, ale specyfikacja dźwięku zależy od silnika syntezatora, takiego jak FluidSynth.

Założenia co do formy i znaczenia zapisu

  1. Czas biegnie poziomo, wysokość dźwięku jest diatoniczna Akolada odwzorowuje nutowy zapis muzyczny, nie piano-roll. Rytm jest precyzyjnie określony przez położenie nuty w poziomie, a wysokość dźwięku wyrażona w sposób naturalny dla muzyków.

  2. Brak pauz i metrum – rytm wynika z pozycji nut
    Nie używamy zapisu pauz ani metrum—wszystko wynika z poziomego układu znaków. Takt wyłania się z organizacji zapisu, ale nie jest narzucony jako oddzielna struktura.

  3. Programowalne symbole dla instrumentów i dźwięków
    Każdy znak w Akoladzie może odpowiadać konkretnej nutce lub uderzeniu perkusyjnemu, przypisanej do wybranego instrumentu. System modyfikatorów pozwala na definiowanie akcentów, artykulacji, obwiedni dźwięku i efektów.

  4. Modyfikatory kontrolują wysokość, dynamikę i czas trwania
    Akolada pozwala na płynne zmiany parametrów dźwięku w czasie. Możemy programować wibrato, glissanda, akcenty, legato, a nawet losowe wariacje długości i siły dźwięku.

Co dalej

Zamierzam stopniowo rozwijać ten pomysł, chwaląc się tutaj postępami. Zacznę od dokładnego zdefiniowania koncepcji. Najpierw definicja języka, potem implementacja. Jeszcze wsześniej - w drugim odcinku demonstruję działający prototyp, *improvviso*.