Audacity: Darmowy edytor dźwięku i oprogramowanie do nagrywania

Lista z ogłoszeniami

Nyquist

  1. Wprowadzenie do programowania w Nyquist i Lisp
  2. Programowanie w Nyquist
  3. Tworzenie wtyczek Nyquist

Począwszy od wersji 1.1.1, Audacity pozwala na używanie języka programowania Nyquist do tworzenia własnych wtyczek do Audacity. W przeciwieństwie do VST i LADSPA, wtyczki Nyquist mogą być tworzone przy użyciu zwykłego edytora tekstowego i nie muszą byc kompilowane.

Nyquist został napisany przez Rogera B.Dannenberg'a i miał być pełnym językiem programowania do analizy dźwięku, ze wsparciem dla MIDI, odtwarzania i nagrywania dźwięku, We/Wy pliku, programowania obiektowego, profilowania i wielu innych. Audacity używa tylko pewnych funkcji Nyquist'a, które pozwalają na przetwarzanie danych dźwięku. Audacity nie zawiera żadnego wsparcia dla poprawiania kodu Nyquist, więc jeśli próbujesz stworzyć skomplikowaną wtyczkę, będzie ci łatwiej uzyskać pełną wersję Nyquist'a i tam rozwijać, a następnie przetworzyć to jako wtyczkę Audacity. Nyquist'a można uzyskać z projektu Carnegie Mellon University Computer Music Project:

Nyquist supports both a Lisp syntax and a more conventional syntax called SAL. Audacity versions prior to 1.3.8 only support Lisp, but the current Audacity 2.0 series supports both Lisp and SAL. To write plug-ins for use with Audacity, choose the appropriate Nyquist Manual for your version of Audacity and preferred syntax:

Note that you don't need to download Nyquist in order to write simple plug-ins to use with Audacity. All the basic instructions you need to work with Lisp and the 2.37 Manual are below. If you want to explore SAL as well, and for the latest Nyquist features in Audacity, see Nyquist Documentation on the Wiki.

Linki

Nyquist jest oparty na Lisp. Jeśli programowałeś już w Lisp, możesz ominąć tą sekcję i przejść bezpośrednio do następna strona. W innym razie, oto krótkie wprowadzenie do Lisp:

W Lisp (jak również w Nyquist), wszystko jest S-Wyrażeniem, które jest listą wyrażeń (wyrazów) oddzielonych przerwą i zawartych w nawiasach. Nazwa funkcji jest zawsze pierwszym wyrażeniem w S-Wyrażeniu, a wszystkie pozostałe wyrażenia są argumentami tej funkcji. Oto prosty przykład:

  (setf area (* 3.14159 (expt radius 2)))

Rozłóżmy ten przykład. Pierwsze S-Wyrażenie posiada trzech członków. Pierwszy, setf, jest nazwą funkcji. setf jest użyte do przyznania wartości zmiennej. (Istnieją podobne funkcje, jak set i setq, lecz setf jest najbardziej potężna, więc jest tą, którą używamy w naszych przykładach.) Po setf pojawia się area, która jest nazwą zmiennej, którą określimy. Następnie przychodzi wartość do przyznania do zmiennej, którą w tym przypadku jest kolejne S-Wyrażenie.

Lisp nie posiada żadnych specjalnych operatorów dla funkcji matematycznych - wszystkie są funkcjami jak wszystko inne, używając prefixa notacji, gdzie nazwa funkcji (lub operatora) przychodzi przed argumentami. Więc zamiast 3*7 dla produktu z 3 i 7, w Lisp napisałbyś (* 3 7). W Nyquist, expt (exponent) funkcja podnosi swój pierwszy argument do mocy drugiego argumentu. Dlatego (* 3.14159 (expt radius 2)) znaczy 3.14159 razy kwadrat z radius, lub formuła obszaru koła.

Zamiast wpisywać całe wyrażenie za każdym razem, zdefiniujmy funkcję dla obszaru koła, którą możemy w każdej chwili użyć:

  (defun circlearea (radius) (* 3.14159 (expt radius 2)))
  

Funkcja defun jest używana do zdefiniowania nowej funkcji. Pierwszy argument jest nazwą funkcji, w tym przypadku circlearea. Drugi argument jest listą argumentów dla funkcji do zdefiniowania - to jeden z niewielu przypadków, gdy masz S-Wyrażenie, które nie jest interpretowane jako przywołanie funkcji. Ostatnie wyrażenie jest wartością funkcji. Teraz jeśli chcemy obliczyć obszar koła promienia r , potrzebujemy obliczyć:

  (setf area (circlearea r))

S-Wyrażenie jest reprezentacją listy. Lisp używa listy do reprezentowania prawie wszystkiego (nazwa LISP pochodzi z LISt Processing Language), więc przydatne jest, aby wiedzieć, jak manipulować listami. Rozpocznijmy od przyznania listy liczb do zmiennej. Nie możesz zrobić czegoś takiego:

  (setf mylist (1 2 3 4 5))  <--  error!
  

Powodem, dla którego to nie działa jest to, że gdy Nyquist widzi S-Wyrażenie, próbuje zewaluować to jako funkcję jeśli nie podasz innej możliwości. Skoro nie ma funkcji nazwanej "1" funkcja bierze argumenty (2 3 4 5), a to wygeneruje błąd. Aby powiedzieć Lisp-owi, że chcesz traktować S-wyrażenie dosłownie, a nie traktować tego jako funkcję, zacytuj je.

  (setf mylist \'(1 2 3 4 5))
  

Nyquist posiada również funkcjęlist, której można używać do konstruwania list - jest to użyteczne, jesli niektóre z elementów na liście są funkcjami:

  (setf mylist (list 1 2 3 4 (sqrt 25)))

Aby usunąć elementy z listy, można użyć funkcjifirst oraz rest. (Tradycyjnie były one nazywane car oraz cdr, lecz first oraz rest są łatwiejsze do pamiętania. Oba zestawy nazw są wspierane przez Nyquist.) Poziom wyjściowy (first mylist) jest 1, a poziom wyjściowy (rest mylist) jest lista (2 3 4 5). Więc drugi element listy jest (first (rest mylist)).

Funkcje w Lisp

Oto lista niektórych prostych funkcji lisp, które mogą się przydać. Aby uzyskać pełną listę funkcji Lisp / Nyquist, zajrzyj do Podręcznika Nyquist wersja 2.37.

Uwaga: Symbole w Nyquist (jak nazwy zmiennych i funkcji) można pisać z małej lub dużej litery. Zostaną one przekonwertowane na dużą literę automatycznie.

Funkcje matematyczne

(+ a b)Edytowanie
(- a b)odejmowanie
(* a b)Kompilacja
(/ a b)podział
(truncate a b)wyrównaj do liczby całkowitej (floor)
(float a b)liczba całkowita
(rem a b c ...)pozostałość
(min a b c ...)minimum
(max a b c ...)maximum
(abs a)wartość absolutna
(random n)przypadkowa liczba całkowita pomiędzy 1 i n-1
(sin a b)sinus
(cos a b)Połącz
(tan a b)tangens
(expt a b)eksponent (a do potęgi b)
(sqrt a b)pierwiastek kwadratowy
(< a b)testuj dla mniejszej niż b
(<= a b)test dla a mniejszego lub równego b
(> a b)test dla a większego od b
(>= a b)test dla a większego lub równego b
(= a b)test na równość
(/= a b)test na nierówność

Lista funkcji

(first l)pierwszy element na liście
(rest l)reszta listy
(reverse l)deweloper
(list a b ...)Skontaktuj się z nami
(append l1 l2)dodaj dwie listy
(length l)długość listy
(maplist function l)dodaj funkcję do każdego elementu listy

Współpracownicy

(if expr expr1 expr2)jeśli expr jest prawdą, ewaluuj expr1, w przeciwnym razie ewaluuj expr2

Programowanie w Nyquist