var Mixer = function(twine) {
var mixer = this;
mixer.masterAmpChannel = "twine_masteramp";
var masterVu = null;
this.soloChannel = "twine_csolo";
this.ampChannel = "twine_masteramp";
target = $("#twine_mixer");
this.visible = false;
this.hide = function() {
masterVu = null;
mixer.visible = false;
target.empty().hide();
};
this.setVu = function(v) {
if (!masterVu) return;
masterVu.value = v;
};
this.bootAudio = function() {
app.setControlChannel(mixer.ampChannel, 0.8);
app.setControlChannel(mixer.soloChannel, -1);
};
var height = 150;
var width = 30;
this.show = async function () {
masterVu = null;
mixer.visible = true;
target.empty().show();
var soloChannels = [];
var tb = $("
").appendTo($("").appendTo(target));
var trMuteSolo = $("
").appendTo(tb);
var trPan = $("
").appendTo(tb);
var trAmp = $("
").appendTo(tb);
var trName = $("
").appendTo(tb);
for (let c of twine.timeline.channels) {
trName.append($(" | ").css({"text-align": "center"}).text(c.name));
var tdMuteSolo = $(" | ").css({"border-left": "1px solid black", "text-align": "center"}).appendTo(trMuteSolo);
var tdPan = $(" | ").css({"border-left": "1px solid black", "text-align": "center"}).appendTo(trPan);
var tdAmp = $(" | ").css({"border-left": "1px solid black"}).appendTo(trAmp);
var elMuteSolo = $("").appendTo(tdMuteSolo);
var elPan = $("").appendTo(tdPan);
var elAmp = $("").appendTo(tdAmp);
var coMute = new Control({
name: "Mute",
image: "SC_BTNDef5-MUTE_16",
target: elMuteSolo,
channel: c.defaultChannels.mute,
width: width * 0.5,
height: width * 0.5,
noTriggerInit: true,
});
var coSolo = new Control({
image: "SC_BTNDef5-SOLO_16",
target: elMuteSolo,
channel: c.defaultChannels.solo,
min: -1,
max: c.index,
width: width * 0.5,
height: width * 0.5,
noTriggerInit: true,
onChange: function(v, co) {
for (let s of soloChannels) {
s.value = false;
s.element.trigger("change");
}
if (v == c.index) {
co.value = true;
co.element.trigger("change");
}
}
});
soloChannels.push(coSolo);
var coPan = new Control({
name: "Pan",
image: "Timb&HY_Seq16x3v2_KNOB1FX3",
target: elPan,
channel: c.defaultChannels.pan,
width: width,
height: width,
noTriggerInit: true,
onReady: async function(coPan){
coPan.value = await app.getControlChannel(c.defaultChannels.pan);
},
onContextMenu: function(e) {
return twirl.contextMenu.show(e, [
{name: "Show automation", click: function(){
c.expand();
c.showAutomation(0, 1);
}}
]);
}
});
var coAmp = new Control({
name: "Amp",
image: "Sexan_Timb-Slider_29334-128fr",
target: elAmp,
channel: c.defaultChannels.amp,
width: width,
height: height,
noTriggerInit: true,
onReady: async function(coAmp){
coAmp.value = await app.getControlChannel(c.defaultChannels.amp);
},
onContextMenu: function(e) {
return twirl.contextMenu.show(e, [
{name: "Show automation", click: function(){
c.expand();
c.showAutomation(0, 0);
}}
]);
}
});
}
trName.append($(" | "));
trName.append($(" | "));
var tdm = $(" | ").css({"border-left": "2px solid black"}).appendTo(trAmp);
var tdvu = $(" | ").appendTo(trAmp);
var elm = $("").appendTo(tdm);
var elmvu = $("").appendTo(tdvu);
var mc = new Control({
name: "Master",
image: "Sexan_Timb-Slider_29334-128fr",
target: elm,
channel: mixer.masterAmpChannel,
width: width,
height: height,
noTriggerInit: true,
onReady: async function(mc) {
mc.value = await app.getControlChannel(mixer.masterAmpChannel);
}
});
masterVu = new Control({
name: "VU",
image: "Timb_MeterXRAYMANALOGDEF_8320-128",
target: elmvu,
width: 15,
height: height
});
}
};