;;Trill.cal ;; Written By 蛞蝓なめちゃん, 1997/12/24 ;; odasan@ma.catv.ne.jp ;; 機 能 : ・指定した音を Trill にします。 ;; ・要するに、Duration の続く間、指定した間隔でふたつの音符を ;; 並べます。 ;; 使用法 : ・対象範囲を選択して、本 program を実行。 ;; ・trill の間隔は、 下記 program のパラメータ "dur0" "dur1" を ;; 書換えて指定しまーす。(default はどちらも 30 tick) ;; これを例えば 33 + 27 等にすると、多少リアリティが出ます。 ;; ・trill の音の高さ変化は、下記 program のパラメータ "diff" を ;; 書換えて指定しまーす。(default は 半音高く) ;; 半音高く : 1 半音低く : -1 ;; 全音高く : 2 半音低く : -2 etc... ;; UNDO : できます。編集メニューから「やり直し」で、 ;; 「CAL(forEachEvent)」を元に戻します。 (do (int dur0 30) ;; 最初の高さの音の duration (int dur1 30) ;; 次の高さの音の duration (int diff 1) ;; 次の音の高さの差 (int key0) ;; 最初の音の高さ (int key1) ;; 次の音の高さ用 (int du) (int ch) (int vel) (int len) (int dur) (int flag 0) (dword time) (forEachEvent (if (== Event.Kind NOTE) (do (= len Note.Dur) (= vel Note.Vel) (= key0 Note.Key) (= key1 (+ key0 diff)) (= time Event.Time) (= ch Event.Chan) (if (< len dur0) (do (= dur0 len) (= len 0) ) ) (= Note.Dur dur0) (-= len dur0) (while (> len 0) (if (== flag 0) (do (+= time dur0) (if (< len dur1) (= dur1 len) ) (insert time ch NOTE key1 vel dur1) (= flag 1) (-= len dur1) ) (do (+= time dur1) (if (< len dur0) (= dur0 len) ) (insert time ch NOTE key0 vel dur0) (= flag 0) (-= len dur0) ) ) ) ) ) ) )