;;DurLong.CAL ;; (Change Duration Longer) ;; Written By 蛞蝓なめちゃん, 1997/09/10 ;; odasan@ma.catv.ne.jp ;; 機 能 : ・ (次の音 − n) tick まで 音の長さを伸ばします。 ;; ・同一 tick の和音は 8 音まで対応。 ;; ・指定範囲の最後の音の長さはそのまま。 ;; 使用法 : ・対象範囲を選択したあと、本 program を実行。 ;; ・パネルで n の値を入力すればよい。 ;; 制 限 : ・和音は 8 つまでしか対応していません。 ;; ・既に分散和音にしてあるときは、duration が ;; 小さくなります。 ;; ・track dataではなく、channel data を書換えます。 ;; 注 意 ・複数の track や 複数の channel にまたがる指定を ;; すると、誤動作します。 ;; ・1 track に 1 channel だけ設定されている状態で、 ;; 1 track ずつ処理してください。 ;; UNDO : 編集メニューの「元に戻す」で、 ;; 最後に処理した和音の音数だけ「イベント挿入」を取消し、 ;; 「CAL(forEachEvent)」を取消せば、元に戻ります。 (do (long time0 -1) (int n 0) ;; 次の音 − n ... 初期値は 0 (int dur0 0) (int cha0) (int counter 0) (int note0) (int vel0) (int note1) (int vel1) (int note2) (int vel2) (int note3) (int vel3) (int note4) (int vel4) (int note5) (int vel5) (int note6) (int vel6) (int note7) (int vel7) (getInt n "Dur = (次の音− n) tick" 0 32767) (forEachEvent (if (== Event.Kind NOTE) (do (if (< time0 0) (= time0 Event.Time) ) (do (if (== Event.Time time0) (switch counter 0 (do (= note0 Note.Key) (= vel0 Note.Vel) (= cha0 Event.Chan) (= dur0 Note.Dur) (+= counter 1) (delete) ) 1 (do (= note1 Note.Key) (= vel1 Note.Vel) (+= counter 1) (delete) ) 2 (do (= note2 Note.Key) (= vel2 Note.Vel) (+= counter 1) (delete) ) 3 (do (= note3 Note.Key) (= vel3 Note.Vel) (+= counter 1) (delete) ) 4 (do (= note4 Note.Key) (= vel4 Note.Vel) (+= counter 1) (delete) ) 5 (do (= note5 Note.Key) (= vel5 Note.Vel) (+= counter 1) (delete) ) 6 (do (= note6 Note.Key) (= vel6 Note.Vel) (+= counter 1) (delete) ) 7 (do (= note7 Note.Key) (= vel7 Note.Vel) (+= counter 1) (delete) ) 8 (= counter 8) ) (do (= dur0 (- Event.Time time0)) (-= dur0 n) (insert time0 cha0 NOTE note0 vel0 dur0) (if (> counter 1) (insert time0 cha0 NOTE note1 vel1 dur0) ) (if (> counter 2) (insert time0 cha0 NOTE note2 vel2 dur0) ) (if (> counter 3) (insert time0 cha0 NOTE note3 vel3 dur0) ) (if (> counter 4) (insert time0 cha0 NOTE note4 vel4 dur0) ) (if (> counter 5) (insert time0 cha0 NOTE note5 vel5 dur0) ) (if (> counter 6) (insert time0 cha0 NOTE note6 vel6 dur0) ) (if (> counter 7) (insert time0 cha0 NOTE note7 vel7 dur0) ) (= note0 Note.Key) (= vel0 Note.Vel) (= cha0 Event.Chan) (= time0 Event.Time) (= dur0 Note.Dur) (= counter 1) (delete) ) ) ) ) ) ) (do (insert time0 cha0 NOTE note0 vel0 dur0) (if (> counter 1) (insert time0 cha0 NOTE note1 vel1 dur0) ) (if (> counter 2) (insert time0 cha0 NOTE note2 vel2 dur0) ) (if (> counter 3) (insert time0 cha0 NOTE note3 vel3 dur0) ) (if (> counter 4) (insert time0 cha0 NOTE note4 vel4 dur0) ) (if (> counter 5) (insert time0 cha0 NOTE note5 vel5 dur0) ) (if (> counter 6) (insert time0 cha0 NOTE note6 vel6 dur0) ) (if (> counter 7) (insert time0 cha0 NOTE note7 vel7 dur0) ) ) )