;;GuitarGliss.CAL ;; (Glissand for Guitar) ;; Written By 蛞蝓なめちゃん, 1997/09/10 ;; odasan@ma.catv.ne.jp ;; 機 能 : 読み込んだ 2 つの音を 指定した分割数で ;; pitch bend しながら元の音を入れてつなぎます。 ;; 使用法 : 対象範囲の音を選択して、本 program を実行します。 ;; 注 意 : ・3 つ以上の音を選択した場合、 ;; 偶数個なら 2 つずつつなぎますが、 ;; 奇数個の場合は、最後の音が削除されてしまいます。 ;; 選択は 2 個ずつセットが原則であります。 ;; ・pitch bend sensibility は、初期設定で 8192 = 12 半音。 ;; 変更する場合は、 program 中の "range" を書換えてください。 ;; ・duration は、(均等に分割した数 − 1) tick です。 ;; ・また、2 つめの音の 1 tick 手前に bend 0 を書込みます。 ;; 動 作 : time base = 120 のとき、 ;; 4:1:60 ch=1 note=A4 vel=80 dur=20 と ;; 4:2:00 ch=3 note=F4 vel=96 dur=90 の音が選択されている場合、 ;; 分割数を 4 とすると、 ;; 4:1: 60 ch=1 note=A4 vel=80 dur=14 ;; 4:1: 74 ch=1 pitch bend -683 ;; 4:1: 75 ch=1 note=A4 vel=84 dur=14 ;; 4:1: 89 ch=1 pitch bend -1365 ;; 4:1: 90 ch=1 note=A4 vel=88 dur=14 ;; 4:1:104 ch=1 pitch bend -2048 ;; 4:1:105 ch=1 note=A4 vel=92 dur=14 ;; 4:1:119 ch=1 pitch bend 0 ;; 4:2 0 ch=3 note=F4 vel=96 dur=90 ;; --- のように書き換えます。 ;; ただし、計算誤差があるので、 ;; bend 値は 1 程度変わることがあります。 (do (int range 12) ;; 初期設定 8192 = 12 半音 (int flag 0) (int dur) (int ch) (int vel0) (int vel1) (int veldif) (int note0) (int notedif) (int divnum 16) ;; 初期設定 16 分割 (int loop) (dword time0) (dword time1) (dword time2) (dword divtime) (int divbend) (int length) (getInt divnum "分割数" 2 32767) (forEachEvent (if (== Event.Kind NOTE) (do (if (== flag 0) (do (= time0 Event.Time) ;; 1 つめ (= note0 Note.Key) (= vel0 Note.Vel) (= ch Event.Chan) (delete) (= flag 1) ) (do (= time1 Event.Time) ;; 2 つめ (= time2 time1) (= length (- time1 time0)) (= vel1 Note.Vel) (= veldif (- vel1 vel0)) (= dur (/ length divnum)) (= notedif (- Note.Key note0)) (= notedif (/ (* notedif 8192) range)) (= loop divnum) (-= loop 1) (insert time0 ch NOTE note0 vel0 (- dur 1)) (while (> loop 0) (do (= divtime (- Event.Time (/ (* length loop) divnum))) (= divbend (/ (* notedif (- divnum loop)) divnum)) (if (> divbend 8190) (= divbend 0) ) (if (< divbend -8191) (= divbend 0) ) (= vel1 (/ (* veldif (- divnum loop)) divnum)) (+= vel1 vel0) (insert (- divtime 1) ch WHEEL divbend) (insert divtime ch NOTE note0 vel1 (- dur 1)) (-= loop 1) ) ) (insert (- time2 1) ch WHEEL 0) ) ) ) ) ) )