inlets = 5 outlets = 5 var timeMillis = 0; var rollingTimecode = new Dict("timecode") function msg_int(i) { processIncrement(inlet, i); } function goToZeros() { rawTime(0); } function rawTime(ms) { timeMillis = ms outputRollingTimecode(); } function processIncrement(unit, amount) { var newAmount = timeMillis; var unitMilliValue = 0 switch (unit) { case 0: // HH unitMilliValue = 1000 * 60 * 60; // 3,600,000 ms === 1 hour break; case 1: // MM unitMilliValue = 1000 * 60; // 60,000 ms === 1 minute break; case 2: // SS unitMilliValue = 1000; // 1,000 ms === 1 second break; case 3: // MS unitMilliValue = 1 break; } // 10 hours, 90 minutes, -120 seconds, 3,601,001 ms (01:00:01:001) var nbrUnits = Math.abs(amount); while (nbrUnits > 0) { if (amount >= 0) { newAmount += unitMilliValue; } else { newAmount -= unitMilliValue; } nbrUnits -= 1; } timeMillis = newAmount; outputRollingTimecode() } function outputRollingTimecode() { rollingTimecode.name = "timecode" const hourMilliValue = 1000 * 60 * 60; // 3,600,000 ms === 1 hour const minuteMilliValue = 1000 * 60; // 60,000 ms === 1 minute const secondMilliValue = 1000; // 1,000 ms === 1 second var hhmmssms = Math.abs(timeMillis) var nbrHours = 0 var nbrMins = 0; var nbrSecs = 0; var nbrMillis = 0; while (hhmmssms - hourMilliValue > 0) { hhmmssms -= hourMilliValue nbrHours += 1 } while (hhmmssms - minuteMilliValue > 0) { hhmmssms -= minuteMilliValue; nbrMins +=1 } while (hhmmssms - secondMilliValue >= 0) { hhmmssms -= secondMilliValue; nbrSecs +=1 } nbrMillis = hhmmssms; if (timeMillis < 0) { nbrHours *= -1 nbrMins *= -1 nbrSecs *= -1 nbrMillis *= -1 } var data = {"HH":nbrHours, "MM":nbrMins, "SS":nbrSecs, "MS":nbrMillis} rollingTimecode.set("HH", data["HH"]) outlet(0, data["HH"]); rollingTimecode.set("MM", data["MM"]) outlet(1, data["MM"]); rollingTimecode.set("SS", data["SS"]) outlet(2, data["SS"]); rollingTimecode.set("MS", data["MS"]) outlet(3, data["MS"]); outlet(4, timeMillis); }