1 Nyquist内置函数-振荡器函数
1.1 振荡器
- osc(pitch [, duration, table, phase]) [SAL]
(osc pitch [duration table phase]) [LISP]
返回一个声音,该声音是在给定持续时间内,以pitch
振荡波形表,从phase
(以度为单位)开始。默认值为:duration: 1.0
(秒),table: *table*
,phase: 0.0
。*table*
的默认值是一个正弦波。持续时间由*warp*
和*sustain*
拉伸。幅度名义上为1,但由*loud*
(以dB为单位)缩放。起始时间是逻辑时间0,由*warp*
变换,采样率为*sound-rate*
。时间扭曲的效果仅扭曲起始时间和结束时间;信号具有恒定的未扭曲频率。
注意1:table
是一个3元素列表。有关详细说明,请参见maketable
。
注意2:在当前实现中,假定输出声音是周期性的。请参见snd-down
和snd-up
以将一次性声音重采样到所需采样率。osc
的未来版本将处理这两种情况。
注意3:调用osc
时,会为波形表分配内存,样本从声音(作为table
参数的列表的第一个元素)复制到内存中。osc
的每个实例都有波形表的私有副本,因此在某些情况下,例如在大型合成器中使用许多osc
实例时,总存储量可能会很大。在某些情况下,使用snd-flatten
(请参见“访问和创建声音”部分 )使声音完全实现可能是有意义的,之后osc
及其波形表内存可以通过垃圾回收回收。部分函数(见下文)不需要私有波形表,并且不会占用太多空间。 - partial(pitch, env) [SAL]
(partial pitch env) [LISP]
返回指定音高的正弦波;声音乘以env
。起始时间和持续时间取自env
,当然会受到变换的影响。采样率为*sound-rate*
。此部分函数比osc
更快。 - sine(pitch [, duration]) [SAL]
(sine pitch [duration]) [LISP]
返回指定音高的正弦波。采样率为*sound-rate*
。就变换而言,此函数与osc
类似。sine
函数比osc
更快。 - hzosc(hz [, table, phase]) [SAL]
(hzosc hz [table phase]) [LISP]
返回一个声音,该声音是以hz
振荡波形表,从phase
度开始。默认波形表为*table*
,默认相位为0.0度。默认持续时间为1.0,但会像osc
中那样拉伸(见上文)。hz
参数可以是一个声音,在这种情况下,结果的持续时间是hz
的持续时间。采样率为*sound-rate*
。 - osc-saw(hz) [SAL]
(osc-saw hz) [LISP]
返回指定频率(单位为赫兹)的锯齿波形。采样率为*sound-rate*
。与hzosc
一样,hz
参数可以是一个声音(见上文)。 - osc-tri(hz) [SAL]
(osc-tri hz) [LISP]
返回指定频率(单位为赫兹)的三角波形。采样率为*sound-rate*
。与hzosc
一样,hz
参数可以是一个声音(见上文)。 - osc-pulse(hz, bias [, compare-shape]) [SAL]
(osc-pulse hz bias [compare-shape]) [LISP]
返回指定频率(单位为赫兹)的可变宽度脉冲波形。bias
参数控制脉冲宽度,应在 -1 到 +1 之间,对应脉冲宽度从0%(全关)到100%(全开)。当bias
为零时,生成方波。bias
可以是一个声音。 - buzz(n, pitch, modulation) [SAL]
(buzz n pitch modulation) [LISP]
返回具有n
个等幅度谐波且总幅度为1.0的声音,使用一个已知函数。如果n
(整数)小于1,则设置为1。如果n
太大,会出现混叠。pitch
指定基频(一个数,以音阶步数为单位),假设无调制。持续时间由声音调制的持续时间决定,声音调制是一个以赫兹表示的频率调制项(请参见“振荡器”部分 )。负频率会被正确处理。采样率为*sound-rate*
。 - pluck(pitch [, duration, final-amplitude]) [SAL]
(pluck pitch [duration final-amplitude]) [LISP]
返回一个使用修改后的Karplus-Strong弹拨弦算法在指定音高创建的声音。在duration
秒内,幅度从约1.0衰减到约final-amplitude
。默认值是在1秒内衰减到0.001(-60dB)。采样率为*sound-rate*
。 - siosc(pitch, modulation, tables) [SAL]
(siosc pitch modulation tables) [LISP]
通过对一系列周期波形进行插值来返回构建的声音。频率由pitch
给出(以半音为单位),向其添加调制信号(单位为赫兹),与fmosc
完全一样。tables
指定一系列波形,形式为:(table0 time1 table2... timeN tableN)
,其中每个table
是表示一个周期的声音。每个time
是从起始时间开始测量的时间间隔。时间由名义持续时间(使用(local-to-global (get-sustain))
计算)缩放。请注意,这意味着线性拉伸而不是插值或断点的连续时间扭曲。起始时间的波形是table0
,在time1
之后(按上述方式缩放)是table1
,依此类推。持续时间和逻辑停止时间由调制给出。如果调制短于timeN
,则不使用完整的波形序列。如果modulation
长于timeN
,则在timeN
之后使用tableN
而不进行进一步插值。 - sampler(pitch, modulation [, sample, npoints]) [SAL]
(sampler pitch modulation [sample npoints]) [LISP]
返回一个声音,该声音通过从开头读取一个样本,然后拼接相同声音的副本到结尾来构建。pitch
和modulation
参数的用法与上述fmosc
中相同。可选的sample
(默认为2048点正弦波)是以下形式的列表:(sound pitch-number loop-start)
,其中第一个元素是包含样本的声音,第二个是样本的音高,第三个元素是循环点的时间。如果循环点不在声音的边界内,则设置为零。可选的npoints
参数指定用于样本插值的点数。目前此参数默认为2,仅实现2点(线性)插值。可以对负频率进行调制。请注意,循环点可能是虚构的。采样率为*sound-rate*
。
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.