Audacity: Özgürce ve Ücretsiz Dağıtılan Ses Düzenleme ve Kayıt Yazılımı

Reklam Politikası

Nyquist

  1. Nyquist ve Lisp Programlamaya Giriş
  2. Nyguist Programlama
  3. Nyquist Eklentileri Oluşturma

1.1.1 sürümünden itibaren Audacity, kendi içinde Nyquist programlama dili kullanılarak etki eklentileri yazmanıza olanak sağlamaktadır. VST ya da LADSPA eklentilerinin aksine, Nyquist eklentileri sıradan bir metin düzenleyici ile yazılabilir ve derlenmelerine gerek yoktur.

Nyquist Roger B. Dannenberg tarafından geliştirilerek, ses sentez ve analizi için tam bir yazılım geliştirme dili olması amaçlanmıştır. MIDI desteği, ses kaydetme ve oynatma, dosya giriş çıkış işlemleri, nesne yönelimli programlama, profiller ve hata ayıklama gibi özellikleri vardır. Audacity, Nyquist özelliklerinin, yalnızca basit Nyquist işlevlerini ve ses verisini işlemeyi sağlayan küçük bir bölümünü kullanır. Audacity Nyquist kodundaki hataları ayıklamak için bir özellik içermez. Bu nedenle karmaşık bir eklenti yazıyorsanız, Tam Nyquist sürümünü edinerek eklentiyi bunun üzerinde yazmanız ve daha sonra Audacity eklentisine dönüştürmeniz daha uygun ve kolay olabilir. Tam Nyquist sürümü, Carnegie Mellon University Bilgisayarlı Müzik Projesinden alınabilir:

Nyquist, Lisp ve daha yaygın kullanılan SAL yazım şekillerini destekler. Audacity 1.3.8 Beta öncesindeki sürümler yalnız Lisp yazım biçimini desteklerken, güncel Audacity 2.0 serisi hem Lisp hem SAL yazım biçimlerini destekler. Audacity ile kullanılacak eklentiler yazmak için, kullandığınız Audacity sürümüne uygun Nyquist Kitabını ve yazım şeklini seçin:

Audacity üzerinde basit eklentiler yazmak için Nyquist yazılımını indirmeniz şart değildir. Lisp ile çalışmak için tüm temel bilgileri ve 2.37 kullanım kitabını aşağıda bulabilirsiniz. SAL hakkında bilgi edinmek ve Audacity içindeki güncel Nyquist özelliklerini görmek için Wiki sayfasındaki Nyquist Eklentileri Referansı.

bölümüne bakabilirsiniz.

Lisp

Nyquist, Lisp üzerine geliştirilmiştir. Daha önce Lisp ile yazılım geliştirdiyseniz, bu bölümü atlayarak sonraki sayfaya geçebilirsiniz. Bu bölümde Lisp hakkında çok kısa bilgiler bulunur:

Lisp içinde (dolayısıyla Nyquist içinde), her şey, yalnız beyaz boşluklarla ayrılmış parantez içindeki birer ibare listesinden (kelimeler) oluşan bir S-ifadesi şeklindedir. S-ifadesinin ilk ibaresi her zaman işlevin adını gösterir ve diğer tüm ibareler bu işlevin argümanları olur. Basit bir örneğe bakarsak:

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

Örneği incelediğimizde, en dıştaki S-ifadesinin 3 üyesi olduğunu görürüz. Birincisi, setf, işlevin adı (ayar alanı için). setf bir değişkene bir değer atamak için kullanılır. (set ve setq gibi başka işlevler de vardır, ancak setf en güçlüsü olduğundan, örneklerimizde bunu kullanacağız.) setf ardından ayarlayacağımız değişkenin adı olan area gelir. Ardından, başka bir S-ifadesi olan ve bu değişkene atanacak olan değer gelir.

Lisp matematik işlevleri için özel işlemlere sahip değildir - bunların hepsi, tüm diğerleri gibi birer işlevdir ve önek gösterilimini kullanırlar. Burada işlevin (ya da işlemin) adı, argümanlarından önce gelir. Yani 3 üzeri 7 yazmak için 3*7 yerine (* 3 7) yazmanız gerekir. Nyquist içinde, expt (üs) işlevi ilk argümanın üssü olarak ikinci argümanı alır. Bu yüzden (* 3.14159 (expt radius 2)) ifadesi açıldığında, 3.14159 kere radius karesi ya da bir dairenin alanının formülü anlamına gelir.

Her defasında bütün ifadeyi yazmak yerine, dairenin alanını hesaplamak için bir işlev tanımlayalım ve gerektiğinde bunu çağıralım:

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

defun işlevi yeni bir işlev tanımlamak için kullanılır. Örnekte circlearea olan ilk argüman işlevin adıdır. İkinci argüman işlevde tanımlanacak argümanların listesidir - bu durum bir S-ifadesinin bir işlev çağrısı olarak yorumlanmadığı nadir durumlardan biridir. Son ifade işlevin değeridir. Artık bir dairenin r yarıçapından alanını hesaplamak istiyorsak, şunu yazmamız yeterli:

  (setf area (circlearea r))

Bir S-ifadesi yalnızca bir liste gösterilimidir. Lisp, listeleri hemen hemen herşeyi göstermek için kullanır (LISP adı LISt işlem dilinden gelmektedir). Bu nedenle listelerin nasıl değiştirileceğini bilmenin yardımı olur. Bir değişkene bir sayı listesini atamakla işe başlayalım Şunu yapamazsınız:

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

Bunun çalışmamasının nedeni, aksi söylenmedikçe, Nyquist'in bir S-ifadesini gördüğünde, bunu bir işlev olarak kabul etmesidir. "1" adında bir işlev bulunmadığından, (2 3 4 5) argüman olarak alınır ve bu durum bir hataya neden olur. Bir S-ifadesinin Lisp tarafından bir işlev olarak değil de olduğu gibi alınmasını istiyorsanız, tırnak içine alın. Nyquist içinde, bunu yapmak için ifadenin önüne şu şekilde bir tek tırnak koyun:

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

Nyquist ayrıca listeler oluşturmak için bir list işlevine sahiptir - bu işlev, bazı liste ögelerinin de işlev olması durumunda kullanışlıdır:

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

Bir listenin ögelerini almak için, first ve rest işlevlerini kullanabilirsiniz. (Geleneksel olarak bunlar car ve cdr olarak adlandırılır,ancak first ve rest olarak hatırlamak daha kolaydır. İki adlandırma da Nyquist tarafından desteklenir.) (first mylist) çıktısı 1, (rest mylist) çıktısı (2 3 4 5) listesidir. Yani listenin ikinci elemanı (first (rest mylist)) olur.

Lisp İşlevlerinin Listesi

Bu bölümde gerek duyabileceğiniz bazı basit Lisp işlevlerini bulabilirsiniz. Lisp / Nyquist işlevlerinin tam listesi için, Nyquist Sürüm 2.37 Referans Kitabına bakabilirsiniz.

Dikkat: Nyquist içinde simgelerde (değişken adları ve işlev adları gibi) büyük küçük harf ayrımı yoktur. İçsel olarak büyük harfe dönüştürülürler.

Matematik İşlevleri

(+ a b)toplama
(- a b)çıkartma
(* a b)çarpma
(/ a b)bölme
(truncate a b)aşağı tam sayıya yuvarla
(float a b)tam sayıdan kayan noktaya
(rem a b c ...)kalan
(min a b c ...)en düşük
(max a b c ...)en yüksek
(abs a)mutlak değer
(random n)1 ve n-1 arasında rasgele tam sayı
(sin a b)sinüs
(cos a b)kosinüs
(tan a b)tanjant
(expt a b)üs (a, b'nin üssü)
(sqrt a b)kare kök
(< a b)a, b'den küçüktür sınaması
(<= a b)a, b'den küçük ya da eşittir sınaması
(> a b)a, b'den büyüktür sınaması
(>= a b)a, b'den büyük ya da eşittir sınaması
(= a b)eşitlik sınaması
(/= a b)eşit değil sınaması

Liste İşlevleri

(first l)bir listenin ilk elemanı (car)
(rest l)listenin geri kalanı (cdr)
(reverse l)bir listeyi ters çevir
(list a b ...)bir liste oluştur
(append l1 l2)iki listeyi ekle
(length l)bir listenin uzunluğu
(maplist function l)listedeki her elemana bir işlev uygula

Denetim

(if expr expr1 expr2)Eğer expr doğruysa, expr1'i, değilse expr2'yi uygula

Sonraki: Nyquist Programlama