音频应用

 找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 21728|回复: 0
收起左侧

[转载] Reaktor 之简单刷子功能

[复制链接]

182

积分

4

听众

80

音贝

音频应用

Rank: 1

积分
182
发表于 2018-9-4 21:34:42 | 显示全部楼层 |阅读模式
你是否有用FL Studio,如果有,那你应该不陌生它Piano Roll下的Paint功能。(图a)
) ^3 p! g5 b: Y6 E: @% n 7453_1536055986_thumb.png - Q! F8 |0 i! @2 [5 p- o" ]) _& ]4 q
图a+ D. {6 t# S1 A
今天要讲的就是基于这个功能原理在Reaktor实现一番。
+ ]& {6 }! @3 R. M: T首先一开始,我们需要创建一个类似button的grid,这个很简单,我们可以利用XY模块去实现,具体结构如图b所示:4 C! ]3 t& v: M8 G  V. ^
6397_1536055991_thumb.png " B) P# X. m) _* Q( ^7 ]7 N  z
图b
. E& u  E, l3 j, }% U. }8 D6 ]在上面的XY模块,我设置了它的宽高都为20像素,并关掉了frame显示,然后足各复制8个,在面板上调整位置,让它们最终成图c那样:& h* x4 H" Y  V* Z  J# F8 M* e
5187_1536055998_thumb.png : E) y/ r% M2 c( |* a1 F
图c
2 g! a3 L3 r5 y1 Y) Y为了确保大家能调整清楚,我特意把处于打开的模式;好的,接下来我们增加一个Mouse Area模块,并设置它的宽高为160像素*20像素,接着,我们来考虑需要用它哪些端口。
: j+ d, [$ h& o$ w首先,我们需要Mouse Area鼠标的位置来对应每个grid,这个X和PX端口都可以胜任,不过有一点区别是,PX端口在鼠标释放的时候仍然会触发事件发送,而X端口却没有,而这种情况是针对鼠标没有任何移动,仅仅只有点击释放动作,所以更理想的选择应该是PX。
+ B  U$ n/ v1 H- A" H" a) Z接着,BL和BR端口肯定少不了的,BL负责刷激活状态,BR负责刷关闭状态,除了这两个,最后,我们还需要W端口,这个是Mouse Area的实际宽度值,为什么需要这个?原因在于我们想利用它去把PX端口输出的数值等比例缩小到0到1这个范围,这么做是想更好地去定位鼠标位置与grid的对应关系,当然如果不要这个W端口也行,前提是你要知道Mouse Area作用宽度值是多少。7 M) i7 g3 l; o# e4 X- h
OK,铺完前面的,我们进行接下来核心的处理,不用说,创建个Core Cell,命名为“Process”,添加相应的输入输出端口。(图d)- P2 \' k* S4 S5 [, F1 h5 ]
3457_1536056004_thumb.png * M$ K$ c# f7 l- k0 N, Z3 L
图d+ C8 z* B/ o$ W/ O! ?* y( |
可以看出,我上面为了美观,把一些没必要的端口也添加进来,因此我们只需要把有用到的端口连接起来即可,然后点开“Process”这个Core Cell进入开始搭建。$ A) I9 o0 X% {$ e* i% C4 Q& Y
第一,我们要处理鼠标的定位问题,刚刚上面我已经提到了,要利用PX发送的事件数值和Mouse Area实际宽度值来处理;这个很简单,我们只要把PX发送的事件数值除以W输出的数值就可以了;当然这一步还不是完整的定位,要知道,我们有8个grid,所以最终的定位范围应该处于0到8之间,因此,我们还要再乘以8。(图e)
2 N/ r, w, ^0 {! V1 \: G 9624_1536056029_thumb.png $ a! j( i, S; q9 C
图e
& g6 c9 h6 T: r. Q- x现在范围已经在0到8之间了,但为了更好地分配每个grid对应好的状态值,我们还需要给这个范围值取整数处理,由于分配标识是从0到7的自然数,所以我们应该做向下取整处理,即floor处理;不过单单只有floor处理还不行,我们最好给它再限制范围,毕竟PX发送的数值会超出我们想要的范围,也尽管超出的范围可能不会对结果造成影响,但为了安全起见,我们还是有必要对它进行限制,也就是clip处理。(图f)
  a4 j8 ^9 Q2 G# b' }& a 1689_1536056038_thumb.png
) e) ^7 A" U; y7 q图f
- {% R' X- s; d9 u* Y, i行,我们已经完成了鼠标定位的问题,看吧,很简单吧,接着,我们要来创建个路由器,也就是分配器。(图g)
/ Z' C$ f8 V& t 4540_1536056047_thumb.png - w$ N0 C- B- a0 ]- z# ]
图g* I3 o9 Y: v5 J, ~7 T
可以看出上面这个分配器很简单,不过就是判断Pos是否等于某个数值,如果相等就输出In的数值到对应的输出端口,也正是利用这个实现grid状态的切换;好吧,最终搭建结果如图h所示:9 P! K+ R. S  y
3176_1536056053_thumb.png " s* G/ H( Q6 j# N; }6 `% I. \
图h# Q  z4 \" d6 p* B6 M# z8 ]: y3 @
欢迎厂家入驻,推文!免费!微信:yinpinyingyong
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

音频应用搜索

QQ|小黑屋|手机版|音频应用官网微博|音频应用 ( 鄂ICP备16002437号 )

GMT+8, 2025-6-6 02:52 , Processed in 0.028356 second(s), 8 queries , Redis On.

Powered by Audio app

快速回复 返回顶部 返回列表