Reaktor 之简单刷子功能

分享到微信朋友圈

· 曾照南 添加于 2018-09-04 · 暂无评论

你是否有用FL Studio,如果有,那你应该不陌生它Piano Roll下的Paint功能。(图a)


图a

今天要讲的就是基于这个功能原理在Reaktor实现一番。

首先一开始,我们需要创建一个类似button的grid,这个很简单,我们可以利用XY模块去实现,具体结构如图b所示:


图b

在上面的XY模块,我设置了它的宽高都为20像素,并关掉了frame显示,然后足各复制8个,在面板上调整位置,让它们最终成图c那样:


图c

为了确保大家能调整清楚,我特意把处于打开的模式;好的,接下来我们增加一个Mouse Area模块,并设置它的宽高为160像素*20像素,接着,我们来考虑需要用它哪些端口。

首先,我们需要Mouse Area鼠标的位置来对应每个grid,这个X和PX端口都可以胜任,不过有一点区别是,PX端口在鼠标释放的时候仍然会触发事件发送,而X端口却没有,而这种情况是针对鼠标没有任何移动,仅仅只有点击释放动作,所以更理想的选择应该是PX。

接着,BL和BR端口肯定少不了的,BL负责刷激活状态,BR负责刷关闭状态,除了这两个,最后,我们还需要W端口,这个是Mouse Area的实际宽度值,为什么需要这个?原因在于我们想利用它去把PX端口输出的数值等比例缩小到0到1这个范围,这么做是想更好地去定位鼠标位置与grid的对应关系,当然如果不要这个W端口也行,前提是你要知道Mouse Area作用宽度值是多少。

OK,铺完前面的,我们进行接下来核心的处理,不用说,创建个Core Cell,命名为“Process”,添加相应的输入输出端口。(图d)


图d

可以看出,我上面为了美观,把一些没必要的端口也添加进来,因此我们只需要把有用到的端口连接起来即可,然后点开“Process”这个Core Cell进入开始搭建。

第一,我们要处理鼠标的定位问题,刚刚上面我已经提到了,要利用PX发送的事件数值和Mouse Area实际宽度值来处理;这个很简单,我们只要把PX发送的事件数值除以W输出的数值就可以了;当然这一步还不是完整的定位,要知道,我们有8个grid,所以最终的定位范围应该处于0到8之间,因此,我们还要再乘以8。(图e)


图e

现在范围已经在0到8之间了,但为了更好地分配每个grid对应好的状态值,我们还需要给这个范围值取整数处理,由于分配标识是从0到7的自然数,所以我们应该做向下取整处理,即floor处理;不过单单只有floor处理还不行,我们最好给它再限制范围,毕竟PX发送的数值会超出我们想要的范围,也尽管超出的范围可能不会对结果造成影响,但为了安全起见,我们还是有必要对它进行限制,也就是clip处理。(图f)


图f

行,我们已经完成了鼠标定位的问题,看吧,很简单吧,接着,我们要来创建个路由器,也就是分配器。(图g)


图g

可以看出上面这个分配器很简单,不过就是判断Pos是否等于某个数值,如果相等就输出In的数值到对应的输出端口,也正是利用这个实现grid状态的切换;好吧,最终搭建结果如图h所示:


图h


本文出自《midifan月刊》2018年5月第148期


可下载 Midifan for iOS 应用在手机或平板上阅读(直接在App Store里搜索Midifan即可找到,或扫描下面的二维码直接下载),在 iPad 或 iPhone 上下载并阅读。

文章出处:https://magazine.midifan.com/detail.php?month=2018-07#16做人要厚道,转载文章请注明出自 midifan.com,谢谢

暂无评论

添加评论