Skip to main content
Topic: Script Bug Challenge (Read 233 times) previous topic - next topic

Script Bug Challenge

I haven't touched my fiddle in quite a while and noticed I was getting intonation problems. One idea to work on that would be to play the note, then the note would play through NWC and midi and I could hear if my note was in tune.

This is the working part of my script, it determines half the duration of the note and creates a rest followed by the note with it:
Code: [Select · Download]
function calculate(clip) {
  var i, saveDur, saveDurB, saveDurE;
  var lines = new Array(), result = new Array(); 
  lines = clip.split("\r\n");

  for (i=0; i < lines.length; i++) {
      result=lines[i].match(/(.*Dur:)([^\|]*)(.*$)/);
  if (result == null)
  continue;  // No duration, didn't follow grace note.
  if (lines[i].indexOf("Grace") > 0) {  // Found a grace note/chord
        continue;  }
  if (lines[i].indexOf("Rest") > 0) {  // Found a rest, ignore
        continue;  }
// shell.popUp(lines[i]);
saveDur = result[2];
//shell.popUp(saveDur);
saveDur = saveDur.replace("32nd","64th");
saveDur = saveDur.replace("16th","32nd");
saveDur = saveDur.replace("8th","16th");
saveDur = saveDur.replace("4th","8th");
saveDur = saveDur.replace("Half","4th");
saveDur = saveDur.replace("Whole","Half");
shell.popUp(saveDur);
   // thisDur = getNoteLength(saveDur);
   // shell.popUp(saveDur);
// Code to manipulate durations goes here
saveDurB = saveDur.replace("=End",""); // In case of triplets.
saveDurE = saveDur.replace("=First",""); // In case of triplets.
lines[i] = "|Rest|Dur:" + saveDurB + "\r\n" + result[1] + saveDurE + result[3];
    }
  return lines;
So far, so good except it changes a 32nd note to a 68th note.
This was my test data:
Code: (nwc) [Select · Download]
!NoteWorthyComposerClip(2.751,Single)
|MPC|Controller:vol|Style:Linear Sweep|TimeRes:Sixteenth|SweepRes:1|Pt1:0,127|Pt2:1,123|Pt3:1,120|Pos:-6
|DynamicVariance|Style:Sforzando|Pos:-8
|Note|Dur:8th,DblDotted,Slur|Pos:n-3|Opts:Stem=Up,Beam=First
|Note|Dur:32nd|Pos:-4|Opts:Stem=Up,Beam=End
|Note|Dur:4th|Pos:-4^
|Note|Dur:8th|Pos:-4
|Note|Dur:4th,Tenuto|Pos:-3
|Note|Dur:8th,Tenuto|Pos:-3
|Bar
!NoteWorthyComposerClip-End
Please hold off 24 hours after this is posted to let others take a shot at it.
Since 1998

Re: Script Bug Challenge

Reply #1
Nice  :D. Word boundaries are always helpful.

(Incidentally, I created practice files of that type for a friend who wants to "sight-transpose" with her Bb trumpet. I used a simple AWK script to generate a random sequence of muted/visible + playing/invisible note pairs. Youtube example).

H.M.


Re: Script Bug Challenge

Reply #3
(Incidentally, I created practice files of that type for a friend who wants to "sight-transpose" with her Bb trumpet. I used a simple AWK script to generate a random sequence of muted/visible + playing/invisible note pairs. Youtube example).
Nice.
I've used youtube a few times for NWC transcriptions a few times such as Thais accompaniment.
Since 1998


 

Re: Script Bug Challenge

Reply #5
The bug was that after replacing 32nd with 64th, it is (unfortunately) an exact match when 4th is replaced with 8th.

  • It can be solved by making that set of statements use a case construct where a break would follow each replace and only one replace is ever done to the duration.
  • The 32nd can be replaced by X which will be turned into 64th after the Whole note is addressed.
  • Instead of looking for "4th", look for /^4th/. That search string, as a regular expression must start the string so it would ignore 64th.
Since 1998