Audacity: 自由而免费的声音编辑器和录音软件

广告政策

创建Nyquist插件

  1. 关于Nyquist及List编程的介绍
  2. 使用Nyquist编程
  3. 创建Nyquist插件

给Audacity创建Nyquist插件很简单,只需创建一个后缀名为 ".ny"的文本文件,里面输些 Nyquist代码,加少许注释说明此插件的类型,然后将此文件存放在 Audacity的 plug-ins 目录。下面是个简单的插件实例:

  ;nyquist plug-in
  ;version 1
  ;type process
  ;name "Fade In"
  ;action "Fading In..."
  (mult (ramp) s)

Nyquist插件的第一行必须和上述例子一模一样,第二行必须写明版本号。版本2和3能支持更多小工具,但是Audacity 1.3.3 及更早版本不支持版本3的插件。下一行是插件的类型,将在下面详细讨论。然后是插件名,这名字将显示在菜单栏,第5行是"action",当插件运行时显示在菜单栏上。接下来可以加些别的选项行。所有行首没有分号 (;)的行都会被视作Nyquist命令行,会被执行。

Audacity 支持三种用Nyquist编写的插件:

  ;type generate
  ;type process
  ;type analyze

上面三种类型分别可容纳插件:生成特效分析。生成插件用来生成新的音频,特效插件("process")编辑并修改已有的音频,分析插件只用来加工音频,不修改音频(不过允许它们添加标签)。

对于特效分析插件,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"行,它将打开一个对话框提示用户输入特定的参数给插件。每个参数包含一个文本框和一个滑块,在用户设置好每项后,最终值会被存放在"control"行定义的Nyquist变量中。下面是Linux下Audacity 的延迟特效控制窗口。

Nyquist插件截屏

注意"info"行的内容会显示在对话框顶部,"\n"代表新行。"control"行里的参数会影响外观和参数限制。每个"control"行必须由8个元素组成,按照下面的顺序:

  1. 单词"control"
  2. control的名字-这是Nyquist变量的名字,在用户操作对话框时被设置。
  3. 控制器左面的标签
  4. 值的类型: 仅为int (整形) 或 real.
  5. 控制器右边的标签(通常为单位,比如“Hz”或“dB”)。
  6. 参数 默认/初始化 值
  7. 参数的最小值
  8. 参数的最大值

返回标签

除了返回音频,Nyquist插件可以返回一个标签列表。很多标签列表只是一个 时间/标签 对,例如:

  ((0.0 "start") (30.0 "middle") (60.0 "end"))

档插件返回这种形式的列表时,Audacity会创建一个新的标签轨道,按照位置放置好标签。这种类型的插件通常是"分析"插件。

新消息!从Audacity 1.3.1开始,你可以选择同时返回一个开始和一个结束时间,像这样:

  ((0.0 25.0 "start") (30.0 45.0 "middle") (60.0 75.0 "end"))

注意,在Audacity 1.3中,标签可以重叠;一个标签的结束时间可在另外一个标签的开始时间后面(即两标签时间重叠)。

处理立体声音轨

Nyquist将立体声轨道视为一个数组(而非一个列表)。许多Nyquist函数自动处理这些数组,但是并不能处理所有数组,所以某些时候有必要拆开立体声数组,或合并一个,下面是些很有用的函数:

则返回true的第一个元素的第二个元素
(arrayp s)如果 s是一个数组
(aref s 0)数组的第一个元素 s -左声道
(aref s 1)数组的第二个元素 s -右声道
(setf s (make-array 2))s 变成新数组,长度为2
(setf (aref s 0) left)left作为数组 s
(setf (aref s 1) right)right作为数组 s

为了方便起见,如果Nyquist插件的输入是立体声,但是输出是单声道(mono),Audacity会自动将它(单声道)复制到左右声道变为立体声。

下一步干什么?

Audacity 有些示范插件,你可以从改造它们开始。熟悉Nyquist最好的办法还是用它。如果调试出问题,请下载最新版的Nyquist(查看第1部分中的链接)。

如果您都不能让Nyquist工作,请联系我们

如果你正在编写 Nyquist 特效插件并想与他人分享,或你想讨论如何用 Nyquist 实现特定功能的特效,请在 Audacity 论坛的 Nyquist 版块 发帖子,或加入 audacity-nyquist 邮件列表

不要忘了查阅完整版 Nyquist 2.37 参考手册 获取更多关于 Lisp 和 Nyquist 的信息。