;;VibHand.CAL ;; (Hand Vibrate Arm for Electric Guitar) ;; Written By 蛞蝓なめちゃん, 1998/12/24 ;; odasan@ma.catv.ne.jp ;; 機 能 : ・読込んだ音をびろびろします。 ;; 要するに pitch bend でびろびろします。 ;; ・指定した音の p1 tick 後から、p2 tick の周期で ;; bend 0 を書込みます。 ;; ・初期設定では、p2=60 p2=120 で、 ;; val は +128 です。 ;; 使用法 : ・対象範囲を選択して、本 program を実行するだけ。 ;; ・p1, p2, val の値を変更するときは、下記 program の該当個所を ;; 書換えてください。 ;; ・複数のノートを選択した場合は、それぞれのノートについて ;; bend を書込みます。 ;; 注 意 : ・p1, p2 とも 指定できるのは 0 〜 65535 の間です。 ;; ・val は、-8192 〜 +8191 の範囲で指定してください。 ;; ただし、pitch bend sensibility により、変化幅は変わります。 ;; ・和音に対してこれを実行すると、音の数だけ bend 値がどっさり ;; 書き込まれるので、和音のときはひとつだけ選択しませう。 ;; ・p1 と p2 を加えた値が duration より小さいときは、bend は ;; 書込まれません。 ;; 動 作 : time base = 120 のとき、初期設定では、 ;; 4:1:000 ch=1 note=A3 vel=96 dur=3:060 を選択して実行すると、 ;; この音の後に、 ;; 4:2:000 ch=1 pitch bend +128 ;; 4:2:060 ch=1 pitch bend 0 ;; 4:3:000 ch=1 pitch bend +128 ;; 4:3:060 ch=1 pitch bend 0 ;; --- の 4 つのデータを加えます。 ;; UNDO : 編集メニューの「元に戻す」で、 ;; 「CAL(forEachEvent)」を取消せば、元に戻ります。 (do (int ch) (long dur) (dword time0) ;; 書き込む位置 (int p1 60) ;; bend 始める位置 (60 tick) (int p2 120) ;; bend 周期 (120 tick) (int val 128) ;; bend する値 (int p3) (= p3 (/ p2 2)) ;; 書込む周期 (forEachEvent (if (== Event.Kind NOTE) (do (= ch Event.Chan) (= dur Note.Dur) (= time0 Event.Time) (-= dur p1) (+= dur p3) (+= time0 p1) (while (> dur p2) (do (insert time0 ch WHEEL val) (insert (+ time0 p3) ch WHEEL 0) (-= dur p2) (+= time0 p2) ) ) ) ) ) )