1 Nyquist內置函數-概述
本章提供奈奎斯特(Nyquist)語言參考。操作按功能和抽象級別分類。奈奎斯特在兩個重要級別上實現:“高級”級別支持行為抽象,這意味著像 stretch
和 at
這樣的操作可以應用。這些函數是典型用戶期望使用的,并且大多數用XLISP編寫。
“低級”原語直接對聲音進行操作,但不涉及環境變量(如 *warp*
等)。大多數這些低級函數的名稱以 “snd - ” 開頭。一般來說,程序員應避免使用任何帶 “snd - ” 前綴的函數。相反,應使用 “高級” 函數,它們了解環境并能做出適當反應。高級函數的名稱沒有像低級函數那樣的前綴。
有一些直接應用于聲音(而非行為)的低級操作,對于日常使用相對 “安全”,這些已做標注。
奈奎斯特使用線性頻率和十二平均律音高數字來指定重復率。頻率始終以每秒周期數(赫茲)指定,音高數字,也稱為 “音階步長”,是十二平均律音階中的浮點數字,其中60 = 中央C,61 = C#,61.23 是C# 加上23音分等。從音高數字到頻率的映射是標準指數轉換,并且允許使用分數音高數字:
[頻率 = 440 * 2^{(\text{音高} - 69)/12}]
有許多預定義的音高名稱。默認情況下,這些按十二平均律調音,A4 = 440Hz,但也可以更改(見“預定義常量”部分)。
1.1 聲音
在奈奎斯特中,聲音是一種基本數據類型。聲音可以像字符串、原子、數字和其他數據類型一樣被創建、作為參數傳遞、進行垃圾回收、打印以及賦值給變量。
1.2 什么是聲音?
聲音有5個組成部分:
srate
- 聲音的采樣率。samples
- 樣本。signal-start
- 第一個樣本的時間。signal-stop
- 最后一個樣本結束的時間。logical-stop
- 聲音在邏輯上結束的時間,例如,一個聲音可能在衰減開始時結束。該值默認為signal-stop
,但也可以設置為任意值。
似乎應該有 logical-start
來指示聲音的邏輯或感知起始點,同時也應該有 logical-stop
來指示聲音的邏輯結束點。但實際上,只需要 logical-stop
就夠了;這個屬性用于告知下一個聲音何時開始,以形成聲音序列。在這方面,奈奎斯特的聲音具有不對稱性:通過將每個聲音的邏輯起始點與前一個聲音的 logical-stop
對齊,可以在時間上向前計算聲音序列,但無法 “向后” 計算,即無法將每個聲音的邏輯結束點與后續聲音的邏輯起始點對齊。這種不對稱性的根源在于,當我們調用一個行為時,我們指定的是起始時間,而該行為的結果會告訴我們它的邏輯持續時間。不存在一種方法可以在調用行為時直接指定結束時間(腳注3)。
注意:無法強制對 logical-stop
進行預期的 “感知” 解釋。就奈奎斯特而言,這些只是用于在各種控制結構中引導聲音對齊的數字。
1.2.1 多聲道聲音
多聲道聲音由Lisp語言的聲音數組表示。創建聲音數組時,XLISP的 vector
函數很有用。大多數奈奎斯特低級函數(以 snd-
開頭的函數)并不適用于多聲道聲音,而大多數高級函數則可以處理多聲道聲音。
作者聲明:本文用于記錄和分享作者的學習心得,可能有部分文字或示例來自AI平臺,如:豆包、DeepSeek(硅基流動)(注冊鏈接)等,由于本人水平有限,難免存在表達錯誤,歡迎留言交流和指教!
Copyright ? 2022~2025 All rights reserved.