2013-05-25 01:35:57 +00:00
|
|
|
/**
|
2014-02-13 20:17:16 +00:00
|
|
|
* Functions related to faders (slider controls for volume).
|
|
|
|
|
* These functions are intimately tied to the markup defined in
|
|
|
|
|
* the templates in _faders.html.erb
|
|
|
|
|
*/
|
|
|
|
|
(function (g, $) {
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
"use strict";
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
g.JK = g.JK || {};
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
var $draggingFaderHandle = null;
|
|
|
|
|
var $draggingFader = null;
|
2015-07-15 15:04:45 +00:00
|
|
|
var $floater = null;
|
2014-02-13 20:17:16 +00:00
|
|
|
var draggingOrientation = null;
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
var logger = g.JK.logger;
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
function faderClick(e) {
|
2014-11-21 23:16:00 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
e.stopPropagation();
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
var $fader = $(this);
|
2015-07-15 15:04:45 +00:00
|
|
|
var floaterConvert = $fader.data('floaterConverter')
|
2015-02-27 17:51:45 +00:00
|
|
|
var sessionModel = window.JK.CurrentSessionModel || null;
|
2015-12-08 02:25:43 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
if(!$fader.data('has-session-control')) {
|
|
|
|
|
var sessionControllerName = $fader.data('session-controller-name');
|
|
|
|
|
window.JK.prodBubble($fader, 'not-session-controller', {sessionControllerName:sessionControllerName}, {positions:['left', 'right'], offsetParent: $fader.closest('.top-parent'), duration:12000})
|
|
|
|
|
return false;
|
|
|
|
|
}*/
|
|
|
|
|
|
2015-01-06 22:51:19 +00:00
|
|
|
var mediaControlsDisabled = $fader.data('media-controls-disabled');
|
|
|
|
|
if(mediaControlsDisabled) {
|
|
|
|
|
var mediaTrackOpener = $fader.data('media-track-opener');
|
|
|
|
|
window.JK.prodBubble($fader, 'media-controls-disabled', {mediaTrackOpener:mediaTrackOpener}, {positions:['top'], offsetParent: $fader.closest('.screen')})
|
2014-11-21 23:16:00 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-27 17:51:45 +00:00
|
|
|
if(sessionModel && sessionModel.areControlsLockedForJamTrackRecording() && $control.closest('.session-track').data('track_data').type == 'jam_track') {
|
|
|
|
|
window.JK.prodBubble($fader, 'jamtrack-controls-disabled', {}, {positions:['top'], offsetParent: $fader.closest('.screen')})
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-19 15:31:30 +00:00
|
|
|
if($fader.data('showHelpAboutMediaMixers')) {
|
2015-02-27 17:51:45 +00:00
|
|
|
if(sessionModel) {
|
|
|
|
|
if(!sessionModel.hasShownAudioMediaMixerHelp()) {
|
2015-02-19 15:31:30 +00:00
|
|
|
window.JK.prodBubble($fader, 'volume-media-mixers', {}, {positions:['top'], offsetParent: $fader.closest('.screen')})
|
2015-02-27 17:51:45 +00:00
|
|
|
sessionModel.markShownAudioMediaMixerHelp()
|
2015-02-19 15:31:30 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
draggingOrientation = $fader.attr('data-orientation');
|
2014-02-13 20:17:16 +00:00
|
|
|
var offset = $fader.offset();
|
|
|
|
|
var position = { top: e.pageY - offset.top, left: e.pageX - offset.left}
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
var faderPct = faderValue($fader, e, position);
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
if (faderPct < 0 || faderPct > 100) {
|
|
|
|
|
return false;
|
2013-05-25 01:35:57 +00:00
|
|
|
}
|
|
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
if(floaterConvert) {
|
|
|
|
|
window.JK.FaderHelpers.setFloaterValue($fader.find('.floater'), floaterConvert(faderPct))
|
|
|
|
|
}
|
|
|
|
|
|
2014-06-13 17:51:03 +00:00
|
|
|
$fader.parent().triggerHandler('fader_change', {percentage: faderPct, dragging: false})
|
2013-06-11 03:28:12 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
setHandlePosition($fader, faderPct);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
function setHandlePosition($fader, value) {
|
|
|
|
|
var ratio, position;
|
2015-07-15 15:04:45 +00:00
|
|
|
var $handle = $fader.find('div[data-control="fader-handle"]');
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
var orientation = $fader.attr('data-orientation');
|
2014-02-13 20:17:16 +00:00
|
|
|
var handleCssAttribute = getHandleCssAttribute($fader);
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
// required because this method is entered directly when from a callback
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
if (draggingOrientation === "horizontal") {
|
|
|
|
|
ratio = value / 100;
|
|
|
|
|
position = ((ratio * $fader.width()) - (ratio * handleWidth(draggingOrientation))) + 'px';
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
ratio = (100 - value) / 100;
|
|
|
|
|
position = ((ratio * $fader.height()) - (ratio * handleWidth(draggingOrientation))) + 'px';
|
2013-05-25 01:35:57 +00:00
|
|
|
}
|
|
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
$handle.css(handleCssAttribute, position);
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
function faderValue($fader, e, offset) {
|
2015-07-15 15:04:45 +00:00
|
|
|
var orientation = $fader.attr('data-orientation');
|
2014-02-13 20:17:16 +00:00
|
|
|
var getPercentFunction = getVerticalFaderPercent;
|
|
|
|
|
var relativePosition = offset.top;
|
|
|
|
|
if (orientation && orientation == 'horizontal') {
|
|
|
|
|
getPercentFunction = getHorizontalFaderPercent;
|
|
|
|
|
relativePosition = offset.left;
|
|
|
|
|
}
|
|
|
|
|
return getPercentFunction(relativePosition, $fader);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getHandleCssAttribute($fader) {
|
2015-07-15 15:04:45 +00:00
|
|
|
var orientation = $fader.attr('data-orientation');
|
2014-02-13 20:17:16 +00:00
|
|
|
return (orientation === 'horizontal') ? 'left' : 'top';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getVerticalFaderPercent(eventY, $fader) {
|
|
|
|
|
return getFaderPercent(eventY, $fader, 'vertical');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getHorizontalFaderPercent(eventX, $fader) {
|
|
|
|
|
return getFaderPercent(eventX, $fader, 'horizontal');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the current value of the fader as int percent 0-100
|
|
|
|
|
*/
|
|
|
|
|
function getFaderPercent(value, $fader, orientation) {
|
|
|
|
|
var faderSize, faderPct;
|
|
|
|
|
|
|
|
|
|
// the handle takes up room, and all calculations use top. So when the
|
|
|
|
|
// handle *looks* like it's at the bottom by the user, it won't give a 0% value.
|
|
|
|
|
// so, we subtract handleWidth from the size of it's parent
|
|
|
|
|
|
|
|
|
|
if (orientation === "horizontal") {
|
|
|
|
|
faderSize = $fader.width();
|
|
|
|
|
faderPct = Math.round(( value + (value / faderSize * handleWidth(orientation))) / faderSize * 100);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
faderSize = $fader.height();
|
|
|
|
|
faderPct = Math.round((faderSize - handleWidth(orientation) - value) / (faderSize - handleWidth(orientation)) * 100);
|
2013-05-25 01:35:57 +00:00
|
|
|
}
|
|
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
return faderPct;
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
function onFaderDrag(e, ui) {
|
|
|
|
|
var faderPct = faderValue($draggingFader, e, ui.position);
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
// protect against attempts to drag outside of the slider, which jquery.draggable sometimes allows
|
|
|
|
|
if (faderPct < 0 || faderPct > 100) {
|
|
|
|
|
return false;
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
|
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
// simple snap feature to stick to the mid point
|
|
|
|
|
if(faderPct > 46 && faderPct < 54 && $draggingFader.data('snap')) {
|
|
|
|
|
faderPct = 50
|
|
|
|
|
var orientation = $draggingFader.attr('data-orientation');
|
|
|
|
|
if(orientation == 'horizontal') {
|
|
|
|
|
var width = $draggingFader.width()
|
|
|
|
|
var left = width / 2
|
|
|
|
|
ui.position.left = left
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
var height = $draggingFader.height()
|
|
|
|
|
var top = height / 2
|
|
|
|
|
ui.position.top = top
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var floaterConvert = $draggingFaderHandle.data('floaterConverter')
|
|
|
|
|
|
|
|
|
|
if(floaterConvert && $floater) {
|
|
|
|
|
window.JK.FaderHelpers.setFloaterValue($floater, floaterConvert(faderPct))
|
|
|
|
|
}
|
2014-06-13 17:51:03 +00:00
|
|
|
$draggingFader.parent().triggerHandler('fader_change', {percentage: faderPct, dragging: true})
|
2014-02-13 20:17:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function onFaderDragStart(e, ui) {
|
|
|
|
|
$draggingFaderHandle = $(this);
|
2015-07-15 15:04:45 +00:00
|
|
|
$draggingFader = $draggingFaderHandle.closest('div[data-control="fader"]');
|
|
|
|
|
$floater = $draggingFaderHandle.find('.floater')
|
2014-02-13 20:17:16 +00:00
|
|
|
draggingOrientation = $draggingFader.attr('orientation');
|
2014-11-21 23:16:00 +00:00
|
|
|
|
2015-01-06 22:51:19 +00:00
|
|
|
var mediaControlsDisabled = $draggingFaderHandle.data('media-controls-disabled');
|
|
|
|
|
var mediaTrackOpener = $draggingFaderHandle.data('media-track-opener');
|
2015-02-27 17:51:45 +00:00
|
|
|
var sessionModel = window.JK.CurrentSessionModel || null;
|
2015-12-08 02:25:43 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
if(!$draggingFaderHandle.data('has-session-control')) {
|
|
|
|
|
var sessionControllerName = $draggingFaderHandle.data('session-controller-name');
|
|
|
|
|
window.JK.prodBubble($draggingFaderHandle, 'not-session-controller', {sessionControllerName:sessionControllerName}, {positions:['left', 'right'], offsetParent: $draggingFaderHandle.closest('.top-parent'), duration:12000})
|
|
|
|
|
return false;
|
|
|
|
|
}*/
|
|
|
|
|
|
2015-01-06 22:51:19 +00:00
|
|
|
if(mediaControlsDisabled) {
|
2014-11-21 23:16:00 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
2015-02-27 17:51:45 +00:00
|
|
|
|
|
|
|
|
if(sessionModel && sessionModel.areControlsLockedForJamTrackRecording() && $draggingFaderHandle.closest('.session-track').data('track_data').type == 'jam_track') {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-21 23:16:00 +00:00
|
|
|
return true;
|
2014-02-13 20:17:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function onFaderDragStop(e, ui) {
|
2015-02-19 15:31:30 +00:00
|
|
|
|
|
|
|
|
if($draggingFader.data('showHelpAboutMediaMixers')) {
|
|
|
|
|
if(window.JK.CurrentSessionModel) {
|
|
|
|
|
if(!window.JK.CurrentSessionModel.hasShownAudioMediaMixerHelp()) {
|
|
|
|
|
window.JK.prodBubble($draggingFader, 'volume-media-mixers', {}, {positions:['bottom'], offsetParent: $draggingFader.closest('.screen')})
|
|
|
|
|
window.JK.CurrentSessionModel.markShownAudioMediaMixerHelp()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
var faderPct = faderValue($draggingFader, e, ui.position);
|
|
|
|
|
|
|
|
|
|
// protect against attempts to drag outside of the slider, which jquery.draggable sometimes allows
|
|
|
|
|
// do not return 'false' though, because that stops future drags from working, for some reason
|
|
|
|
|
if (faderPct < 0 || faderPct > 100) {
|
|
|
|
|
return;
|
2014-01-05 03:47:23 +00:00
|
|
|
}
|
|
|
|
|
|
2014-06-13 17:51:03 +00:00
|
|
|
$draggingFader.parent().triggerHandler('fader_change', {percentage: faderPct, dragging: false});
|
|
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
$draggingFaderHandle = null;
|
|
|
|
|
$draggingFader = null;
|
|
|
|
|
draggingOrientation = null;
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
function handleWidth(orientation) {
|
|
|
|
|
return orientation === "horizontal" ? 8 : 11;
|
|
|
|
|
}
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
g.JK.FaderHelpers = {
|
2014-01-05 03:47:23 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
/**
|
|
|
|
|
* Render a fader into the element identifed by the provided
|
|
|
|
|
* selector, with the provided options.
|
|
|
|
|
*/
|
|
|
|
|
renderFader: function (selector, userOptions) {
|
2014-06-13 17:51:03 +00:00
|
|
|
selector = $(selector);
|
2014-02-13 20:17:16 +00:00
|
|
|
if (userOptions === undefined) {
|
|
|
|
|
throw ("renderFader: userOptions is required");
|
|
|
|
|
}
|
|
|
|
|
var renderDefaults = {
|
|
|
|
|
faderType: "vertical",
|
|
|
|
|
height: 83, // only used for vertical
|
|
|
|
|
width: 83 // only used for horizontal
|
|
|
|
|
};
|
|
|
|
|
var options = $.extend({}, renderDefaults, userOptions);
|
|
|
|
|
var templateSelector = (options.faderType === 'horizontal') ?
|
|
|
|
|
"#template-fader-h" : '#template-fader-v';
|
|
|
|
|
var templateSource = $(templateSelector).html();
|
|
|
|
|
|
2014-06-13 17:51:03 +00:00
|
|
|
selector.html(g._.template(templateSource, options));
|
2014-02-13 20:17:16 +00:00
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
selector.find('div[data-control="fader"]')
|
|
|
|
|
.data('media-controls-disabled', selector.data('media-controls-disabled'))
|
|
|
|
|
.data('media-track-opener', selector.data('media-track-opener'))
|
|
|
|
|
.data('showHelpAboutMediaMixers', selector.data('showHelpAboutMediaMixers'))
|
|
|
|
|
|
|
|
|
|
selector.find('div[data-control="fader-handle"]').draggable({
|
|
|
|
|
drag: onFaderDrag,
|
|
|
|
|
start: onFaderDragStart,
|
|
|
|
|
stop: onFaderDragStop,
|
|
|
|
|
containment: "parent",
|
|
|
|
|
axis: options.faderType === 'horizontal' ? 'x' : 'y'
|
|
|
|
|
}).data('media-controls-disabled', selector.data('media-controls-disabled'))
|
|
|
|
|
.data('media-track-opener', selector.data('media-track-opener'))
|
|
|
|
|
.data('showHelpAboutMediaMixers', selector.data('showHelpAboutMediaMixers'))
|
|
|
|
|
|
|
|
|
|
// Embed any custom styles, applied to the .fader below selector
|
|
|
|
|
if ("style" in options) {
|
|
|
|
|
for (var key in options.style) {
|
|
|
|
|
selector.find(' .fader').css(key, options.style[key]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
renderFader2: function (selector, userOptions, floaterConverter) {
|
|
|
|
|
selector = $(selector);
|
|
|
|
|
if (userOptions === undefined) {
|
|
|
|
|
throw ("renderFader: userOptions is required");
|
|
|
|
|
}
|
|
|
|
|
var renderDefaults = {
|
2015-12-08 02:25:43 +00:00
|
|
|
faderType: "vertical",
|
|
|
|
|
sessionController: null
|
2015-07-15 15:04:45 +00:00
|
|
|
};
|
|
|
|
|
var options = $.extend({}, renderDefaults, userOptions);
|
|
|
|
|
|
2015-12-08 02:25:43 +00:00
|
|
|
var sessionCanControl = true
|
|
|
|
|
var sessionControllerName = null
|
|
|
|
|
if(userOptions.sessionController) {
|
|
|
|
|
if(!userOptions.sessionController.can_control) {
|
|
|
|
|
sessionCanControl = false
|
|
|
|
|
sessionControllerName = userOptions.sessionController.session_controller.name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
selector.find('div[data-control="fader"]')
|
2015-02-19 15:31:30 +00:00
|
|
|
.data('media-controls-disabled', selector.data('media-controls-disabled'))
|
|
|
|
|
.data('media-track-opener', selector.data('media-track-opener'))
|
|
|
|
|
.data('showHelpAboutMediaMixers', selector.data('showHelpAboutMediaMixers'))
|
2015-07-15 15:04:45 +00:00
|
|
|
.data('floaterConverter', floaterConverter)
|
|
|
|
|
.data('snap', userOptions.snap)
|
2015-12-08 02:25:43 +00:00
|
|
|
.data('has-session-control', sessionCanControl)
|
|
|
|
|
.data('session-controller-name', sessionControllerName)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(userOptions.sessionController) {
|
|
|
|
|
|
|
|
|
|
}
|
2014-11-21 23:16:00 +00:00
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
selector.find('div[data-control="fader-handle"]').draggable({
|
2014-02-13 20:17:16 +00:00
|
|
|
drag: onFaderDrag,
|
|
|
|
|
start: onFaderDragStart,
|
|
|
|
|
stop: onFaderDragStop,
|
|
|
|
|
containment: "parent",
|
|
|
|
|
axis: options.faderType === 'horizontal' ? 'x' : 'y'
|
2015-02-19 15:31:30 +00:00
|
|
|
}).data('media-controls-disabled', selector.data('media-controls-disabled'))
|
|
|
|
|
.data('media-track-opener', selector.data('media-track-opener'))
|
|
|
|
|
.data('showHelpAboutMediaMixers', selector.data('showHelpAboutMediaMixers'))
|
2015-07-15 15:04:45 +00:00
|
|
|
.data('floaterConverter', floaterConverter)
|
|
|
|
|
.data('snap', userOptions.snap)
|
2015-12-08 02:25:43 +00:00
|
|
|
.data('has-session-control', sessionCanControl)
|
|
|
|
|
.data('session-controller-name', sessionControllerName)
|
2014-02-13 20:17:16 +00:00
|
|
|
|
|
|
|
|
// Embed any custom styles, applied to the .fader below selector
|
|
|
|
|
if ("style" in options) {
|
|
|
|
|
for (var key in options.style) {
|
2014-06-13 17:51:03 +00:00
|
|
|
selector.find(' .fader').css(key, options.style[key]);
|
2013-05-25 01:35:57 +00:00
|
|
|
}
|
2014-02-13 20:17:16 +00:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
convertLinearToDb: function (input) {
|
2014-03-04 00:09:27 +00:00
|
|
|
|
|
|
|
|
// deal with extremes better
|
|
|
|
|
if (input <= 1) { return -80; }
|
|
|
|
|
if (input >= 99) { return 20; }
|
|
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
var temp;
|
|
|
|
|
temp = 0.0;
|
|
|
|
|
// coefficients
|
|
|
|
|
var a = -8.0013990435159329E+01;
|
|
|
|
|
var b = 4.1755639785242042E+00;
|
|
|
|
|
var c = -1.4036729740086906E-01;
|
|
|
|
|
var d = 3.1788545454166156E-03;
|
|
|
|
|
var f = -3.5148685730880861E-05;
|
|
|
|
|
var g = 1.4221429222004657E-07;
|
|
|
|
|
temp += a +
|
|
|
|
|
b * input +
|
|
|
|
|
c * Math.pow(input, 2.0) +
|
|
|
|
|
d * Math.pow(input, 3.0) +
|
|
|
|
|
f * Math.pow(input, 4.0) +
|
|
|
|
|
g * Math.pow(input, 5.0);
|
|
|
|
|
|
|
|
|
|
return temp;
|
|
|
|
|
},
|
|
|
|
|
|
2014-07-31 01:03:07 +00:00
|
|
|
|
|
|
|
|
convertPercentToAudioTaper: function (input) {
|
|
|
|
|
|
|
|
|
|
// composite function resembling audio taper
|
|
|
|
|
if (input <= 1) { return -80; }
|
2015-07-15 15:04:45 +00:00
|
|
|
if (input <= 28) { return Math.round((2 * input - 80)); } // -78 to -24 db
|
|
|
|
|
if (input <= 79) { return Math.round((0.5 * input - 38)); } // -24 to 1.5 db
|
|
|
|
|
if (input < 99) { return Math.round((0.875 * input - 67.5)); } // 1.625 - 19.125 db
|
2014-07-31 01:03:07 +00:00
|
|
|
if (input >= 99) { return 20; }
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
convertAudioTaperToPercent: function(db) {
|
|
|
|
|
if(db <= -78) { return 0}
|
|
|
|
|
if(db <= -24) { return (db + 80) / 2 }
|
|
|
|
|
if(db <= 1.5) { return (db + 38) / .5 }
|
|
|
|
|
if(db <= 19.125) { return (db + 67.5) / 0.875 }
|
|
|
|
|
return 100;
|
|
|
|
|
},
|
|
|
|
|
|
2014-07-31 01:03:07 +00:00
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
setFaderValue: function (faderId, faderValue, floaterValue) {
|
|
|
|
|
var $fader = $('[data-fader-id="' + faderId + '"]');
|
2014-02-13 20:17:16 +00:00
|
|
|
this.setHandlePosition($fader, faderValue);
|
2015-07-15 15:04:45 +00:00
|
|
|
if(floaterValue !== undefined) {
|
|
|
|
|
var $floater = $fader.find('.floater')
|
|
|
|
|
this.setFloaterValue($floater, floaterValue)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
showFader: function(faderId) {
|
|
|
|
|
var $fader = $('[data-fader-id="' + faderId + '"]');
|
|
|
|
|
$fader.find('div[data-control="fader-handle"]').show()
|
2014-02-13 20:17:16 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
setHandlePosition: function ($fader, faderValue) {
|
2015-07-15 15:04:45 +00:00
|
|
|
draggingOrientation = $fader.attr('data-orientation');
|
2014-02-13 20:17:16 +00:00
|
|
|
setHandlePosition($fader, faderValue);
|
|
|
|
|
draggingOrientation = null;
|
|
|
|
|
},
|
|
|
|
|
|
2015-07-15 15:04:45 +00:00
|
|
|
setFloaterValue: function($floater, floaterValue) {
|
|
|
|
|
$floater.text(floaterValue)
|
|
|
|
|
},
|
|
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
initialize: function () {
|
2015-07-15 15:04:45 +00:00
|
|
|
$('body').on('click', 'div[data-control="fader"]', faderClick);
|
2014-02-13 20:17:16 +00:00
|
|
|
}
|
2013-05-25 01:35:57 +00:00
|
|
|
|
2014-02-13 20:17:16 +00:00
|
|
|
};
|
2013-05-25 01:35:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
})(window, jQuery);
|