为Audacity编写Nyquist插件比较简单,创建一个带有“.ny”后缀的文本文件,然后在里面写上需要的Nyquist代码即可。当然需要一些注释来告诉Audacity一些信息,比如版本和类型。编写完后的.ny文件放到plug-ins目录,重启Audacity即可。下面是一个非常简单的插件:
;nyquist plug-in ;version 1 ;type process ;name "Fade In" ;action "Fading In..." (mult (ramp) s)
第一行必须写成;nyquist plug-in,第二行用来指定版本号,版本2和版本3支持更多的窗口部件,但版本3在Audacity 1.3.3之前是不支持的。随后的一行是插件的类型,它用来指定该插件放到菜单中的哪一些当中。下一行用来用来设定插件运行时,Audacity显示的内容。还有其他一些选项可以使用。任何不以分号开始的行都当做Nyquist代码来执行。
Nyquist支持三种类型:
;type generate
;type process
;type analyze
与之对应的是菜单栏上三个包含插件的菜单项:Generate、Effect和Analyze。Generate用来生产新的音频;Effect插件用来修改当前选中的音频;Analyze插件用来处理选中的音频,但不做任何修改。可以根据分类选择适合自己的类型。
对于Effect和Analyze插件,Audacity设置Nyquist环境,把当前选中的音频信号放在变量s中。插件中所有的表达式顺序执行,最后一行表达式的返回值作为Audacity新选择的信号。如果最后一条表达式不返回任何音频,Audacity返回一个错误。
参数对话框
Audacity为插件显示对话框提供一些支持,对话框可以从用户那获取插件执行所需要的参数。下面是一个打开对话框的插件:
;nyquist plug-in ;version 1 ;type process ;name "Delay..." ;action "Performing Delay Effect..." ;info "Demo effect for Nyquist by Roger Dannenberg.\nThis effect creates a fixed number of echos." ; (should be all on one line) ;control decay "Decay amount" int "dB" 6 0 24 ;control delay "Delay time" real "seconds" 0.5 0.0 5.0 ;control count "Number of echos" int "times" 5 1 30 (defun delays (s decay delay count) (if (= count 0) (cue s) (sim (cue s) (loud decay (at delay (delays s decay delay (- count 1))))))) (stretch-abs 1 (delays s (- 0 decay) delay count))
如果Audacity在插件文件中找到至少一个“control”,它就为插件打开一个对话框。每个参数包含一个文本框和一个滑动条。用户设置参数后,Nyquist都会把值放到一个“control”行指定的名字当中。下面是代码在Linux上运行的截图:
“info”被显示到对话框的顶部,“\n”意味着换行。“control”行的参数决定了滑动条的外观。每个“control”行必定有下面8个元素:
1. 关键词“control”
2. 控件的名字,Nyquist用它来存放参数值
3. 控件显示标签
4. 参数值的类型,可以是int或者real
5. 值右侧的标签,通常是参数单位,比如“Hz”或“dB”
6. 参数初始值
7. 参数的下限
8. 参数的上限
Nyquist插件不但可以返回音频,还可以返回一个标签列表。标签列表其实就是一系列时间/便签对,比如:
((0.0 "start") (30.0 "middle") (60.0 "end"))
当插件返回的是标签列表时,Audacity创建新的标签到指定的时间位置,这种类型的插件属于“analyze”类型。
Audacity 1.3.1之后,你可以随意地同时返回一个开始和结束:
((0.0 25.0 "start") (30.0 45.0 "middle") (60.0 75.0 "end"))
Audacity 1.3之后运行标签重叠。一个标签的结束时间可以在另一个标签的开始时间之后。
Nyquist把一个立体音轨表示为一个数组(不是列表)。许多Nyquist函数自动地工作在数组之上,但并不是所有的函数,因此你可能需要分离或者重组一个立体音轨。下面是一些有用的函数:
|
s是否是一个数组 |
|
数组s中第一个元素,左声道 |
|
数组s中第二个元素,右声道 |
|
制造一个长度为2的数组 |
|
将left作为数组中的第一个元素,左声道 |
|
将right作为数组中的第二个元素,右声道 |
为了简便起见,如果输入到插件的是立体音,但你只输出单声道的音频,Audacity会自动将其拷贝到左声道和右声道中。
Audacity提供了一些实例,可以基于这些实例进行模仿学习。学习的最好办法就是去尝试。如果你遇到调试的问题,可以考虑下载完整版本的Nyquist。如果你想分享讨论自己的成果,可以参加社区论坛或邮件列表。