k6前级效果器怎么用_自己写一个效果器!——REAPER JSFX (1)

如果你想自己整一个效果器!或者你想快速地试验一下自己的新点子!那么REAPER自带的编程语言JSFX是一个非常不错的选择!上手贼快!就是界面丑了点!不过没关系!想要让界面好看!我们还有JUCE之类的工具可以用呢么不是!

这篇文章里,将用 JSFX 自带的示例作为例子,来介绍怎么样用 JSFX 去搭建一个自己的效果器!

下一篇文章中将拆解 REAPER 自带的延迟效果器,来进一步深入对 JSFX 与信号处理的理解。

JSFX 这门语言的设计目的,是让我们不需要去考虑太多的东西,而把注意力集中在对音频信号的处理上。

不过虽然如此,作为一个编程的语言,还是离不开很多编程的基础概念。
如果你有一定的编程基础,这篇文章看起来应该十分容易理解。

如果你没有编程的基础,涉及到的一些比较基础的编程概念,如变量、数组等,可能需要花一点点时间了解一下!

1、新建一个JSFX文件

在REAPER的任意轨道中,点击添加效果器

在弹出来的选择效果器的窗口,左上角点击 FX,就可以看到一个 Create new JS FX… 的选项啦!戳它!

ad2636f6990bdcfa0723972b98b07641.png

然后给它整个名字,我们随便整一个,比如 Sweet Boy's Delay

e97a93ac95f95e7450cc38efccb7591a.png

点击 OK 之后,REAPER 就会帮我们生成一个初始的效果器脚本文件啦

我们来看看这个文件里面有啥!

ef6f9d573b5831c3d61cb00bdd90a1d2.png

戳一下 Edit

d92f702df38e67fd61f0c70a5b3d6df1.png

好家伙!真是丑到我了!不过我喜欢!

2、JSFX文件的整体结构

DESC

首先是一行 desc:
这一行给你的插件赋予了姓名
你让它叫啥,它就叫啥,并且,通过这个姓名,让它可以在搜索中被搜索到

这里有个小 tip
desc 可以有两行,如此一来,你就可以把它伪装成另外的什么东西嘿嘿
第一行的内容在搜索和插件列表中被看到,而第二行的内容则显示在插件的标题栏上

7c25d52e74ce51a3b8dbb0807a65097e.png

cf9f0fcfe9a13bdbbe539e2c09676696.png

cb19ab90ddd2377983a011e8c22e0f8f.png

SLIDERS

接下来的部分,可以给插件指定推子
语法是这样的:

sliderX:varName=default<min, max, delta> Descriptions

其中 X 代表一个数字, 1, 2, 3, …
接着可以接一个 varName,来用一个变量存储推子的数值
然后是推子的默认值,也就是你在加载了插件之后,以及双击了推子之后推子所在的位置
尖括号里是推子能推到的最小值最大值和移动的时候改变的数值间隔最后可以用一段文字来描述这个推子,会被显示在推子的前方,比如说默认生成的这个文件里的 gain (dB)

I/O

接下来定义插件的输入输出引脚

in_pin:left input
in_pin:right input
out_pin:left output
out_pin:right output

插件可以支持多个输入输出,或者将输入输出的引脚都定义为 none,那么 REAPER 会将你的插件当作 MIDI 插件来调用。

在这里定义的引脚,可以在 REAPER 的引脚路由里面被看到,只是起一个标志性的作用

ee77858c28e3b6d8fedb95313e5ca215.png

@init

这部分代码会在插件被加载,开始播放,以及采样率发生了改变时执行。

last_gain=10^(gain_db/20);

在这里,last_gain 是一个新的变量,而 gain_db 是推子的值
对它除以 20 再丢到 10 的指数里,就把 dB 转为了振幅(比如 -6dB -> 0.5)
并把这个值赋给了 last_gain 变量

@slider

这部分代码会在推子发生改变时被执行

next_gain=10^(gain_db/20);

在这里面,把推子的值转换成幅值之后,赋予了变量 next_gain

@block

这里面的代码,会在对 block 进行处理的时候被执行

d_gain = (next_gain - last_gain)/samplesblock;

所谓的 block,
音频硬件如声卡等,在处理音频数据时,并不是一个采样点一个采样点进行处理的
而是一次性向缓存中送入若干个采样点(一般是几十到几千个,由用户或软件设定)
这若干个采样点组成的一组数据,就是一个 block
对于一些不需要以特别快的频率进行更新的代码,如 MIDI 信号的处理等,就可以放在这里面执行

在这个例子中,计算了 d_gain,其值为 next_gain last_gain 的差,再除以 block 的大小 samplesblock

这么计算的目的,是为了接下来的处理中,可以让用户滑动推子的时候声音会平滑过渡。

@sample

终于到了最后一个部分。

在 @sample 中,可以使用 splX 来表示单独的采样点。
在这里,每一个采样点都会被单独处理

使用特殊变量 splX,可以获取不同通道上的采样点的信息。
比如这个例子中有左右声道2个通道,那么 spl0 就是左声道,spl1 就是右声道

spl0 *= last_gain;
spl1 *= last_gain;
last_gain += d_gain;

在这里让采样点的值乘以了 last_gain

从而实现了使用 gain 对采样值的幅值进行控制的目的

在每一次进入到 @sample 时,会把 last_gain d_gain 相加从而来更新 last_gain 的值,做到让用户在调整音量时可以平滑过渡而不会出现爆音

@gfx

这部分地方可以用来进行一些图形方面的操作,可以用于将一些数据进行可视化,也可以用来绘制图形化的操作界面等等。

在这篇文章里不进一步展开啦就!想进一步学习阔以看看 REAPER 官网上的介绍!

在上边这些东西过一遍之后,JSFX 也就说得差不多了!是不是没有想象中那么难!

下一篇文章里,将用这些东西,来拆解 REAPER 自带的延迟效果器,看看它是怎么一回事!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值