1 Nyquist内置函数-杂项函数
1.1 杂项函数
这些函数对于日常使用来说都是安全且推荐的。
1.1.1 to-mono(sound) [SAL]
(to-mono sound) [LISP]
如果 sound 是多声道声音,返回其所有声道的总和;如果 sound 本身就是单声道声音,则直接返回,不做改变。有关声道求和的更多详细信息,请参见 sim(“组合与时序结构”部分 )。
; 假设已有一个多声道声音对象multi_channel_sound
(setq mono_sound (to-mono multi_channel_sound))
; 此时mono_sound就是转换后的单声道声音,可进行后续处理,比如播放等操作
1.1.2 db-to-linear(x) [SAL]
(db-to-linear x) [LISP]
将 x 从分贝转换为线性值。0dB 转换为 1,20dB 表示线性因子为 10。如果 x 是声音,会对每个样本进行转换并返回一个声音;如果 x 是多声道声音,每个声道都会进行转换并返回一个多声道声音(数组)。注意:对于声音,转换仅对实际样本进行,不对声音起始前和结束后的隐式零值进行转换。采样率、起始时间等信息取自 x。
1.1.3 db-to-vel(x [, float]) [SAL]
(db-to-vel x [float]) [LISP]
使用将 -60dB 映射到 1 且 0dB 映射到 127 的规则,将 x 从分贝转换为 MIDI 速度。MIDI 速度与幅度的平方根成线性关系。float 的默认值为 nil,结果是一个截断在 1 - 127 合法范围内的定点数;但如果提供了非 nil 值,则结果是一个不进行舍入或截断的浮点数。输入参数必须是定点数或浮点数,不允许是声音。
1.1.4 follow(sound, floor, risetime, falltime, lookahead) [SAL]
(follow sound floor risetime falltime lookahead) [LISP]
一种用于压缩器和限制器功能的包络跟随器,旨在生成一个平滑信号,跟随输入信号的峰值。该函数的基本目标是产生一个代表均方根(RMS)测量幅度的平滑信号。输入的第一个参数是低采样率控制速率信号(表示局部RMS测量)。floor 是最小输出值;risetime 是输出从 floor 上升到 1.0 所需的时间(秒);falltime 是输出从 1.0 下降到 floor 所需的时间(秒);lookahead 是提前查看峰值并提前开始下降的时间(秒)。算法按以下方式工作:根据 lookahead 的值预测输出信号的变化量,根据 risetime 增加,根据 falltime 减少。如果下一个输入样本在该范围内,该样本即为输出。如果下一个输入样本太大,算法会回溯到下一个必要样本,计算一个包络样本,使其上升到 risetime 以达到新值。算法只会在 lookahead 的范围内回溯。如果回溯不够,就会进行最终的前向传递,计算一个上升信号,至少与输入信号一样快,直到与输入信号相交。如果输入信号下降速度比 falltime 指示的速度快,输出下降速率将受 falltime 限制,当输出达到 floor 时停止下降。该算法在输入急剧上升时可能需要对缓冲区进行两次遍历,所以速度不是特别快。使用短缓冲区和低采样率时,这一点会更明显。有关相关帮助生成低采样率输入的函数,请参见 snd-avg,关于相关滤波器,请参见“滤波器”部分 。
1.1.5 gate(sound, lookahead, risetime, falltime, floor, threshold) [SAL]
(gate sound lookahead risetime falltime floor threshold) [LISP]
生成一个用于噪声门的指数上升和下降包络。当信号下降到 threshold 以下且持续时间超过 lookahead(以秒为单位的浮点数)时,衰减开始。(信号在越过 threshold 时开始下降,而不是在 lookahead 之后。)衰减持续进行,直到值达到 floor(一个浮点数),此时衰减停止,输出值保持恒定。在信号越过 threshold 之前,每个持续时间(衰减)或在衰减停止时(如果信号再次超过 threshold),输出值将在信号越过 threshold 时上升到 1.0。由于内部提前查看,信号实际上在越过 threshold 之前就开始上升。上升是恒定速率的指数变化,设置为从 floor 上升到 1.0 的时间为 risetime。类似地,下降也是恒定速率的指数变化,从 1.0 下降到 floor 的时间为 falltime。
1.1.6 noise-gate(sound [, lookahead, risetime, falltime, floor, threshold] [, rms: use-rms, link: link-option]) [SAL]
(noise-gate sound [lookahead risetime falltime floor threshold] [rms: use-rms:link link-option]) [LISP]
一种基于门的简单噪声门实现。除 snd 外,所有参数都是可选的,默认值为 lookahead: 0.5,risetime: 0.02,falltime: 0.5,floor: 0.01,threshold: 0.01。关键字参数 :rms 和 :link 也是可选的,默认值分别为 use-rms: NIL(假)和 link-option: T(真)。结果是输入声音,根据上述阈值段进行衰减。注意:无论是否使用 use-rms,都会从声音的所有声道计算一个最大值,并用于控制噪声门。如果 link-option 不为 NIL,且输入声音是多声道的,则会计算并应用一个单一的门到所有声道。如果噪声门的阈值被任何声道超过,噪声门就会打开(即无论是否使用 use-rms,都会从所有声道计算一个最大值,并用于控制噪声门)。
1.1.7 hz-to-step(freq) [SAL]
(hz-to-step freq) [LISP]
返回 freq(以赫兹为单位,也可以是一个声音)对应的音阶步数,结果与参数类型相同。另请参见 step-to-hz(如下)。
1.1.8 linear-to-db(x) [SAL]
(linear-to-db x) [LISP]
将 x 从线性值转换为分贝值。1 转换为 0,0 转换为 -INF(一种特殊的IEEE浮点值)。因子 10 表示 20dB 的变化。如果 x 是声音,会对每个样本进行转换并返回一个声音;如果 x 是多声道声音,每个声道都会进行转换并返回一个多声道声音(数组)。注意:对于声音,转换仅对实际样本进行,不对声音起始前和结束后的隐式零值进行转换。采样率、起始时间等信息取自 x。
1.1.9 linear-to-vel(x [, float]) [SAL]
(linear-to-vel x [float]) [LISP]
使用将 -60dB 映射到 1 且 0dB 映射到 127 的规则,将 x 从线性幅度转换为 MIDI 速度。MIDI 速度与幅度的平方根成线性关系。float 的默认值为 nil,结果是一个截断在 1 - 127 合法范围内的定点数;但如果提供了非 nil 值,则结果是一个不进行舍入或截断的浮点数。输入参数必须是定点数或浮点数,不允许是声音。
1.1.10 log(x) [SAL]
(log x) [LISP]
计算 x(一个浮点数)的自然对数。(有关对信号进行操作的版本,请参见 s-log 。)
1.1.11 set-control-srate(rate) [SAL]
(set-control-srate rate) [LISP]
通过设置 *default-control-rate* 并重新初始化环境,将控制信号的默认采样率设置为 rate。在任何合成函数中请勿调用此函数(请参见“控制速率绝对值转换”部分 )。
1.1.12 set-sound-srate(rate) [SAL]
(set-sound-srate rate) [LISP]
通过设置 *default-sound-rate* 并重新初始化环境,将音频信号的默认采样率设置为 rate。在任何合成函数中请勿调用此函数(请参见“声音速率绝对值转换”部分 )。
1.1.13 set-pitch-names() [SAL]
(set-pitch-names) [LISP]
初始化音高变量(c0,cs0,d0,ds0,…,b0,c1,…,b7)。A440(默认调音)由音阶步数 69.0 表示,因此变量 a4(第四八度的A)设置为 69.0。你可以通过将 *A4-Hertz* 设置为一个值(以赫兹为单位)并调用 set-pitch-names 来重新初始化音高变量,从而改变调音。请注意,这将导致非整数音阶步数值,它不会拉伸或映射音分的值到频率。没有内置的规定用于处理非十二平均律音阶,但用户可以编写或计算任何所需的分数音阶步数值。
1.1.14 step-to-hz(pitch) [SAL]
(step-to-hz pitch) [LISP]
返回 pitch(一个音阶步数或表示随时间变化的音阶步数的声音类型)对应的赫兹频率。如果 pitch 是一个数,结果是一个浮点数;如果 pitch 是一个声音,结果是一个声音。另请参见 hz-to-step(如上)。
1.1.15 get-ioi(dur) [SAL]
(get-ioi dur) [LISP]
获取从局部时间 0 开始到局部时间 dur 结束的某事物的时间间隔。为方便起见,*rslt* 设置为对应局部时间 0 的全局时间。请注意,在此计算中不考虑 sustain。目的是计算序列中当前事件之后下一个事件的标称起始时间(即考虑当前事件的逻辑停止时间,而不是实际持续时间)。
1.1.16 get-duration(dur) [SAL]
(get-duration dur) [LISP]
获取从局部时间 0 开始到局部时间 dur 结束的某事物的实际持续时间,计算时考虑 sustain。为方便起见,*rslt* 设置为对应局部时间 0 的全局时间。另请参见 get-ioi(如上)。
1.1.17 get-loud() [SAL]
(get-loud) [LISP]
获取 *loud* 环境变量的当前值。如果 *loud* 是一个信号,则在局部时间 0 对其求值并返回一个数(浮点数)。
1.1.18 get-sustain() [SAL]
(get-sustain) [LISP]
获取 *sustain* 环境变量的当前值。如果 *sustain* 是一个信号,则在局部时间 0 对其求值并返回一个数(浮点数)。
1.1.19 get-transpose() [SAL]
(get-transpose) [LISP]
获取 *transpose* 环境变量的当前值。如果 *transpose* 是一个信号,则在局部时间 0 对其求值并返回一个数(浮点数)。
1.1.20 get-warp() [SAL]
(get-warp) [LISP]
获取与 *warp* 环境变量当前值对应的函数。为提高效率,*warp* 存储为三个部分的表示:shift、scale 因子和一个连续的扭曲函数。get-warp 检索一个将逻辑时间映射到实际时间的信号,该信号将 *warp* 的三个部分的信息组合成一个单一信号。如果连续的扭曲函数部分不存在(这表明时间扭曲主要是 at 和 stretch 变换的简单组合),则不会引发错误。此函数主要供内部使用。将来,get-warp 可能会重新实现,始终返回一个信号且不会引发错误。
1.1.21 local-to-global(local-time) [SAL]
(local-to-global local-time) [LISP]
根据当前环境将乐谱(局部)时间转换为实际(全局)时间。
1.1.22 round(x) [SAL]
(round x) [LISP]
将 x 四舍五入到最接近的整数。如果 x 为 n + 0.5,其中 n 是整数,则返回 n + 1,即使 n 为负数。
1.1.23 snd-set-latency(latency) [SAL]
(snd-set-latency latency) [LISP]
将Nyquist播放声音时请求的延迟设置为 latency(一个浮点数),返回先前的值。默认值为 0.3 秒。为避免出现杂音,延迟应大于垃圾回收和消息打印所需的时间,以及Nyquist外部的其他系统活动时间。
1.1.24 vel-to-db(x) [SAL]
(vel-to-db x) [LISP]
使用将MIDI速度 1 映射到 -60dB 且 127 映射到 0dB 的规则,将 x 从MIDI速度转换为分贝值。幅度与MIDI速度的平方成正比。输入 x 可以是定点数或浮点数,但不能是声音,结果是一个浮点数。
1.1.25 vel-to-linear(x) [SAL]
(vel-to-linear x) [LISP]
使用将MIDI速度 1 映射到 -60dB(0.001)且 127 映射到单位增益的规则,将 x 从MIDI速度转换为线性幅度比。幅度与MIDI速度的平方成正比。输入 x 可以是定点数或浮点数,但不能是声音,结果是一个浮点数。
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.


















