Created
March 21, 2012 00:51
-
-
Save pwhelan/2143197 to your computer and use it in GitHub Desktop.
Smoothslider
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ----------------- BEGIN SmoothSlider functions ----------------- | |
SmoothSlider = function() {} | |
SmoothSlider.Step = 0.7; | |
SmoothSlider.Steps = 127; | |
SmoothSlider.generateTable = function(mrange, step) | |
{ | |
var sliderTable = new Array(); | |
var range = Math.round(mrange * 100); | |
if (( range % 10 ) && (range != 8)) | |
range += ( range - (range % 10 )); | |
print("GENERATING TABLE FOR: " + range + " => " + step); | |
SmoothSlider.Range = range; | |
// Clear Table with NaN's | |
for (var i = 0; i <= SmoothSlider.Steps; i++) | |
sliderTable[i] = NaN; | |
var stepings = (range / step).toFixed(0); | |
var pos = ((SmoothSlider.Steps-1)/2-1); | |
var left = pos % stepings; | |
var steps = (pos / stepings).toFixed(0); | |
if ( steps <= 0 ) { | |
//print('Not Enough MIDI Steps...'); | |
return; | |
} | |
else { | |
//print("Steps = " + SmoothSlider.Steps + " stepings = " + steps + " steps=" + steps + " left=" + left); | |
} | |
for (var i = 0; i <= SmoothSlider.Steps; i++) { | |
var q = (i - pos - 1); | |
var perc; | |
if ( Math.abs(q) < (left/2)) { | |
perc = 0; | |
} | |
else { | |
if ( q > 0) | |
q = q - (left/2); | |
else | |
q = q + (left/2); | |
perc = (q * (step / steps)) | |
} | |
if ( perc < -range ) | |
perc = -range; | |
else if ( perc > range ) | |
perc = range; | |
sliderTable[i] = perc; | |
} | |
return sliderTable; | |
} | |
SmoothSlider.init = function(id) | |
{ | |
} | |
SmoothSlider.generate = function() | |
{ | |
SmoothSlider.Decks = new Array(); | |
var decks = engine.getValue("[Master]", "num_decks"); | |
for (var deck = 0; deck < decks; deck++) { | |
var initDeck = function(deck) { | |
var channel = "[Channel"+(deck+1)+"]"; | |
var rateRange = engine.getValue(channel, "rateRange"); | |
var bpm = engine.getValue(channel, "bpm"); | |
var step = SmoothSlider.Step | |
if ( bpm ) { | |
step = Math.round((100 / bpm)*20)/20; | |
} | |
SmoothSlider.Decks[deck] = { | |
table: SmoothSlider.generateTable(rateRange, step), | |
step: step, | |
range: rateRange | |
}; | |
var refresh = function() { | |
SmoothSlider.Decks[deck].table = | |
SmoothSlider.generateTable( | |
SmoothSlider.Decks[deck].range, | |
SmoothSlider.Decks[deck].step | |
); | |
}; | |
engine.connectControl(channel,"rateRange", function(rateRange) { | |
SmoothSlider.Decks[deck].range = rateRange; | |
refresh(); | |
}); | |
engine.connectControl(channel, "file_bpm", function(bpm) { | |
print("BPM CHANGE=" + bpm + " CHANNEL=" + channel + " DECK=" +deck); | |
if (bpm) { | |
SmoothSlider.Decks[deck].step = Math.round((100 / bpm)*20)/20;; | |
refresh(); | |
} | |
}); | |
}; | |
initDeck(deck); | |
} | |
} | |
SmoothSlider.shutdown = function() | |
{ | |
} | |
SmoothSlider.pitchShift = function(channel, control, value, status, group) | |
{ | |
var m = group.match(/\[Channel(\d+)\]/); | |
if (!m) { | |
print("Group is not a channel: " + group); | |
} | |
var deck = parseInt(m[1])-1; | |
var pitch = SmoothSlider.Decks[deck].table[value]; | |
var rate = 0; | |
//print("VALUE=" + value + " GROUP=" + group + " DECK=" + deck + " PITCH=" + pitch + " RANGE=" + SmoothSlider.Decks[deck].range); | |
if ( isNaN(pitch)) { | |
print("USING DEFAULT VALUE FOR SMOOTH SLIDER !#@"); | |
rate = script.absoluteSlider(group, "rate", value, -2, 1); | |
} | |
else { | |
rate = pitch / (SmoothSlider.Decks[deck].range*100); | |
print("Value[" + value + "] = " + pitch + " / " + rate); | |
engine.setValue(group, "rate", rate); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment