musique/doc/functions.md
2022-11-14 19:55:09 +01:00

116 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Lista wbudowanych funkcji języka Musique
* `bmp value` zmienia wartość BMP z domyślnej na `value`;
-`value` musi być liczbą całkowitą, domyślnie `120`;
* `call function args` funkcja wywołująca funkcję `function`, która przekazuje `function` `args` jako argumenty wywoływanej fukncji;
* `ceil value` operacja podobna do matematycznej funkcji podłogi (zaokrąglenie liczby do pierwszej liczby całkowitej mniejszej lub równej tej liczbie);
- `value` musi być to wartość o typie Number lub tablica takich wartości;
* `chord (notes)` konstruuje akord z `notes`:
- `notes` `notes` definiowane są następująco: `(<litera_nuty> <numer_oktawy> <czas_trwania>)`:
- np. `(c 4 1)` dźwięk C w 4 oktawie, o długości całej nuty;
* `down value` sekwencyjnie zwraca liczby całkowite, począwszy od `value` do 0:
- `value` musi być liczbą całkowitą;
* `flat args` łączy `args` w tablicę bez zagnieżdżeń (tzn. "odpakowuje" zawartość zagnieżdżonych tablic i zawiera je w pojedyńczej tabeli):
- `args` - tablica, w tym tablica z zagnieżdżeniami;
* `floor value` operacja podobna do matematycznej funkcji podłogi (zaokrąglenie liczby do pierwszej liczby całkowitej większej lub równej tej liczbie);
- `value` musi być to zmienna o typie Number lub tablica takich zmiennych;
* `fold args` używa elementów tablicy jako argumentów podanej funkcji:
- `args` postaci `tablica funkcja` lub `tablica wartość_startowa funkcja`;
* `for vect` iteruje po elementach wektora `vect`:
- `vect` - kontener wartości, musi posiadać typ Vector;
* `hash vect` standardowa funkcja haszująca, zwraca jeden hash połączonych wartości z `vect`:
- `vect` - kontener wartości, mogą być dowolnego typu;
* `if cond [if_true] [if_false]` wyrażenie warunkowe: jeżeli `cond` będzie prawdą, zostanie wykonany kod z `[if_true]`, w przeciwnym wypadku wykonany zostanie kod z `[if_false]` fragment `[if_false]` jest opcjonalny;
* `incoming args` pozwala na rozpatrzenie przychodzących komunikatów MIDI (`note_on` i `note_off`), odpowiednio;
- `args` konstrukcja `komunikat, nuta`;
* `instrument args` pozwala na zmianę instrumentu:
- `args` może przyjmować sam numer programu, lub parę `numer_programu, kanał`;
* `len args` zwraca długość kontenera `args`, a jeżeli `args` nie jest wektorem ustawia domyślną długość trwania dźwięku, domyślnie ćwierćnuta;
* `max args` zwraca maksimum z `args`;
* `min args` zwraca minimum z `args`;
* `mix args` algorytmicznie miesza wszystkie elementy z `args`:
- `args` tablica elementów, może być tablicą z zagnieżdżeniami;
* `note_off args` w zależności od kształtu `args`:
- jeżeli `args` są w postaci `(kanał, nuta)` wyłącza nutę na danym kanale:
- `kanał` liczba całkowita;
- `nuta` postać podobna do `notes` z `chord notes`;
- jeżeli `args` są w postaci `(kanał, akord)` wyłącza wszystkie nuty z danego akordu na danym kanale;
* `note_on args` analogicznie do `note_off args`;
* `nprimes value` generuje `value` kolejnych liczb pierwszych:
- `value` musi być typu Number;
* `oct value` analogicznie do `bpm value`, wartość domyślna to 4;
* `par args` gra współbieżnie pierwszy dźwięk z `args` z pozostałymi dźwiękami z `args`:
- `args` postać `(note, ...)`, powinien być rozmiaru co najmniej 2:
- `note` postać podobna do `notes` z `chords notes`;
* `partition args` dzieli `args` na dwie grupy wedle danej funkcji:
- `args` powinno przyjąć formę `(funkcja, tablica())`
* `permute args` permutuje `args`:
- `args` tablica obiektów;
* `pgmchange args` analogicznie do `instrument args`;
* `play args` gra `args`:
- `args` mogą być to pojedyncze nuty, tablica nut oraz bloki kodu (nuty analogicznie jak w `chord notes`);
* `program_change args` analogicznie do `instrument args`;
* `range args` zwraca tablicę wartości liczbowych w podanych w `args` zakresie:
- `args` postać `stop`, `start stop` lub `start stop step`;
* `reverse args`  odwraca kolejność elementów `args`;
- `args` powinna być to tablica;
* `rotate args` przenosi na koniec tablicy wskazaną ilość elementów:
- `args` musi być postaci `liczba tablica`;
* `round value` zaokrągla wartość zgodnie z reguałmi matematyki:
- `value` musi być to wartość liczbowa;
* `shuffle args` tasuje elementy `args`:
- `args` powinna być to tablica;
* `sim` #TODO
* `sort args` sortuje elementy `args`:
- `args` powinna być to tablica;
* `try args` próbuje wykonać wszystkie bloki kodu poza ostatnim, a jeżeli w trakcie tej próby natrafi na błąd, wykonuje ostatni blok:
- `args` musi być to co najmniej jeden blok kodu Musique;
* `typeof variable` zwraca typ wskazanej `variable`;
* `uniq args` zwraca tablicę elementów, z której usunięto następujące po sobie powtórzenia:
- `args` powinna być to tablica;
* `unique args` zwraca tablicę elementów, z której usunięto powtórzenia:
- `args` powinna być to tablica;
* `up value` analogicznie do `down value`;
* `update args` aktualizuje element tablicy do nowej wartości:
- `args` postaci `tablica indeks wartość`;