录音/制作/创作 吉他 扩声技术 视频技术 作品展示 生活 信息 更多... | 音频应用专卖店

[教程] [Reaktor]利用Core Cell去搭建一个Clipper模块

 
[收藏]
#1 16-9-26 15:33

[Reaktor]利用Core Cell去搭建一个Clipper模块


436
我总是喜欢去想一个模块它的功能究竟是怎么实现的,然后在纸上写写计算,最终再回到Reaktor上来实践测试。

通常性我都是在Primary Level上利用原有的模块来进行相应的操作,尽管提供的模块能帮助去实现一些自己想要的功能,但有时候也因为如此让它的灵活性变低,显然,Core Cell是一个很好的补充,其实现在Reaktor Block就是普及Core Cell的好典例,所以我现在在搭建一些模块都会用Core Cell搭建的思路来进行搭建;表面上Core Cell跟原有的Primary Level上的搭建并没有什么不同,但Core Cell会更底层些,而且有一点很好的是,你可以去模仿一个模块,然后通过修改来改变它原有的功能,这也是Core Cell的目的,拓展你的需求。

今天我要来利用Core Cell来模仿搭建几个看似简单但又有点难点的模块;首先我来搭建的是Clipper模块(图1.1)。
图1.1

我们看到Reaktor给我们提供的Clipper是一个非常简单的模块,它有两个可控的参数MaxMin,它的运作原理就是,当输入信号大于Max或者小于Min的都要被切掉,切掉的意思其实就是等于相应的临界点,也就是说大于Max的信号最终输出的是一个恒值为Max的信号,反之小于Min的信号也如此;要知道对于Clipper模块也是经常会用到,从运作原理来看能知道它除了能制造点失真效果以外,还可以对控制信号进行限幅,比如控制一个滤波器的截止频率,有时候控制信号的复杂度不是我们能预期的,这时候用Clipper模块来限制,会对最终信号起到一个保护的作用。

好的,既然已经知道了Clipper的运作原理,那么在Core Cell搭建应该就不会那么难了?!事实也如此,所以我们可以创建一个空的Core Cell,给它命名为Clipper,并添加相应的输入和输出(图1.2)。
图1.2

创建完后,接下来我们要思考输入信号与MaxMin之间的关系,很显然,我们是要让输入信号与MaxMin进行比较,也就是说我们这里要利用MaxMin来路由输入信号进行不同的处理;在Primary Level我们知道有Compare模块来比较路由信号,同样Core Level也有比较信号的模块,它也叫Compare。(图1.3
图1.3

我们看到了Core LevelCompare模块有两个输入,显然它们是用来连接要进行比较的信号,当然有输入也应该要有输出,不过Compare的输出不是一个数值的输出,而是一个判断性的输出,它属于Boolean类型,用来判断比较的真假,以图1.3来讲,假设In输入的信号大于Max,那么Compare的输出为真值,反之亦然;尽管Compare能帮我们判断两个信号比较的结果,但它的输出又不能直接用来进行任何信号的处理,所以Core Level还提供了一个叫Router的模块,它就是用来对Compare模块进行进一步的处理。(图1.4
图1.4

我们看到了Router模块也有一个跟Compare模块输出一样的端口,实际上Router模块跟Compare模块就是一对搭档,有比较的地方肯定有它们的存在,而Router模块下面的输入则是用来连接你要路由的信号,显然我们应该是要把In的输入信号连接到这个输入,这样Router模块的输出信号就会根据Compare模块的判断来选择输入信号究竟该从Router模块上面的输出还是下面的输出;但从上面Clipper的运作原理,我们知道超过Max的信号将会等于一个恒值为Max的信号,所以我们要对Router模块上面的输出信号进行处理,让它最终等于一个恒值信号。那么怎么样才能让它等于一个恒值信号呢?

要让一个信号等于恒值信号并非难事,Core Level有为我们提供了一个叫Latch的模块,这个模块就能帮我们彻底地解决问题,但问题是很多人估计不明白Latch模块是个什么东西?它是怎么运作的?实际上Latch模块是一个Macro模块,它不是最基本的模块,就像Primary LevelMacro模块一样,当然Core LevelMacro模块跟Primary LevelMacro模块还是有一定的区别,也就是说Latch模块是在原有的模块基础上创建出来的新模块,它可以被修改的,而它的本质就是ReadWrite这个模块的运作。(图1.5
图1.5Latch模块内部结构)

我相信很多人可以通过Core Cell帮助文档去了解ReadWrite这两个模块的相关介绍,并且对它们的使用也有一定的掌握,因此想要看懂Latch模块是秒秒钟的问题,所以我们不难理解数值先被存储起来,然后通过事件触发来读取。(图1.6
图1.6

好了,从图1.6我们已经看到对超过Max的信号进行了限制的处理了,同样对于小于Min的信号我们可以同样的方法来处理。(图1.7
图1.7

虽然图1.7已经真真正正地完成了一个Clipper模块的搭建,但它还是有一些需要改进和注意的问题,比如一个大家经常性会使用错误的操作就是处理后的每个信号会用加法模块,注意图7整合信号不是用加法模块,而是用到了Merge模块,Merge模块处理信号的方式跟加法模块不同的是哪个信号先到先输出,如果是几个信号同时到达,那么输出的信号是Merge模块最底下输入的信号,而加法模块则是把所有信号相加在一起,这样对最终结果会产生很大的变化;除了这一点要注意以外,我们还需要改善一下搭建结构,首先很多人一开始看到这个搭建会觉得好乱啊,如果你是一个习惯这种乱乱的搭建并自己能看得懂的话,那么我觉得这倒无所谓了,但实际上这样的搭建对后续的修改和可读性是非常差的,搞不好时间一久或者状态很差的情况下回过头来看,你就会讨厌自己当初的做法了,所以我们需要对这个搭建进行整理,让它的可读性变高。

其实从图1.7我们不难发现有一些相似的东西,比如比较的部分,我们发现不管是比较Max还是MinCompare模块的符号都不变,都是默认的大于号,唯独不同的Router模块要处理的信号选择不同,对于Max来说,相应的Router模块是处理上面输出的信号,而对于Min来说,相应的Router模块是处理下面的信号,所以我们可以来搭建一个通用的Macro。(图1.8
图1.8

没错,图1.8所示的就是一个通用的Macro,它就是一个实实在在的比较信号来路由信号的Macro,你甚至可以把它当做就是一个全新的模块来看,这样我们就可以对图1.7的搭建进一步整理了。(图1.9
图1.9

1.9的搭建显然比图1.7的好太多了,一看也比较明了,当然这里用到了QuickBus,相比连线来说,它更像是一种无线连接,这样做的目的是防止连线一多,整个搭建看起来会显得很复杂,当然你硬要用连线也可以,不过最终我还是会建议用图1.9的方式来做,反正慢慢你就会发现这样做的好处了。

当然很多人会问为什么不把Latch的部分也放到那个通用的Macro里呢?其实要那样做也可以,只是我个人觉得如果很多东西都放到一块的话,对于理解信号处理的直观性会有所影响,因为可读性是很重要的,所以我觉得这样我一下子就能知道信号是怎么处理的,保持搭建的可读性又能重温对信号处理的理解,这点对每个搭建者来说都是非常重要的

观众反应
您需要登录后才可以回帖 登录 | 注册

本版积分规则

搜索