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.