Audacity: Bezplatan zvučni uređivač i snimač

Pravila o oglašivanju

Nyquist

  1. Uvod u Nyquist i Lisp programiranje
  2. Programiranje u Nyquistu
  3. Stvaranje Nyquistovih dodataka

Počevši s inačicom 1.1.1, Audacity vam dopušta porabu Nyquistova programskoga jezika za pisanje vaših dodatnik učinaka za Audacity. Za razliku od VST-ovih i LADSPA-ovih dodataka, Nyquistovi dodatci mogu sepisati porabom običnih tekstovnih uređivača i ne moraju se kompilirati.

Nyquist je napisao Roger B. Dannenberg te je bio osmišljen kao cjelovit programski jezik za spajanje i raščljanjivanje zvuka s potporom za MIDI, potporom za snimanje i sviranje, za datoteke I/O, objektno programiranje, profiliranje i više. Audacity rabi samo dio Nyquistovih mogućnosti, često male radnje koje su korisne za obradbu zvuka. Audacity nema nikakvu potporu za progled (debug) Nyquistova koda, pa ako pokušavati napisati složen priključak, možda ipak pokušajte raditi s cjelovitom inačicom Nyquista pa potom prebacite priključak u Audacity. Nyquist je dostupan kod Carnegie Mellon University Computer Music Project:

Nyquist podupire Lispovu sintaksu i još udobniju sintaksu pod imenom SAL. Audacityjeve inačice prije 1.3.8 podupirale su samo Lisp, ali trenutačna 2.0 podupire Lisp i SAL. Za pisanje dodataka za porabu s Audacityjem, izaberite prikladni Nyquistov vodič za vašu inačicu Audacityja i jednostavniju sintaksu:

Napominjem da ne trebate skinuti Nyquist kako biste pisali jednostavne dodatke za Audacity. Sve osnovne upute za rad s Lispom i 2.37 vodič je dolje. Ako želite istražiti i SAL, i za najnovije Nyquistove značajke u Audacityju,pogledati Nyquistova dokumentacija na Wikipediji.

Lisp

Nyquist je temeljen na Lispu. Ako ste programirali u Lispu, preletite preko ovoga dijela ili odmah odite na sljedeću stranicu. Inače, tu je iznimno kratak uvod u Lisp:

U Lispu (stoga i Nyquistu), sve je S-Izraz (S-Expression), što je samo popis značaka (riječi) odvojenih razmakom i zatvorenih okruglim zagradama. Ime funkcije je uvijek prva značka S-Izraza, i sve ostale značke su brojevi priloženi toj funkciji. Jednostavan primjer:

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

Razložimo ovaj primjer. Skrajnji S-izraz ima tri člana. Prvi, setf, ime je funkcije (stoji za set-field). setf je rabljen za prilaganje neke vrijednosti nepoznanici. (Postoje i slične funkcije, kao set i setq, ali setf je najsnažnija, dakle tu ćemo rabiti u našim primjerima.) Poslije setf dolazi area, što je ime nepoznanice koju ćemo postaviti. Nakon toga dolazi vrijednost koja se prilaže toj nepoznanici koja je, u ovom slučaju, još jedan S-izraz.

Lisp nema nikakve posebne operatore za matematičke funkcije - sve su to funkcije kao i ostalo koje rabe predmetak bilješku gdje ime funkcije (ili operatora) dolazi prije svojih brojeva. Dakle, umjesto 3*7 za umnožak brojeva 3 i 7, u Lispu biste napisali (* 3 7). U Nyquistu, expt (ekponentna) funkcija podiže prvi broj na eksponent koji je zadan drugim brojem. Dakle (* 3.14159 (expt radius 2)) znači 3.14159 puta korijen iz radius, ili formula za površinu kruga.

Da ne tipkamo cijeli izraz svaki put, definirajmo funkciju za površinu kruga kako bismo ga mogli pozvati kad god nam zatreba:

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

Funkcija defun je rabljena za definiranje nove funkcije. Prvi član je ime te funkcije, u ovom slučaju circlearea. Drugi član je popis članova potrebnih za definiciju funkcije - to je jedan od nekoliko slučajeva gdje imate S-izraz koji nije protumačen kao poziv funkcije. Konačno, zadnji izraz je vrijednost funkcije. Sad, ako želimo izračunati površinu kruga polumjera r, moramo samo izračunati:

  (setf area (circlearea r))

S-izraz je samo predodžba popisa. Lisp rabi popis za predočivanje skoro svega (ime LISP dolazi od LISt Processing language), pa je korisno znati kako upravljati popisima. Počnimo s dodjeljivanjem popisa brojeva nepoznanici. To baš i ne možete napraviti:

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

Razlog zašto to ne radi je jer kad god Nyquist vidi S-izraz, on ga uzima kao funkciju ako mu ne kažete drugačije. Kako ne postoji funkcija nazvana "1" koja rabi član (2 3 4 5), to će stvoriti pogrješku. Ako želite poručiti Lispu da želite uzeti S-izraz doslovno, a ne kao funkcija, navedite ga (citirajte). U Nyquistu, možete navesti popis stavljanjem jednostrukih navodnika prije, kao tu:

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

Nyquist također opskrbljuje list funkciju koju možete rabiti za gradnju popisa - ovo je korisno ako su neki članovi popisa funkcije:

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

Za micanje stvari s popisa, rabite first i rest funkcije. (Obično, one se zovu car i cdr, ali first i rest je puno lakše upamtiti. Oba para imena podupire Nyquist.) Izlaz od (first mylist) je 1, a izlaz od (rest mylist) je popis (2 3 4 5). Dakle, drugi član popisa je (first (rest mylist)).

Veza Lispovih funkcija

Ovdje je popis nekih osnovnih Lispovih funkcija koje će vam možda zatrebati. Za potpun popis Lisp / Nyquist funkcija, pogledati Nyquist inačicu 2.37 referencijskoga vodiča.

Napomena: Simboli u Nyquistu (kao imena nepoznanica i funkcija) nisu osjetljivi na velika-mala slova. Oni se unutra prevode u velika.

matematičke funkcije

(+ a b)zbrajanje
(- a b)oduzimanje
(* a b)množenje
(/ a b)dijeljenje
(truncate a b)zaokruži dolje na cijeli broj (pod)
(float a b)cijeli broj u eksponentni zapis
(rem a b c ...)ostatak
(min a b c ...)najmanja vrijednost
(max a b c ...)najveća vrijednost
(abs a)apsolutna vrijednost
(random n)nasumičan cijeli broj između 1 i n-1
(sin a b)sinus
(cos a b)kosinus
(tan a b)tangens
(expt a b)eksponent (a na b-tu)
(sqrt a b)korijen
(< a b)ispit za a manji od b
(<= a b)ispit za a manji ili jednak b
(> a b)ispit za a veći od b
(>= a b)ispit za a veći ili jednak b
(= a b)ispit jednakosti
(/= a b)ispit nejednakosti

Popis funkcija

(first l)prvi član popisa (car)
(rest l)ostatak popisa (cdr)
(reverse l)obrni popis
(list a b ...)izgradi popis
(append l1 l2)priloži dva popisa
(length l)dužina popisa
(maplist function l)primjeni funkciju na svaki član popisa

Upravljač

(if expr expr1 expr2)ako expr (izraz) je istinit, ocijeni expr1, inače ocjeni expr2

Dalje: Programiranje u Nyquistu