the main problem with a log slider range of 1-81 will be, that the user won't have any clue how much dB he will boost or attenuate.
the only workaround I found so far is to bring logic's smart controls into the game. it's possible to draw a custom curve to get a log type curve for a linear fader. but I definitely would prefer a solution in my script..
btw: here's the code with the lin fader:
var PluginParameters = [
{name:"VCA Level [dB]", type:"lin", minValue: -70, maxValue: 10, unit:"dB", numberOfSteps:800, defaultValue:0},
{name:"Trim [dB]", type:"lin", minValue: -6, maxValue: 6, unit:"dB", numberOfSteps:1200, defaultValue:0},
{name:'CH 1', type:'menu', valueStrings:['off','on']},
{name:'CH 2', type:'menu', valueStrings:['off','on']},
{name:'CH 3', type:'menu', valueStrings:['off','on']},
{name:'CH 4', type:'menu', valueStrings:['off','on']},
{name:'CH 5', type:'menu', valueStrings:['off','on']},
{name:'CH 6', type:'menu', valueStrings:['off','on']},
{name:'CH 7', type:'menu', valueStrings:['off','on']},
{name:'CH 8', type:'menu', valueStrings:['off','on']},
{name:'CH 9', type:'menu', valueStrings:['off','on']},
{name:'CH 10', type:'menu', valueStrings:['off','on']},
{name:'CH 11', type:'menu', valueStrings:['off','on']},
{name:'CH 12', type:'menu', valueStrings:['off','on']},
{name:'CH 13', type:'menu', valueStrings:['off','on']},
{name:'CH 14', type:'menu', valueStrings:['off','on']},
{name:'CH 15', type:'menu', valueStrings:['off','on']},
{name:'CH 16', type:'menu', valueStrings:['off','on']}
];
// This is a function
function Normalizer(min, max) {
return function(val) {
return (val - min) / (max - min);
}
}
// This is another
function Interpolater(min, max, clamp) {
return function(val) {
val = min + (max - min) * val;
return clamp ? Math.min(Math.max(val, min), max) : val;
}
}
// This is a third
function Scale() {
var domain = new Normalizer(0, 1);
var range = new Interpolater(0, 1);
var s = function(val) {
return range(domain(val));
};
s.domain = function(min, max) {
if (!arguments.length) return domain;
domain = new Normalizer(min, max)
return s
};
s.range = function(min, max, clamp) {
if (!arguments.length) return range;
range = new Interpolater(min, max, clamp)
return s
};
return s;
}
// When the Parameter "VCA Level [dB]" changes, send the new Value to the selected Midi Channel
function ParameterChanged() {
var faderMSB = new ControlChange;
var faderLSB = new ControlChange;
var dBto14bit = new Scale().domain(-70.0, 10.0).range(0, 16383);
var faderlevel = GetParameter("VCA Level [dB]") + GetParameter("Trim [dB]");
if(faderlevel > 10.00) faderlevel = 10.00;
if(faderlevel < -70.00) faderlevel = -70.00;
var input = dBto14bit(faderlevel);
var MSB = ((input >> 7) & 0x7F);
var LSB = input & 0x7F;
for(var i=1; i<=16; i++){
if(GetParameter("CH " + i)){
faderMSB.value = MSB;
faderMSB.number = "7";
faderMSB.channel = i;
faderMSB.send();
faderMSB.value = LSB;
faderMSB.number = "39";
faderMSB.channel = i;
faderMSB.send();
}
}
}