Jump to content

Serge Daigno

Members
  • Posts

    1
  • Joined

  • Last visited

Everything posted by Serge Daigno

  1. Salut Mathieu, Si ma mémoire est bonne j'ai pu programmer une routine fiable. Ça ne coûte rien d'essayer, copie le tout dans un fichier et sauve le sous Note_Duplicate.CAL par exemple. ;; _54 Note_Duplicate.CAL, by Serge Daigno 2022 ;; Delete duplicated notes junk ;; If many tracks are selected, results are not guaranteed (do (dword FromTime 0) (word oRange 50) (int NoteKey 0) (int nDeleted 0) (int nDuration 0) (int Found 0) (int FromKey 32767) (int ToKey 0) ; Key range (int oCh 0) (int oVel 10) (int oNote 0) (word oDur 30) ; Data insert (getWord oRange "Relative time range in Ticks:" 0 100) (getInt oVel "Delete Velocity lower than:" 1 20) (getInt oDur "Delete Duration lower than:" 1 50) ; ------------- First of all, delete duration and velocity junk, get the lowest and highest notes. (forEachEvent (do ; Find note range (if (== Event.Kind NOTE) (do (++ Found) (if (&& (== Event.Kind NOTE) (< Note.Dur oDur)) (do (delete) (++ nDeleted))) ;; Junk (if (&& (== Event.Kind NOTE) (< Note.Vel oVel)) (do (delete) (++ nDeleted))) ;; Junk (if (< Note.Key FromKey) (= FromKey Note.Key)) (if (> Note.Key ToKey) (= ToKey Note.Key)) )) )) (= oVel 0) (= oDur 0) (while (<= FromKey ToKey) (do ; ------------- Remove duplicates (= Found 0) (forEachEvent (do (if (&& (== Found 1) (&& (== Event.Kind NOTE) (== Note.Key FromKey))) ; Next FromKey (do (if (&& (>= Event.Time FromTime) (<= Event.Time (+ FromTime oRange))) (do (delete) (++ nDeleted))) (if (> Event.Time (+ FromTime oRange)) (= Found 0)) ; Out of range )) (if (&& (== Found 0) (&& (== Event.Kind NOTE) (== Note.Key FromKey))) ; FromKey (do (= FromTime Event.Time) (= Found 1) ; To next FromKey )) )) ; ------------- Remove overlaps (= Found 0) (forEachEvent (do (if (&& (== Found 1) (&& (== Event.Kind NOTE) (== Note.Key FromKey))) ; FromKey found (do (if (> oDur (- Event.Time FromTime )) (do (= oDur (- Event.Time FromTime )) (++ nDuration))) (insert FromTime oCh NOTE FromKey oVel oDur) (= Found 0) ;(pause "Ev " Event.Time " Fr: " FromTime " Dur: " oDur) )) (if (&& (== Found 0) (&& (== Event.Kind NOTE) (== Note.Key FromKey))) ; FromKey (do (= FromTime Event.Time) (= Found 1) ;(pause "0 Key: " FromKey " Time: " FromTime) (= oCh Event.Chan) (= oNote Note.Key) (= oVel Note.Vel) (= oDur Note.Dur) (delete) ; Store values )) )) (if (== Found 1) (insert FromTime oCh NOTE FromKey oVel oDur)) ; Last FromKey performed (++ FromKey) )) (pause "Duplicates " nDeleted " Overlaps: " nDuration) )
×
×
  • Create New...