Skip to content

Instantly share code, notes, and snippets.

@Korilakkuma
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Korilakkuma/a9eeff1b6d3ce36360e5 to your computer and use it in GitHub Desktop.
Save Korilakkuma/a9eeff1b6d3ce36360e5 to your computer and use it in GitHub Desktop.
X Sound legacy controller
$(function() {
(function() {
var image = 'data:image/gif;base64,R0lGODlhzAAMALMOANke2bNms69ar5kMmeBm4N1I3Z4ent9a36QzpKpIqtsz29cM14AAgMwAzP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4ODE1RjYyMzY5MkFFMzExODIxODhGNkJGNkEzNDYxRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3N0UwRjBDOUM3QTQxMUUzQjJGN0Y3OUQ4Mjc0RDVGNyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3N0UwRjBDOEM3QTQxMUUzQjJGN0Y3OUQ4Mjc0RDVGNyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMWNjMTFiMC05OTc3LTRjMGMtYjJiOS1iODU0YTc0NGI1ZTkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODgxNUY2MjM2OTJBRTMxMTgyMTg4RjZCRjZBMzQ2MUUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFAAAOACwAAAAAzAAMAAAElTDISau9OOvNu/9gKI6eYJ5oqq5s675wLM90bd9you987//AoHBILBqPyKRyaUQ4n9CodEqtWq/YrHbL7Xq/WoN4TC6bz+i0es1uu9/wuHzuHtjv+Lx+z+/7/4CBgoOEhYaHggyKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLgRACH5BAUCAA4ALAAAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACwEAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsCAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALAwAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACwQAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsFAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALBgAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACwcAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsIAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALCQAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACwoAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsLAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALDAAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACw0AAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsOAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALDwAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACxAAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsRAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALEgAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACxMAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsUAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALFQAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACxYAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsXAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALGAAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACxkAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsaAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALGwAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACxwAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsdAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALHgAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACx8AAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsgAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALIQAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACyIAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsjAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALJAAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACyUAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsmAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALJwAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACygAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAspAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALKgAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACysAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAssAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALLQAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACy4AAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsvAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBACH5BAUCAA4ALMAAAAAEAAwAAAQTkEhy6im4qK2AB0u4NGRpnmgZAQAh+QQFAgAOACzEAAAABAAMAAAEE5BIcuopuKitgAdLuDRkaZ5oGQEAIfkEBQIADgAsyAAAAAQADAAABBOQSHLqKbiorYAHS7g0ZGmeaBkBADs=';
var html = '';
html += '<div id="page-loading">';
html += '<p>Now Loading ... (<span>0 %</span>)</p>';
html += '<div id="progress-wrap"><div id="progress-mask"></div><div id="progress-bar"></div></div>';
html += '</div>';
$('header').hide();
$('body').addClass('radial-gradient').append(html);
// jQuery UI tooltip
$('body').tooltip({
tooltipClass : 'ui-tooltip-custom'
});
// jQuery UI Sortable
$('#page .container:first, #page .container:last').sortable({
axis : 'x',
cancel : 'fieldset, :input, button, label, a, #piano',
// containment : 'parent',
cursor : 'move',
opacity : 0.6
// revert : true
});
// for Safari
var userAgent = navigator.userAgent.toLowerCase();
if ((userAgent.indexOf('chrome') === -1) && (userAgent.indexOf('safari') !== -1)) {
$('link:last').after('<link rel="stylesheet" href="css/myworks/mac.css" type="text/css" media="all" />');
}
$('#select-sound-source').select2();
})();
if (X.IS_XSOUND) {
var isEnabledOneshot = false;
var currentSoundSource = 'oscillator'; // either 'oscillator' or 'one-shot'
X('mixer').resize(4096);
X('oscillator').resize(4096);
X('oneshot').resize(4096);
X('audio').resize(8192);
X('stream').resize(512);
var cloned = X.clone(); // for MML of OscillatorModule
cloned('oscillator').resize(4096);
// Not used
X.free([
X('media'),
X('fallback'),
cloned('mixer'),
cloned('oneshot'),
cloned('audio'),
cloned('media'),
cloned('fallback'),
cloned('mml')
]);
var base = '';
if (location.host === 'localhost') {
base = location.protocol + '//' + location.host + '/~rilakkuma3xjapan/portfolio-x-sound/audio/';
} else {
base = location.protocol + '//' + location.host + location.pathname + '/audio/';
}
var oneshots = [
(base + 'one-shot/piano-2/C.wav'),
(base + 'one-shot/piano-2/D.wav'),
(base + 'one-shot/piano-2/E.wav'),
(base + 'one-shot/piano-2/F.wav'),
(base + 'one-shot/piano-2/G.wav'),
(base + 'one-shot/piano-2/A.wav'),
(base + 'one-shot/piano-2/B.wav')
];
// Load impulse responses
var reverbs = [];
var rirs = [];
if (navigator.userAgent.toLowerCase().indexOf('firefox') === -1) {
// Chrome, Opera, Safari
rirs = [
/*
(base + 'impulse-responses/s1_r1_b.wav'),
(base + 'impulse-responses/s1_r2_b.wav'),
(base + 'impulse-responses/s1_r3_b.wav'),
(base + 'impulse-responses/s1_r4_b.wav'),
(base + 'impulse-responses/s2_r1_b.wav'),
(base + 'impulse-responses/s2_r2_b.wav'),
(base + 'impulse-responses/s2_r3_b.wav'),
(base + 'impulse-responses/s2_r4_b.wav'),
(base + 'impulse-responses/s3_r1_b.wav'),
(base + 'impulse-responses/s3_r2_b.wav'),
(base + 'impulse-responses/s3_r3_b.wav'),
(base + 'impulse-responses/s3_r4_b.wav'),
(base + 'impulse-responses/s1_r1_bd.wav'),
(base + 'impulse-responses/s1_r2_bd.wav'),
(base + 'impulse-responses/s1_r3_bd.wav'),
(base + 'impulse-responses/s1_r4_bd.wav'),
(base + 'impulse-responses/s2_r1_bd.wav'),
(base + 'impulse-responses/s2_r2_bd.wav'),
(base + 'impulse-responses/s2_r3_bd.wav'),
(base + 'impulse-responses/s2_r4_bd.wav'),
(base + 'impulse-responses/s3_r1_bd.wav'),
(base + 'impulse-responses/s3_r2_bd.wav'),
(base + 'impulse-responses/s3_r3_bd.wav'),
(base + 'impulse-responses/s3_r4_bd.wav'),
*/
(base + 'impulse-responses/s1_r1_c.wav'),
(base + 'impulse-responses/s1_r2_c.wav'),
(base + 'impulse-responses/s1_r3_c.wav'),
(base + 'impulse-responses/s1_r4_c.wav'),
(base + 'impulse-responses/s2_r1_c.wav'),
(base + 'impulse-responses/s2_r2_c.wav'),
(base + 'impulse-responses/s2_r3_c.wav'),
(base + 'impulse-responses/s2_r4_c.wav'),
(base + 'impulse-responses/s3_r1_c.wav'),
(base + 'impulse-responses/s3_r2_c.wav'),
(base + 'impulse-responses/s3_r3_c.wav'),
(base + 'impulse-responses/s3_r4_c.wav'),
(base + 'impulse-responses/s1_r1_o.wav'),
(base + 'impulse-responses/s1_r2_o.wav'),
(base + 'impulse-responses/s1_r3_o.wav'),
(base + 'impulse-responses/s1_r4_o.wav'),
(base + 'impulse-responses/s2_r1_o.wav'),
(base + 'impulse-responses/s2_r2_o.wav'),
(base + 'impulse-responses/s2_r3_o.wav'),
(base + 'impulse-responses/s2_r4_o.wav'),
(base + 'impulse-responses/s3_r1_o.wav'),
(base + 'impulse-responses/s3_r2_o.wav'),
(base + 'impulse-responses/s3_r3_o.wav'),
(base + 'impulse-responses/s3_r4_o.wav'),
(base + 'impulse-responses/s1_p1_o.wav'),
(base + 'impulse-responses/s1_p2_o.wav'),
(base + 'impulse-responses/s1_p3_o.wav'),
(base + 'impulse-responses/s2_p1_o.wav'),
(base + 'impulse-responses/s2_p2_o.wav'),
(base + 'impulse-responses/s2_p3_o.wav'),
(base + 'impulse-responses/s3_p1_o.wav'),
(base + 'impulse-responses/s3_p2_o.wav'),
(base + 'impulse-responses/s3_p3_o.wav')
];
}
// for one-shot audio
var settings = new Array(88);
var sharps = [1, 4, 6, 9, 11, 13, 16, 18, 21, 23, 25, 28, 30, 33, 35, 37, 40, 42, 45, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 81, 83, 85];
for (var i = 0, len = settings.length; i < len; i++) {
var setting = {
buffer : 0,
rate : 1,
loop : false,
start : 0,
end : 0,
volume : 1
};
var isSharp = (sharps.indexOf(i) !== -1) ? true : false;
switch (parseInt((i + 9) % 12)) {
case 0 :
case 1 :
setting.buffer = 0;
break;
case 2 :
case 3 :
setting.buffer = 1;
break;
case 4 :
setting.buffer = 2;
break;
case 5 :
case 6 :
setting.buffer = 3;
break;
case 7 :
case 8 :
setting.buffer = 4;
break;
case 9 :
case 10 :
setting.buffer = 5;
break;
case 11 :
setting.buffer = 6;
break;
default :
break;
}
if ((i >= 0) && (i <= 2)) {
setting.rate = 0.0625;
} else if ((i >= 3) && (i <= 14)) {
setting.rate = 0.125;
} else if ((i >= 15) && (i <= 26)) {
setting.rate = 0.25;
} else if ((i >= 27) && (i <= 38)) {
setting.rate = 0.5;
} else if ((i >= 39) && (i <= 50)) {
setting.rate = 1;
} else if ((i >= 51) && (i <= 62)) {
setting.rate = 2;
} else if ((i >= 63) && (i <= 74)) {
setting.rate = 4;
} else if ((i >= 75) && (i <= 86)) {
setting.rate = 8;
} else if ((i >= 87) && (i <= 98)) {
setting.rate = 16;
}
if (isSharp) {
setting.rate *= Math.pow(2, (1 / 12));
}
settings[i] = setting;
}
// Load one-shot audio files
try {
X('oneshot').setup({
resources : oneshots,
settings : settings,
timeout : 60000,
success : function(event, buffers) {
isEnabledOneshot = true;
// Can select one-shot audio (Piano)
$('#select-sound-source > option:first-child').after('<option value="one-shot">PIANO</option>');
var loadUI = function() {
// Close dialog
$('#dialog-load-oneshot').dialog('close');
$('#dialog-load-oneshot').remove();
$('#page-loading').remove();
$('html, body').css('height', 'auto');
$('header').show();
// Opening animation
$('header > div:nth-child(2)').addClass('opening').css('top', (parseInt(($(window).innerHeight()) / 4) + 'px'));
$('header div #logo').fadeTo(3000, 1.0, 'easeInQuint');
$('header div #intro p').show(); // Invisibility (JavaScript OFF) -> Visibility (JavaScript ON)
// $('header div nav').html('<a href="" id="button-start-application">START</a>');
$('.container, footer').show().fadeTo(4000, 0.25, 'easeInQuint');
$('header div nav').html('<a href="" id="button-start-application">START</a>');
$('#button-start-application').fadeTo(1500, 1.0, 'easeInQuint').on(EventWrapper.CLICK, function() {
// Invisibility
$('#button-start-application').stop().fadeOut('fast', 'easeInQuint');
$('header').stop().fadeOut(3000, 'easeInQuint', function() {
$(this).hide();
});
// Visibility
$('.container, footer').stop().fadeTo(2000, 1.0, 'easeInQuint');
var logo = '';
logo += '<img src="images/illust/png/logo-v09.png" class="logo-move" alt="X Sound" width="200" height="100" />';
logo += '<img src="images/illust/png/logo-v09.png" class="logo-move" alt="X Sound" width="200" height="100" />';
logo += '<img src="images/illust/png/logo-v09.png" class="logo-move" alt="X Sound" width="200" height="100" />';
logo += '<img src="images/illust/png/logo-v09.png" class="logo-move" alt="X Sound" width="200" height="100" />';
logo += '<img src="images/illust/png/logo-v09.png" class="logo-move" alt="X Sound" width="200" height="100" />';
logo += '<img src="images/illust/png/logo-v09.png" class="logo-move" alt="X Sound" width="200" height="100" />';
$('#logo').html(logo);
$('#intro-line-1, #intro-line-3').addClass('line-out-left');
$('#intro-line-2').addClass('line-out-right');
// Remove event handler
$(window).off('load');
return false;
});
};
// Next, Load RIRs
if (rirs.length > 0) {
for (var i = 0, len = rirs.length; i < len; i++) {
X.ajax(rirs[i], 60000, function(event, arrayBuffer) {
X.decode(X.get(), arrayBuffer, function(audioBuffer) {
reverbs.push(audioBuffer);
var rate = Math.floor((reverbs.length / rirs.length) * 100) + ' %';
$('#page-loading p span').text(rate);
$('#progress-bar').stop().animate({width : rate.replace(' %', '%')}, 'slow', 'easeOutQuint');
if (reverbs.length === rirs.length) {
X('mixer').module('reverb').preset(reverbs);
X('oscillator').module('reverb').preset(reverbs);
cloned('oscillator').module('reverb').preset(reverbs);
X('oneshot').module('reverb').preset(reverbs);
X('audio').module('reverb').preset(reverbs);
X('stream').module('reverb').preset(reverbs);
loadUI();
}
}, function() {
loadUI();
});
}, function(event, textStatus) {
// Close dialog
$('#dialog-load-oneshot').dialog('close');
$('#dialog-load-oneshot').remove();
// for displaying error
$('#sound-source-controllers').append('<div id="dialog-error-load-rirs"><p></p></div>');
// Define dialog
$('#dialog-error-load-rirs').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-error-load-rirs p').html('<b>The loading of RIRs failed.</b>');
$('#dialog-error-load-rirs').dialog('open');
});
}
} else {
loadUI();
}
},
error : function(object, textStatus) {
// Close dialog
$('#dialog-load-oneshot').dialog('close');
$('#dialog-load-oneshot').remove();
// for displaying error
$('#sound-source-controllers').append('<div id="dialog-error-load-oneshot"><p></p></div>');
// Define dialog
$('#dialog-error-load-oneshot').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-error-load-oneshot p').html('<b>The loading of audio files failed.</b>');
$('#dialog-error-load-oneshot').dialog('open');
},
progress : function(event) {
}
});
} catch (error) {
// Close dialog
$('#dialog-load-oneshot').dialog('close');
$('#dialog-load-oneshot').remove();
// for displaying error
$('#sound-source-controllers').append('<div id="dialog-error-load-oneshot"><p></p></div>');
// Define dialog
$('#dialog-error-load-oneshot').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-error-load-oneshot p').html('<b>' + error.message + '</b>');
$('#dialog-error-load-oneshot').dialog('open');
}
var decodeCallback = function(arrayBuffer) {
$('#audio-controllers').append('<div id="dialog-decode-audio"></div>');
// Define dialog
$('#dialog-decode-audio').dialog({
title : 'Decoding...',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 'auto',
height : 'auto',
draggable : true,
resizable : false
});
$('#dialog-decode-audio').html('<div><img src="images/illust/gif/progress-bar.gif" alt="Decoding ..." width="214" height="12" /></div>');
$('#dialog-decode-audio').dialog('open');
};
var readyCallback = function(buffer) {
var duration = buffer.duration;
// Close dialog
$('#dialog-decode-audio').dialog('close');
$('#dialog-decode-audio').remove();
// Change UI
$('#audio-control').removeClass('active');
// Set audio duration time
$('#slider-audio-offset').slider('option', 'max', duration);
$('#spinner-audio-offset').spinner('option', 'max', duration);
// Update UI value
var times = X.convertTime(duration);
$('#audio-duration').text(('0' + Math.floor(times.minutes)).slice(-2) + ' : ' + ('0' + Math.floor(times.seconds)).slice(-2) + '.' + String(times.milliseconds).slice(2, 4));
$('#audio-offset').text('00 : 00.00');
$('#slider-audio-offset').slider('value', 0);
$('#spinner-audio-offset').spinner('value', 0);
};
var startCallback = function(source, currentTime) {
X('audio').module('session').start();
$('#audio-control').addClass('active');
};
var stopCallback = function(source, currentTime) {
$('#audio-control').removeClass('active');
};
var updateCallback = function(source, currentTime) {
var times = X.convertTime(currentTime);
$('#audio-offset').text(('0' + times.minutes).slice(-2) + ' : ' + ('0' + times.seconds).slice(-2) + '.' + String(times.milliseconds).slice(2, 4));
$('#slider-audio-offset').slider('value', currentTime);
$('#spinner-audio-offset').val(Math.floor(currentTime));
};
var endedCallback = function(source, currentTime) {
$('#audio-control').removeClass('active');
$('#audio-offset').text('00 : 00');
$('#slider-audio-offset').slider('value', 0);
$('#spinner-audio-offset').val(0);
X('audio').module('analyser').domain('time-all-L').update(0);
X('audio').module('analyser').domain('time-all-R').update(0);
};
var drawNodeCallback = function(currentTime) {
if ((currentTime >= 0) && (currentTime <= X('audio').param('duration'))) {
X('audio').param('currentTime', currentTime);
X('audio').module('analyser').domain('time-all-L').update(currentTime);
X('audio').module('analyser').domain('time-all-R').update(currentTime);
updateCallback(null, currentTime);
}
};
X('audio').setup({
decode : decodeCallback,
ready : readyCallback,
start : startCallback,
stop : stopCallback,
update : updateCallback,
ended : endedCallback
});
X('oscillator').setup([true, false, false, false]);
cloned('oscillator').setup([false, false, false, false]);
X('stream').setup(false, function(stream) {
console.dir(stream);
}, function(error) {
// for displaying error
$('#sound-source-controllers').append('<div id="dialog-error-web-rtc"><p></p></div>');
// Define dialog
$('#dialog-error-web-rtc').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-error-web-rtc p').html('<b>Cancel Microphone.</b>');
$('#dialog-error-web-rtc').dialog('open');
console.dir(error);
});
$('#select-sound-source').on('change', function() {
var mml = ($('#textarea-mml').val() !== '') ? $('#textarea-mml').val() : $('#textarea-mml').attr('placeholder');
var mmls = mml.split(/\|+/);
switch ($(this).val()) {
case 'oscillator' :
if (mmls.length > 0) {
X('mml').ready(X('oscillator'), mmls[0]);
cloned('mml').ready(cloned('oscillator'), []);
}
if (mmls.length > 1) {
cloned('mml').ready(cloned('oscillator'), mmls[1]);
}
$('#mml-control').removeClass('active');
currentSoundSource = $(this).val();
X('stream').stop();
break;
case 'one-shot' :
if (isEnabledOneshot) {
X('mml').ready(X('oneshot'), mmls);
$('#mml-control').removeClass('active');
currentSoundSource = $(this).val();
}
X('stream').stop();
break;
case 'microphone' :
try {
X('stream').start();
X('stream').module('session').start();
} catch (error) {
// for displaying error
$('#sound-source-controllers').append('<div id="dialog-cannot-use-web-rtc"><p></p></div>');
// Define dialog
$('#dialog-cannot-use-web-rtc').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-cannot-use-web-rtc p').html('<b>' + error.message.replace('WebRTC', 'Microphone') + '</b>');
$('#dialog-cannot-use-web-rtc').dialog('open');
}
break;
case 'midi' :
X('stream').stop();
break;
default :
break;
}
});
} else {
// Display UI
$('[id*="slider-"]').slider({
value : 0.5,
min : 0,
max : 1,
step : 0.1,
range : 'min',
animate : 'slow'
});
$('input[id*="spinner-"]').spinner({
min : 0,
max : 1,
step : 0.1
}).spinner('value', 0.5);
$('select').select2();
// Tab-Pannel
$($('#visualization-of-sound dl dt a.selected').attr('href')).hide();
$('#visualization-of-sound dl dt a').on(EventWrapper.CLICK, function() {
$('#visualization-of-sound dl[id*="time-all"]').hide();
$('#visualization-of-sound dl dt a.selected').removeClass('selected');
$($(this).attr('href')).show();
$($(this).attr('href') + ' dt a').addClass('selected');
return false;
});
$('header').append('<div id="dialog-cannnot-use-webaudioapi"><p></p></div>');
// Define dialog
$('#dialog-cannnot-use-webaudioapi').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 500,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-cannnot-use-webaudioapi p').html('<b>Your Browser does not support Web Audio API. Please use Chrome, Opera, Firefox (Mac / Windows) or Safari (Mac).</b>');
$('#dialog-cannnot-use-webaudioapi').dialog('open');
return;
}
// Event for create sound
(function() {
var pianoKeys = [
'A-4', 'A-4h', 'B-4',
'C-3', 'C-3h', 'D-3', 'D-3h', 'E-3', 'F-3', 'F-3h', 'G-3', 'G-3h', 'A-3', 'A-3h', 'B-3',
'C-2', 'C-2h', 'D-2', 'D-2h', 'E-2', 'F-2', 'F-2h', 'G-2', 'G-2h', 'A-2', 'A-2h', 'B-2',
'C-1', 'C-1h', 'D-1', 'D-1h', 'E-1', 'F-1', 'F-1h', 'G-1', 'G-1h', 'A-1', 'A-1h', 'B-1',
'C', 'Ch', 'D', 'Dh', 'E', 'F', 'Fh', 'G', 'Gh', 'A', 'Ah', 'B',
'C1', 'C1h', 'D1', 'D1h', 'E1', 'F1', 'F1h', 'G1', 'G1h', 'A1', 'A1h', 'B1',
'C2', 'C2h', 'D2', 'D2h', 'E2', 'F2', 'F2h', 'G2', 'G2h', 'A2', 'A2h', 'B2',
'C3', 'C3h', 'D3', 'D3h', 'E3', 'F3', 'F3h', 'G3', 'G3h', 'A3', 'A3h', 'B3',
'C4'
];
$('#piano #white li, #piano #black li').on(EventWrapper.START, function() {
var index = pianoKeys.indexOf($(this).attr('id'));
if (index === -1) {
return; // .skip
}
if (currentSoundSource === 'oscillator') {
X('oscillator').ready(0, 0).start(X.toFrequencies(index));
cloned('oscillator').ready(0, 0).start(X.toFrequencies(index));
X('mixer').mix([X('oscillator'), cloned('oscillator')]);
X('mixer').module('recorder').start();
X('mixer').module('session').start();
} else {
X('oneshot').ready(0, 0).start(index);
X('oneshot').module('recorder').start();
X('oneshot').module('session').start();
}
$(this).removeClass('key-off').addClass('key-on');
}).on(EventWrapper.END, function() {
var index = pianoKeys.indexOf($(this).attr('id'));
if (index === -1) {
return; // .skip
}
if (currentSoundSource === 'oscillator') {
X('oscillator').stop();
cloned('oscillator').stop();
// X('mixer').stop();
} else {
X('oneshot').stop(index);
}
$(this).removeClass('key-on').addClass('key-off');
});
// MML Player
var mmlSetups = {
start : function(sequence, index) {
if (currentSoundSource === 'oscillator') {
X('mixer').mix([X('oscillator'), cloned('oscillator')]);
}
if (sequence.indexes[index] !== 'R') {
$('#' + pianoKeys[sequence.indexes[index]]).removeClass('key-off').addClass('key-on');
}
},
stop : function(sequence, index) {
if (sequence.indexes[index] !== 'R') {
$('#' + pianoKeys[sequence.indexes[index]]).removeClass('key-on').addClass('key-off');
}
},
ended : function() {
for (var i = 1, len = X('oscillator').length(); i < len; i++) {
X('oscillator', i).state(false);
}
for (var i = 1, len = cloned('oscillator').length(); i < len; i++) {
cloned('oscillator', i).state(false);
}
var mml = ($('#textarea-mml').val() !== '') ? $('#textarea-mml').val() : $('#textarea-mml').attr('placeholder');
var mmls = mml.split(/\|+/);
if (currentSoundSource === 'oscillator') {
if (mmls.length > 0) {
X('mml').ready(X('oscillator'), mmls[0]);
cloned('mml').ready(cloned('oscillator'), []);
}
if (mmls.length > 1) {
cloned('mml').ready(cloned('oscillator'), mmls[1]);
}
} else {
X('mml').ready(X('oneshot'), mmls);
}
$('#mml-control').removeClass('active');
$('#piano #white li, #piano #black li').removeClass('key-on').addClass('key-off');
},
error : function(error, note) {
switch (error) {
case 'TEMPO' :
case 'OCTAVE' :
case 'NOTE' :
$('#notice-mml-is-invalid').html('<b>Maybe, ' + note + ' is invalid.</span>');
break;
case 'MML' :
default :
$('#notice-mml-is-invalid').html('<b>The designated MML is invalid.</span>');
break;
}
$('#notice-mml-is-invalid b').fadeOut(3000, 'easeInQuint');
}
};
X('mml').setup(mmlSetups);
cloned('mml').setup(mmlSetups);
$('#mml-player').parent('.controller-panel').hide();
$('#checkbox-is-mml').on(EventWrapper.CLICK, function() {
if (this.checked) {
$('#mml-player').parent('.controller-panel').slideDown(1000, 'easeOutQuint');
$('[for="checkbox-is-mml"] span').addClass('check-on');
} else {
$('#mml-player').parent('.controller-panel').slideUp(1000, 'easeOutQuint');
$('[for="checkbox-is-mml"] span').removeClass('check-on');
}
});
// Input MML
var foreverlove = {mml1 : '', mml2 : ''};
var tears = {mml1 : '', mml2 : ''};
foreverlove.mml1 = 'T62';
foreverlove.mml1 += ' O3 R16 A16 B-16 O4 D16 F12 A12 O5 F12 C2&C2. R4 DB-F2. D12 E-12 D12 FCA2. CAF4 CGD8 O4 B-8 B-GD2 R12 G12 A12 B-GD2 O5 CAF4 O4 FCA4 O5 DB-F2. D12 E-12 D12 FCA2. F12 G12 A12 AFD8 B-12 B-GD2 AFD4 AE-B-8 B-8 B-GE-4 B-E-C4 AE-C4 O6 CFE-8 O5 B-8 B-FE-4 B-FD4 B-FD4 O4 E-CB-4 E-CB-4 DB-F2 D4 D12 E-12 F12 C4 R12 O3 B-12 A12 O4 C12 O3 B-12 B-12&B-4 R4 R8 B-8 O4 E-4 E-12F12G12 D4 R12 C12 O3 B-12 O4 DA12 C12 C12&C4 R2 D4 D12E-12F12 C4 R12 O3 B-12 A12 O4 C12 O3 B-12 B-12&B-4 R8 B-8 O4 B-12 A12 F12 G2. B-12 A12 G12 G12 F12 F12&F4 R2';
foreverlove.mml1 += ' O5 D4 D12 E-12 F12 C4 R12 O4 B-12 A12 O5 C12 O4 B-12 B-12&B-4 R4 R8 B-8 O5 E-4 E-12 F12 G12 F4 R12 E-12 D12 D12 C6&C4 R4 R8 O4 F8 O5 D8 D8 D12 E-12 F12 C4 R12 O4 B-12 A12 O5 C12 O4 B-12 B-12&B-4 R8 B-8 O5 B-12 A12 F12 G2 R8 D8 B-12 A12 B-12 B-2 O6 C2';
foreverlove.mml1 += ' O4 R2 R4 B-12 O5 C12 O4 B-12 O5 C8 D8&D2 R12 E-12 E-12 F2 R4 F12 G12 A12 A8 B-8&B-2 R8 A8 B-2 R4 O4 B-12 O5 C12 O4 B-12 O5 C8 D8&D2 R12 D12 D12 F2 FCA4 FCA4 O6 FCA2 O5 FCB-4 FCA4';
foreverlove.mml1 += ' O6 CFD12 O5 B-FD12 B-FD12&B-FD2 FDB-4 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA8 FCA8 O6 CFD12 O5 B-FD12 B-FD12&B-FD2 R8 F8 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA4 O6 CFD12 O5 B-FD12 B-FD12&B-FD2 R4 O4 GDB-4 O3 G12 B-12 O4 G12 FCA4 E-CA4 DB-A4 O3 A4 B-4 O5 GE-12 AF12 B-G12 O6 DB-G4 DB-G12 CA12 DB-12 CAF+2';
foreverlove.mml1 += ' O4 R2 R4 B-12 O5 C12 O4 B-12 O5 C8 D8&D2 R12 E-12 E-12 F2 R4 F12 G12 A12 A8 B-8&B-2 R8 A8 B-2 R4 O4 B-12 O5 C12 O4 B-12 O5 C8 D8&D2 R12 D12 D12 F2 FCA4 FCA4 O6 FCA2 O5 FCB-4 FCA4';
foreverlove.mml1 += ' O6 CFD12 O5 B-FD12 B-FD12&B-FD2 FDB-4 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA8 FCA8 O6 CFD12 O5 B-FD12 B-FD12&B-FD2 R8 F8 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA4 O6 CG-D-12 O5 B-G-D-12 B-G-D-12&B-G-D-2 G-D-B-12 E-12 F12 D-B-G-4 B-D-4 A-D-4 G-B-8 B-D-8 G-E-C-4 G-E-C-4 FD-A4 FD-A4';
foreverlove.mml1 += ' O5 E-B-G4 O4 G12 A-12 G12 B-FD8 B-8 O5 C12 O4 B-12 A-12 O4 GE-C8 E-8 A-12 G12 F12 GE-C8 E-8 O5 FCG8 E-16 C16 O4 A-8 O5 C8 C12 D12 C12 O4 B-8 B-8 B-12 O5 C12 O4 B-12 B-8 F8 F12 B-12 E-12 D12 O3 B-12 B-12 B-12 O4 F12 F12 G4 G12 F12 E-12 D8 B-8 B-8 B-8 G12 G12 G12 G12 F12 E-12 D12 O3 B-12 O4 C12 G4 A-8 A-8 A-12 B-12 O5 C12 O4 B-24 A-24 G12 G12 A-12 G12 E-12 FD-4 GE-8 GE-8 A-F8 A-F8 A-F4 GE-4 A-F8 A-F8 B-GE-4 O5 E-B-G4 FCA-4 CC4 FF4 O4 A-12 B-12 A-12 O5 CA-E-4 O4 A-E-C4 E-C4 A-12 A-12 A-12 GE-B-4 E-4 B-GE-4 B-12 O5 C12 O4 B-12 B-FC4 A-FC4 O5 CA-4 O4 B-G4 O5 FD-4 D-B-4 FD-4 O6 CF12 O5 B-F12 O6 CF12 E-CA-2 D-A-E-12 CA-E-6 CE-12 O5 B-E-12 O6 CE-12 O5 B-GE-4 GE-4 O6 E-B-G4 E-B-12 E-C12 E-B-12 D-B-G-4 O5 B-G-4 O6 CA-E-4 E-CA-4';
foreverlove.mml1 += ' O5 DB-F4 D12 E-12 F12 C4 R12 O4 B-12 A12 O5 C12 O4 B-12 B-12 B-4 R4 R8 B-8 O5 E-4 E-12 F12 G12 F4 R12 E-12 D12 DA12 C12 C12 C4 O4 B-FC4 AFC4 O5 D4 D12 E-12 F12 C4 R12 O4 B-12 A12 O5 C12 O4 B-12 B-12&B-4 R8 B-8 O5 B-12 A12 F12 G2. B-12 A12 B-12 B-FC2 O6 CFC2 FE-CA2 R4 O5 FF4';
foreverlove.mml1 += ' O6 CFD12 O5 B-FD12 B-FD12&B-FD2 FDB-4 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA8 FCA8 O6 CFD12 O5 B-FD12 B-FD12&B-FD2 R8 F8 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA4';
foreverlove.mml1 += ' O5 B-GD2. O4 B-12 O5 C12 O4 B-12 O5 C8 D8&D2 R12 E-12 E-12 FA2 R4 F12 G12 A12 AFD4. B-8 B-4 R8 G8 B-GD2 O4 GDB-4 B-12 O5 C12 O4 B-12 O5 CFD8 DB-F8&DB-F2 R12 D12 D12 FCA2 O4 FCA4 FCA4 AFC4 O5 CAF4 FCA4 FF4';
foreverlove.mml1 += ' O6 CF12 O5 B-12 B-12&B-4 R4 F4 O6 CA12 O5 B-12 B-12&B-4 R4 B-12 O6 C12 D12 O5 A2 R4 R12 G12 F12 G4 B-4 A4 F4 O6 CF12 O5 B-12 B-12&B-2 R8 O5 F8 O6 CF12 O5 B-12 B-12&B-4 R4 B-12 O6 C12 D12 O5 A2 R4 R12 G12 F12 G4 B-4 A4 F4';
foreverlove.mml1 += ' O6 CFD12 O5 B-FD12 B-FD12&B-FD2 FDB-4 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA8 FCA8 O6 CFD12 O5 B-FD12 B-FD12&B-FD2 R8 F8 O6 CAD12 O5 B-GD12 B-GD12&B-GD2 B-G12 O6 CA12 DB-12 O5 AFC2. R12 GD12 FD12 GDB-4 B-GD4 AE-C4 FCA4';
foreverlove.mml1 += ' O6 CFD12 O5 B-12 B-12&B2 D12 E-12 D12 FCA2 CA4 F12 G12 A12 AC8 B-D8 B-D4 B-GC4 AFC4 AE-B-8 B-B-8 B-B-4 B-FA4 AFC4 O6 CE-8 O5 B-E-8 B-E-4 B-FD2 O4 E-B-F4 E-B-F4 DAF4 O3 F16 A16 O4 D16 F16 A16 O5 D16 F16 A16 O6 D12 F12 A12 O7 AFD2';
foreverlove.mml2 = 'T62';
foreverlove.mml2 += ' O3 B-B-1&B-B-2. B-12 O2 F12 D12 O1 B-4 O2 B-12 O3 D12 F12 B-2 O2 F4 O3 C12 F12 A12 O4 C2 O2 G4&G12 O3 D12 G12 B-4 O4 D4 O3 E-4. E-8 F2 O2 B-4 O3 D12F12B-12 O4 D2 O2 F4 O3 C12 F12 A12 O4 C2 O2 G4&G12 O3 D12 G12 F2 E-4. E-8 F2 O2 B-4&B-12 F12 B-12 O1 B-2 O2 B-4&B-12 F12 B-12 O1 B-2 O3 FB-2 FA2 FG2 G4 F4 C12 G12 B-12&B-4 B-F4 O2 B-4 O3 FF4. C8 F4 E-4 O2 B-12 O3 F12 B-12 B-4 AF4 O2 F4 G2 O3 F2 E-4 B-4 O4 E-2 CAF2 CAFE-2';
foreverlove.mml2 += ' O2 B-4 O4 DB-F4 CAF4 CAF4 DB-G4 DB-G4 DB-G4 DB-F4 O3 C4 O4 E-CG4 DB-F4 DB-F4 CAF4 CAF4 CAF4 CAFE-4 O2 B-4 O4 E-B-F4 CAF4 CAF4 DB-G4 DB-G4 DB-G4 DB-F4 DB-GE-4 DB-GE-4 DB-GE-4 DB-GE-4 CAFE-4 CAFE-4 E-CAF4 E-CAF4';
foreverlove.mml2 += ' O3 E-12 G12 B-12 O4 D4 GDB-2 FDB-4 FDB-4 DB-F4 DB-F4 O3 F12 A12 O4 C12 F4 AFC2 DB-G4 DB-G4 DB-F4 DB-F4 O3 E-12 G12 B-12 O4 E-4 GE-B-2 FDB-4 FDB-4 DB-F4 DB-F4 O3 F12 A12 O4 C12 F2. O3 FF4 O2 F12 F12 F12 F12 F12 F12 O3 FF4';
foreverlove.mml2 += ' O2 B-B-4 O3 D12 F12 B-12 O4 D2 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4 B-4 O3 D12 F12 B-12 O4 D4 F4 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4 O3 GG4 G4 D4 O2 B-12 O3 GG12 FF12 E-E-12 O2 B-12 O3 E-12&E-4 O2 F12 O3 C12 F12 F12 C12 F12 O2 G1 O3 EE2 DD2';
foreverlove.mml2 += ' O3 E-12 G12 B-12 O4 D4 GDB-2 FDB-4 FDB-4 DB-F4 DB-F4 O3 F12 A12 O4 C12 F4 AFC2 DB-G4 DB-G4 DB-F4 DB-F4 O3 E-12 G12 B-12 O4 E-4 GE-B-2 FDB-4 FDB-4 DB-F4 DB-F4 O3 F12 A12 O4 C12 F2. O3 FF4 O2 F12 F12 F12 F12 F12 F12 O3 FF4';
foreverlove.mml2 += ' O2 B-B-4 O3 D12 F12 B-12 O4 D2 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4 B-4 O3 D12 F12 B-12 O4 D4 F4 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4 O3 G-G-4 O4 D-B-G-4 G-D-B-2 O3 E-E-1 C-C-4. O2 C-8 O3 D-D-4. O2 D-8';
foreverlove.mml2 += ' O3 E-E-2 O2 B-2 O3 C2 O2 C2 F12 O3 C12 F12 A-4 E-12 G12 B-12 O4 E-4 DB-4 O2 B-2. O3 E-12 G12 B-12&B-4 O2 B-2 O3 GE-C2 O2 C2 F4 O4 CA-F4 O3 B-GE-2 A-D-2. O2 D-4 E-12 B-12 O3 E-12&E-2&E-8 O2 E-8 D-2. O3 D-4. O2 A-12 O3 E-12 A-12&A-2. E-4. O2 B-8 E-4. E8 F4. O3 C8 F2 A-D-4. O2 A-8 D-2 B-12 O3 E-12 A-12 O4 C4 E-2 O3 E-8 O2 E-4. O3 E-12 G12 B-12 O4 E-4 O3 G-8 O2 G-4. O3 A-A-2';
foreverlove.mml2 += ' O2 B-12 O3 F12 B-12&B-4 O4 E-AF4 C4 DG2 O2 G12 O3 D12 G12 O4 DB-4 O3 GC2 O2 B-12 O3 F12 B-12 O4 D4 CF2 O2 F2 O3 FB-2 FA4 AC4 DG4 G4 O4 GDB-2 O3 E-12 B-12 O4 D12 G4 B-4 O5 D4 O3 F8 O2 F8 F4&F8 F8 F4 FF2 R2';
foreverlove.mml2 += ' O2 B-B-4 O3 D12 F12 B-12 O4 D2 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4 B-4 O3 D12 F12 B-12 O4 D4 F4 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4';
foreverlove.mml2 += ' O3 E-E-2 O4 DB-G2 O2 B-4 O3 F4 O4 D4 O3 B-4 O4 CF2 O2 F2 G4 O3 D4 G4 F4 E-8 O2 E-8 E-2. B-4 O3 F4 O4 D4 O3 B-4 O4 CF4 O3 FF2. F12 O2 F12 F12 F12 F12 F12 O3 FF4 R4';
foreverlove.mml2 += ' O4 B-4 F4 O3 B-2 O4 G4 D4 O3 G2 O4 AFD4 AFD4 O5 DAF4 DAF4 O4 B-GE-2 O5 CAFE-2 O4 B-2 O3 B-2 O4 G2 O3 G2 O4 AFE4 AFE4 AFD4 AFD4 B-GE-D2 O5 CAFE-2';
foreverlove.mml2 += ' O2 B-B-4 O3 D12 F12 B-12 O4 D2 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4 B-4 O3 D12 F12 B-12 O4 D4 F4 O2 G4 O3 D12 G12 B-12 O4 D2 O2 D12 A12 O3 D12 F4 O4 DA4 FD4 O3 E-4. E-8 F4 O2 F4';
foreverlove.mml2 += ' O3 B-B-4 O4 DB-F4 FDB-2 O3 F12 A12 O4 C12 F2. DG2 FF2 E-E-2 O3 F12 C12 O2 A12 F12 G12 A12 B-B-2.&B-B-8 O1 B-8. O2 B-B-2 R16 F16 B-16 O3 D16&D4 O1 B-1';
tears.mml1 = 'T74';
tears.mml1 += ' O4 AF+DB2 AEB4 G+4 AF+C+2&AF+C+8 F+8 A8 O5 F+8 AF+D2 AEB4 G+4 AF+D2. BB4 O6 C+AE+2.&C+AE+8 O5 BG+16 AF+16 BG+E2 G+B8 AC+8 G+B8 EG+8 F+C+A4. F+F+8 G+G+8 F+F+8 G+G+4 AF+C+2. BB4 AEB2.&AEB8 G+16 F+16 G+EB2 R4 ';
tears.mml1 += ' O4 C+8 O3 B16 O4 C+16&C+2 R8 E8 F+8 G+16 G+16 A8 C+4. R4 R8 C+8 F+C+A4 F+C+A4 EBG+8 O3 B8 O4 C+8 D16 C+16&C+2 R4 O5 C+8 O4 B16 O5 C+16&C+2 R8 E8 F+8 G+8 A4. B8 A4. E8 A4 A8 A8 G+8 F+8 G+8 G+8 A2 C+AE+4 O4 BG+E4 ';
tears.mml1 += ' O5 C+AF+8 C+8 A8 G+16 A16&A8 G+8 F+8 C+16 E16&E1 R8 F+8 F+8 E16 F+16&F+8 F+8 F+16 E8 O4 A16 B2. O5 C+G+F4 R8 C+8 A8 G+16 A16&A8 A8 G+8 A8 B8. G+16 G+8 E8 R8 E8 E8 E16 F+16&F+4. F+8 F+8. G+16.&G+8 A16 B16&B2 C+G+E4 O4 BG+E4 ';
tears.mml1 += ' O5 C+AE8 C+8 C+8 O4 B16 O5 C+16&C+8 C+8 E8 F+16 C+16&C+2 R2 DAF+8 D8 D8 C+16 D16&D8 C+8 O4 B8 A8 O5 C+4. O4 B16 B16&B2 R8 O5 C+16C+16 C+8 O4 B16 O5 C+16&C+8 C+8 E8 F+16 C+16&C+2 C+8 O4 B8 A8 G+8 AF+D8 O5 D8 E8 C+16 D16&D8 D8 E8 F+16 G+16&G+2 A4 G+4 AF+C+2 R4 G+8. G+16 A2 AA4 G+G+4 AA2 EDBG+4 G+G+8. AA16 ';
tears.mml1 += ' O5 AF+DB2 G+EB4 O4 BG+E4 O5 C+AF+4&C+AF+16 F+16 G+16 A16 O6 C+AF+8 O4 F+8 A8 O5 F+8 AF+DB2 AA4 G+G+4 AG+C+2 R16 O4 C+16 F+16 A16 O5 C+16 F+16 A16 O6 C+16 O5 AEB4 AEB4 AEB4 G+8 G+16 F+16 G+EB4 G+EB4 G+EB4 C+8 O4 B16 O5 C+16&C+2 ';
tears.mml1 += ' O5 R8 E8 F+8 G+8 A8 C+4. R4 R8 C+16 C+16 F+16 F+8.&F+8. F+16 E16 O4 B8. O5 C+8 D16 C+16&C+2 R4 C+8 O4 B16 O5 C+16&C+2 R8 E8 F+8 G+8 A4&A16 B8. A4. F+8 A4. A8 G+8 F+8 G+8 G+16 A16&A2. O4 BG+E4 ';
tears.mml1 += ' O4 AF+C+8 O5 C+8 A8. G+16 A4 A8 G+16 C+16 E2 R8 O4 B8 O5 E8 G+8 F+C+A8 F+8 F+8 E16 F+16 F+8. O4 F+16 O5 F+16 E8 O4 A8 B2. R4 R16 O5 C+16 C+16 A16 G+8 A16&A8 A8 G+8 A8 BG+E4 G+8 G+16 E16&E4 E8 E16 F+16&F+4. F+8 F+A8. G+B16&G+B8 AC+16 BD16&BD2 EB4 O4 BG+E8 GE16 AF+16 BGD4 BGD8. O5 CAF16 CAF4 DBG4';
tears.mml1 += ' O5 ECG8 E8 E8 D16 E16&E8 E8 G8 A16 E16&E2 R4 CA8 O4 BG8 O5 CAF4 F8 E16 F16&F8 E8 D8 C8 EBG4. D16 D16&D2 R8 E8 E8 D16 E16&E8 E8 G8 A16 E16&E2 R8 DB8 CA8 O4 BG8 O5 CAF8. F16 F8 E16 F16&F8 F8 G8 A8 BGFD2 O6 CFD4 O5 BFD4 O6 CAFC2 R4 O5 BB8. BB16 O6 CC2 CAC4 O5 BGB4 O6 CAFC2 O5 BGFD4 BB8. BB16';
tears.mml1 += ' O6 CC4 O5 E16 E16 D16 G16 EC8 EC8 E16 D16 C16 D16 O4 BGD4 B8 O5 G8 O4 B4 G8 B8 BG16 AE8.&AE16 E16 A16 B16 O5 C8 O4 B8 A8 G16 E16 FCA4. AA8 GDB4 O3 BG16 O4 CA16 DB8 DB16 CG8.&CG16 EC16 EC16 EC16 EC8 FD8 GE8 EC8 G+EB8 G+EB4 G+E16 F+A16 BG+4. E16 E16 O5 CAF2 DB4 CA8 O4 BG16 AG16 BG4 BG16 O5 CA16 DB8 E16 O4 E16 G+16 B16 O5 C16 O4 B16 O5 C16 D16 DAE16 C16 C8&C16 C16 C16 O4 B16 O5 C8 O4 B8 A8 G8 O5 EBG4&EBG16 O4 B16 O5 D16 C16 O4 BGE8. GE16&GE8 BG8 BG16 AF8.&AF16 F16 A16 B16 O5 CA8 DB8 EC8 CA8 DB4. DB16 CA16 O4 BG8. O5 CA16&CA8 DB8 DB16 CA8.&CA16 O4 E16 A16 B16 O5 CA8. C16 O4 BG16 O5 CA16 DB8 EBG+4&EBG+16 O4 B16 O5 C16 D16 E4 G+16 E16 F+16 G+16 AFC4 F16 G16 A16 F16 AC8 AC8 AF16 BG16 AF16 O6 CA16 DBG4. CC8 O5 BB4 F24 G24 A24 G24 A24 O6 C24 DB-F2 ECG2';
tears.mml1 += ' O5 ECG8 E8 E8 D16 E16&E8 E8 G8 A16 E16&E2 R4 CA8 O4 BG8 O5 CAF4 F8 E16 F16&F8 E8 D8 C8 EBG4. D16 D16&D2 R8 E8 E8 D16 E16&E8 E8 G8 A16 E16&E2 R8 DB8 CA8 O4 BG8 O5 CAF8. F16 F8 E16 F16&F8 F8 G8 A8 BGFD2 O6 CFD4 O5 BFD4 O6 CAFC2 R4 O5 BB8. BB16 O6 CC2 CAC4 O5 BGB4 O6 CAFC2 O5 CAF4 BB8. BB16';
tears.mml1 += ' O6 CC8 O5 E8 E8 D16 E16&E8 E8 G8 A16 E16&E2 R2 R8 F8 F8 E16 F16&F8 E8 D8 C8 E4. D16 D16&D4 R4 R8 E16 E16 E8 D16 E16&E8 E8 G8 A16 E16&E2 R2 R8 F8 F8 E16 F16&F8 F8 G8 A16 A16 B2 O6 CC4 O5 BB4';
tears.mml1 += ' O6 CAFC2 R4 O5 B8. B16 O6 C2. O5 BB4 O6 CAFC2 R4 O5 B8. B16 O6 C2 CC4 O5 BB4 O6 CAFC2 R4 O5 B8. B16 O6 C2. O5 BB4 O6 CAFC2 R4 O5 B8. B16';
tears.mml1 += ' O6 CC1 R2 C8 O5 G8 E8 C8 R2 O6 DBG2 R2 R4 DD4 CC1 R2 C8 O5 G8 E8 C8 R2 O6 DBG2 R2 O5 GG4 BB4 AFC4 O4 AFC8. AFC16 AFC4 AFC4 GEC4 GEC8. GEC16 GEC4 GEC4 GDB4 GDB8. GDB16 GDB4 G+DB4 AEC4 AEC4 AEC4 GDB4 AFC4 AFC4 AFC4 AFC4 BGD4 BGD8. BGD16 BGD4 BGD8 O5 C16 D16 ECG4 ECG4 FCG4 ECG4 DBG4 GG4 EE4 DBG+4 CAE4 CAE4 O4 BD4 AC4 BGD4 O5 EE4 O4 AA4 GG4 AFC4 AFC4 O5 CC4 FF4 GG2 CC2 DBG4 DBG8. DBG16 DBG4 GDB4 GDB4 GDB4 GDB4 GG4 O6 CAF2 O5 CAF4 CAF4 CGE4 CD4 DD4 EE4 GDB2 O4 GDB4 BG+E4 O5 CAE4 AA4 BB4 O6 CC4 CAF2. O5 BG8 AF8 GEC2. FD8 EC8 DBG2 GDB4 O4 GDB4 B16 G16 D16 O3 B16 O4 B16 G16 D16 O3 B16 O4 B16 G16 D16 O3 B16 O4 BGD4 O6 CAF2. O5 BB4 O6 CGE2 O4 BD4 O5 CE4 O4 BD2 GDB4 G+DB4 ECA4 ECA4 ECA4 GDB4 FCA4 AF4 BG4 O5 CA4 GDB2. FF4 ECG2.&ECG8 D16 C16 DBG2. DBG+8 C16 O4 B16 O5 CAE2 CAE4 C8 O4 B16 A16 O4 BGE4&BGE8. O5 GEB16 GEB8. EBG16&EBG8 O4 A16 G16 O4 AFC4 AFC4 AFC4. G16 F16 GDB4 GDB4 ADB4 BGD4 O5 CGE2 CGE4. O4 B16 A16 BGD2 BGD4 O5 EBG+4 CAE2 CAE4 ECA4 O4 BGE2 BGE4 BGE4 AFC2 AFC4 O5 CAF4 O4 GEC2 O5 CGE2 DBG2 DBG4 DBG4 DBG4 DBG4 GDB2 CAF2 CAG4 CAF4 CGE4 CC4 DD4 EE4 GDB2. EBG+4 AEC4 AA4 BB4 O6 CC4 CAF2. O5 BG8 AF8 GEC2. FD8 EC8 DBG1 O4 B16 G16 D16 O3 B16 O4 B16 G16 D16 O3 B16 O4 B16 G16 D16 O3 B16 O4 BGD4 O5 CAGF2 FA4 EG8 DF8 EDCG1';
tears.mml2 = 'T74';
tears.mml2 += ' O2 B2 O3 C+2 D1 O2 B2 O3 C+2 D2 E2 O2 A1 E1 F+2 E2 O3 DD1 EE1&EE1 ';
tears.mml2 += ' O2 A8 O3 C+8 E8 A8 EG+2 O2 A8 O3 C+8 E8 A8 O4 C+AF+E4 O2 E4 D2 E2 A8 O3 E8 A8 E8 BF+C+4 AF+C+4 O2 A8 O3 C+8 E8 A8 O4 EG+2 O3 F+8 A8 O4 C+4 O3 E8 G+8 O4 C+4 O3 D8 F+8 A4 O4 DBG+E2 O2 F+8 O3 C+8 B8 E8 A4 G+G+4 ';
tears.mml2 += ' O3 F+F+2 O4 C+AF+2 O3 C+8 G+8 O4 EB4 O3 BG+4 G+E4 AF+D2 O4 DAF+2 O3 E8 G+8 B8 G+8 O4 E16 D16 O3 B16 G+16 O4 C+F4 C+AF+2 O3 F+2 BG+EC+2 B8 G+8 E8 C+8 D8 F+8 O4 DA8 F+8 O4 F+DA2 DBG+E4 EE2. ';
tears.mml2 += ' O3 AA4 O4 C+AE4 EBG+4 EBG+4 O3 F+8 A8 O4 F+C+8 O3 F+8 O4 C+AF+E4 O2 E4 D4 O4 DAF+4 DBAF+4 DBAF+4 DBG+E4 O2 E4 O4 EBA4 EBG+4 O2 A8 O3 E8 O4 EC+A4 EBG+4 EBG+4 C+AF+4 C+AF+4 C+AF+E4 C+AF+E4 O3 AD2 AF+DB2 O3 E8 G+8 B8 O4 E8 EDBG+2 O3 D8 A8 O4 C+8 O3 A8 BG+ED2 O4 C+AF+E4 C+AF+E4 C+AF+E4 C+AF+E4 C+AF+D4. O3 DD8 EE2 ';
tears.mml2 += ' O2 B8 O3 F+8 A8 F+8 C+2 D8 F+4 A8 O4 D2 O2 B8 O3 D8 F+8 B8 C+8 E8 G+8 O4 C+8 O3 D8 F+8 A4 D4 DD4 EE2.&EE8 O2 B8 O3 EE4 O2 E4 O3 E16 O2 B8. E4 ';
tears.mml2 += ' O2 A16 O3 C+16 E16 A16 O4 C+4 EBG+2 EC+AF+4 EC+AF+4 C+AE4 O2 E4 D8 A8 O4 DAF+4 DBG+E2 C+AF+4 C+AF+4 O3 BF+C+4 AF+C+4 O2 A16 O3 C+16 E16 A16 O4 C+4 EBG+2 EC+AF+4 EC+AF+4 C+AE4 O2 E4 D8 A8 O4 DAF+4 DBG+E2 EDA4 EDA4 EC+A4 O3 G+G+4';
tears.mml2 += ' O3 F+F+4 O4 C+AF+4 C+AF+4 C+AF+4 O3 BG+EC+4 BG+EC+4 BG+EC+4 BG+EC+4 DD4 O4 C+AF+D4 C+AF+D4 C+AF+D4 O3 BG+E4 BG+E4 BG+E4 O4 C+BG+F4 O4 C+AF+2 O3 C+8 O2 B8 A8 F+8 O3 C+C+4 BG+EC+4 BG+EC+4 BG+EC+4 D16 F+16 A16 F+16 O4 D4 O3 DD2 O2 E16 B16 O3 E16 F+16 G+16 B16 O4 E16 F+16 G+E4 O3 E4 O2 G8 O3 D8 G4 G8 O2 G8 O3 GG4';
tears.mml2 += ' O3 C16 G16 O4 C16 D16 E4 GDB2 ECA4 ECA4 ECAG4 ECAG4 CF2 CAD2 O3 G8 O2 G8 G4 O4 DBGF8 C8 O3 B8 A8 GEC2 GDB2 O2 A8 O3 E8 O4 C8 O3 E8 O4 ECAG2 CF2 CAFD2 O3 G8 O2 G8 G4 O3 GG2 O2 F8 O3 C8 A8 C8 BGFD2 O2 A8 O3 E8 O4 C8 O3 E8 A8 E8 O4 DBG4 CF4 O2 F4 O3 GG2';
tears.mml2 += ' O2 C8 G8 O4 CGE4 CGEC2 O2 G8 O3 D8 G2. EA4 O2 AA2 O3 AA4 O2 F8 O3 C8 F4 O2 G4 G16 A16 B8 O3 CC4 C4 O2 G4 O3 C4 O2 E4 O3 E2 O2 G+8 B8 O2 F8 O3 C8 A8 C8 F2 O2 G8 O3 D8 G4 G+G+2 O2 A4 O3 A4 O4 ECAG2 O2 E8 B8 O3 G4 E2 O2 F4 O4 CAF4 CAF4 CAF4 DBGF4 DBGF4 DBGF4 O3 G+G+4 AA4 A4 O4 ECAG2 O3 EE4 O4 EDG+4 EDG+4 EDG+4 O3 FF4 O4 FCA4 FCA4 FCA4 O3 GG8 O2 G8 G8 G8 G8 G8 GG4 B-8 O3 F8 O4 D8 O3 F8 O4 B-B-4 O3 B-B-4';
tears.mml2 += ' O3 C16 G16 O4 C16 D16 E4 GDB2 ECA4 ECA4 ECAG4 ECAG4 CF2 CAD2 O3 G8 O2 G8 G4 O4 DBGF8 C8 O3 B8 A8 GEC2 GDB2 O2 A8 O3 E8 O4 C8 O3 E8 O4 ECAG2 CF2 CAFD2 O3 G8 O2 G8 G4 O3 GG2 O2 F8 O3 C8 A8 C8 BGFD2 O2 A8 O3 E8 O4 C8 O3 E8 A8 E8 O4 DBG4 O2 F8 A8 O3 C8 F8 GG2';
tears.mml2 += ' O4 ECG4 ECG4 GDB4 GDB4 ECA4 ECA4 ECAG4 ECAG4 CAF4 CAF4 CAFD4 CAFD4 DBGF4 DBGF4 DBGF4 O2 G16 A16 B8 O4 CGEC4 ECG4 GDB4 GDB4 ECA4 ECA4 ECAG4 ECAG4 CAF4 CAF4 CAFD4 CAFD4 DBGF4 DBGF4 DBGF8 O3 D8 O2 G4';
tears.mml2 += ' O2 F8 O3 C8 A4 O4 DBGF2 O3 A8 O4 C8 E8 C8 O3 A8 E8 O4 DBG4 O3 F8 A8 O4 C8 O3 A8 O4 DBGF2 O3 A8 O4 C8 E8 C8 O3 A8 E8 O4 DBG4 O2 F8 O3 C8 A4 O4 DBGF2 O3 A8 O4 C8 E8 C8 O3 A8 E8 O4 DBG4 O3 F8 A8 O4 C8 O3 A8 O4 DBGF2';
tears.mml2 += ' O4 CAF4 CAF4 CAF4 CAF4 CGE4 CGE4 CGE4 CGE4 DBG4 DBG4 DBG4 DBG4 ECA4 ECA4 ECA4 ECA4 CAF4 CAF4 CAF4 CAF4 CGE4 CGE4 CGE4 CGE4 DBG4 DBG4 DBG4 DBG4 FDBG4 FDBG4 FDBG4 FDGB4 O2 F8 O3 C8 F2 O2 F4 C2 O2 C2 G2. G+4 A4. E8 A4 G4 F4. F8 O3 F2 O2 G2 O3 G2 C2&C8 O2 G8 C8 E8 G2. G+4 A4. E8 A2 E4. B8 O3 E2 O2 F2.&F8 A16 B16 O3 C4. O2 G8 O3 C4 O2 C4 G2&G8 D8 G4 G12 A12 B12 O3 C12 D12 E12 F12 G12 A12 B12 O4 C12 D12 O3 F4. O2 F8 F2 O3 C4. C8 C8 O2 G8 O3 C4 O2 G4. G8 O3 G8 O2 G8 G+4 A8 E8 A2 G4 F4. O3 C8 F2 C2 O2 C2 G4. G8 G2 O3 GG8 O2 G8 G8 G8 O3 G8 D8 O2 G12 O3 D12 O2 G12 F4. F8 O3 F2 C4. C8 C8 O2 G8 O3 C4 O2 G4. G8 G4 G+4 A8 E8 A2 G4 F4. O3 C8 F2 O2 G4. O3 D8 G4 O2 G8 A16 B16 O3 C4. C8 G4 C4 O2 G4. G8 G4 G+4 A4. O3 E8 A2 E4 O2 B4 E2 F2&F8 O3 C8 F4 O2 G8 D8 G4 G12 B12 O3 C12 D12 C12 O2 B12 O3 C8 C8 C8 C8 D12 C12 O2 B12 O3 C4 O2 G8 B8 O3 C8 D8 G8 O2 G8 G4+ A4. E8 A2 E4. B8 O3 E2 O2 F4. F8 F2 O3 C4. O2 G8 O3 C4 D8 C8 O2 G4. G8 G2 G8 O3 G8 O2 G4 O3 G8 O2 G8 G8 G8 F4. F8 O3 F2 C4. O2 G8 O3 C2 O2 G4. G8 G4 G*4 A8 E8 A2 G4 F4. O3 C8 F2 C4. O2 G8 O3 C2 O2 G4. G8 O3 G4 O2 G4 G8 G8 G8 G8 G8 G8 O3 GG4 FF1 CC1';
$(window).load(function() {
if (parseInt(Math.random() * 2) === 0) {
$('#textarea-mml').attr('placeholder', ('Forever Love [ Piano Arrange ] ( X JAPAN ) >>>> ' + foreverlove.mml1 + ' ||||| ' + foreverlove.mml2));
} else {
$('#textarea-mml').attr('placeholder', ('Tears [ Piano Arrange ] ( X JAPAN ) >>>> ' + tears.mml1 + ' ||||| ' + tears.mml2));
}
if (window.localStorage) {
$('#textarea-mml').val(window.localStorage.getItem('xsound-mml') || '');
}
$('#textarea-mml').keyup(function() {
var mml = ($(this).val() !== '') ? $(this).val() : $(this).attr('placeholder');
var mmls = mml.split(/\|+/);
if (currentSoundSource === 'oscillator') {
if (mmls.length > 0) {
X('mml').ready(X('oscillator'), mmls[0]);
cloned('mml').ready(cloned('oscillator'), []);
}
if (mmls.length > 1) {
cloned('mml').ready(cloned('oscillator'), mmls[1]);
}
} else {
X('mml').ready(X('oneshot'), mmls);
}
$('#mml-control').removeClass('active');
}).trigger('keyup');
}).unload(function() {
if (window.localStorage) {
window.localStorage.setItem('xsound-mml', $('#textarea-mml').val());
}
});
// Control MML
$('#mml-control').on(EventWrapper.CLICK, function(event) {
event.preventDefault();
if (!X('mml').isSequences()) {
return false;
}
var parts = X('mml').get();
// $('#checkbox-is-sound-source').attr('checked', true);
// $('[for='checkbox-is-sound-source'] span').addClass('check-on');
// Start MML
if (X('mml').isPaused()) {
if (currentSoundSource === 'oscillator') {
for (var i = 0, len = X('oscillator').length(); i < len; i++) {
X('oscillator', i).state(true);
}
for (var i = 0, len = cloned('oscillator').length(); i < len; i++) {
cloned('oscillator', i).state(true);
}
$('[for="checkbox-oscillator-1"] span').addClass('check-on');
$('[for="checkbox-oscillator-2"] span').addClass('check-on');
if (X('mml').get().length > 0) {
X('mml').start(0);
}
if (cloned('mml').get().length > 0) {
cloned('mml').start(0);
}
X('mixer').module('recorder').start();
X('mixer').module('session').start();
} else {
for (var i = 0, len = parts.length; i < len; i++) {
X('mml').start(i);
}
X('oneshot').module('recorder').start();
X('oneshot').module('session').start();
}
// Filter OFF
if (X('oneshot').module('filter').state()) {
X('mixer').module('filter').state(false);
X('oscillator').module('filter').state(false);
cloned('oscillator').module('filter').state(false);
X('oneshot').module('filter').state(false);
X('audio').module('filter').state(false);
X('stream').module('filter').state(false);
$('[for="checkbox-is-filter"] span').removeClass('check-on');
}
$(this).addClass('active');
} else {
X('mml').stop();
cloned('mml').stop();
for (var i = 1, len = X('oscillator').length(); i < len; i++) {
X('oscillator', i).state(false);
}
for (var i = 1, len = cloned('oscillator').length(); i < len; i++) {
cloned('oscillator', i).state(false);
}
$(this).removeClass('active');
$('#piano #white li, #piano #black li').removeClass('key-on').addClass('key-off');
}
return false;
});
$('#mml-stop').on(EventWrapper.CLICK, function() {
// Stop MML
X('mml').stop();
cloned('mml').stop();
// Rewind
var mml = ($('#textarea-mml').val() !== '') ? $('#textarea-mml').val() : $('#textarea-mml').attr('placeholder');
var mmls = mml.split(/\|+/);
if (currentSoundSource === 'oscillator') {
if (mmls.length > 0) {
X('mml').ready(X('oscillator'), mmls[0]);
cloned('mml').ready(X('oscillator'), []);
}
if (mmls.length > 1) {
cloned('mml').ready(cloned('oscillator'), mmls[1]);
}
} else {
X('mml').ready(X('oneshot'), mmls);
}
$('#mml-control').removeClass('active');
$('#piano #white li, #piano #black li').removeClass('key-on').addClass('key-off');
return false;
});
$('#mml-download').on(EventWrapper.CLICK, function() {
var format = function(number) {
return ('0' + number).slice(-2);
};
var dataURL = X('mml').download($('#textarea-mml').val() || $('#textarea-mml').attr('placeholder'));
var date = new Date();
var y = date.getFullYear();
var m = format(date.getMonth() + 1);
var d = format(date.getDate());
var h = format(date.getHours());
var i = format(date.getMinutes());
var s = format(date.getSeconds());
var time = '-' + y + m + d + h + i + s;
var filename = 'mml' + time + '.txt';
$(this).attr('href', dataURL);
$(this).attr('download', filename);
//
// Cancel of event is not necessary for downloading file
//
// return false;
});
})();
// Upload audio file by file form or Drag & Drop
(function() {
var showError = function(error) {
$('header').append('<div id="dialog-error-read-file"><p></p></div>');
// Define dialog
$('#dialog-error-read-file').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 500,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-error-read-file p').html('<b>' + ((typeof error === 'object') ? error.message : error) + '</b>');
$('#dialog-error-read-file').dialog('open');
};
var errorCallback = function(event, error) {
var errors = {};
switch (error) {
case 'FILE_IS_NOT_BLOB' : errors.message = 'The designated file is not Blob'; break;
case 'NOT_FOUND_ERR' : errors.message = 'There is not file'; break;
case 'SECURITY_ERR' : errors.message = 'Security error occurred'; break;
case 'ABORT_ERR' : errors.message = 'Abort'; break;
case 'NOT_READABLE_ERR' : errors.message = 'The authority to read file does not exists'; break;
case 'ENCODING_ERR' : errors.message = 'FIle size exceeds limit'; break;
case 'ERR' : errors.message = 'Error. Please try again.'; break;
}
showError(errors);
};
var progressCallback = function(event) {
var rate = 0;
var progress = '';
if (event.lengthComputable && (event.total > 0)) {
rate = Math.floor((event.loaded / event.total) * 100);
progress = event.loaded + ' Bytes load (' + rate + ' %)';// + event.total + ' Bytes';
$('header').append('<div id="dialog-read-file"><p></p></div>');
// Define dialog
$('#dialog-read-file').dialog({
title : 'Read file ...',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false
});
$('#dialog-read-file p').html('<b>' + progress + '</b>');
$('#dialog-read-file').dialog('open');
}
};
var setMML = function(event, mml) {
var ready = function() {
var mmls = mml.split(/\|+/);
if (currentSoundSource === 'oscillator') {
if (mmls.length > 0) {
X('mml').ready(X('oscillator'), mmls[0]);
cloned('mml').ready(cloned('oscillator'), []);
}
if (mmls.length > 1) {
cloned('mml').ready(cloned('oscillator'), mmls[1]);
}
} else {
X('mml').ready(X('oneshot'), mmls);
}
$('#textarea-mml').val(mml);
$('#mml-control').removeClass('active');
};
$('#dialog-read-file').dialog('close');
if ($('#textarea-mml').val() === '') {
ready();
} else {
// Overwrite ?
$('#mml-player').append('<div id="dialog-confirm-overwrite-mml"><p></p></div>');
// Define dialog
$('#dialog-confirm-overwrite-mml').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 500,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
// Overwrite
ready();
$(this).dialog('close');
$(this).remove();
},
'CANCEL' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-confirm-overwrite-mml p').html('<b>MML already exists. Overwrite ?</b>');
$('#dialog-confirm-overwrite-mml').dialog('open');
}
};
// for file form
var fileHandler = function(fileForm, fileMask, callbacks) {
document.getElementById(fileForm).addEventListener('change', function(event) {
var type = (this.id.indexOf('mml') !== -1) ? 'Text' : 'ArrayBuffer';
for (var i = 0, len = callbacks.length; i < len; i++) {
try {
var file = X.file({
event : event,
type : type,
success : callbacks[i],
error : errorCallback,
progress : progressCallback
});
document.getElementById(fileMask).value = file.name;
} catch (error) {
showError(error);
}
}
}, false);
};
// for Drag & Drop
var dropHandler = function(dropAreaID, callbacks, uiCallbacks) {
var dropArea = document.getElementById(dropAreaID);
dropArea.addEventListener('dragenter', function(event) {
event.preventDefault();
uiCallbacks.enter(this);
}, false);
dropArea.addEventListener('dragover', function(event) {
event.preventDefault();
}, false);
dropArea.addEventListener('dragleave', function(event) {
event.preventDefault();
uiCallbacks.leave(this);
}, false);
dropArea.addEventListener('drop', function(event) {
uiCallbacks.drop(this);
this.value = '';
var type = (this.id.indexOf('mml') !== -1) ? 'Text' : 'ArrayBuffer';
try {
for (var i = 0, len = callbacks.length; i < len; i++) {
var file = X.file({
event : event,
type : type,
success : callbacks[i],
error : errorCallback,
progress : progressCallback
});
this.value = file.name;
}
} catch (error) {
showError(error);
}
}, false);
};
(function() {
var callbacks = [
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('audio').ready.call(X('audio'), arrayBuffer);
}
];
fileHandler('file-upload-audio', 'text-mask-upload-audio', callbacks);
})();
(function() {
var callbacks = [
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('mixer').module('reverb').start.call(X('mixer').module('reverb'), arrayBuffer);
},
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('oneshot').module('reverb').start.call(X('oneshot').module('reverb'), arrayBuffer);
},
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('audio').module('reverb').start.call(X('audio').module('reverb'), arrayBuffer);
},
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('stream').module('reverb').start.call(X('audio').module('reverb'), arrayBuffer);
}
];
fileHandler('file-upload-impulse-response', 'text-mask-upload-impulse-response', callbacks);
})();
(function() {
fileHandler('file-upload-mml', 'text-mask-upload-mml', [setMML]);
})();
// Event listener on file form
$('#text-mask-upload-audio, #text-mask-upload-impulse-response, #text-mask-upload-mml').on(EventWrapper.CLICK, function() {
$(this).val('');
if ($(this).attr('id').indexOf('audio') !== -1) {
$('#file-upload-audio').val('').trigger(EventWrapper.CLICK);
return false;
}
if ($(this).attr('id').indexOf('impulse') !== -1) {
$('#file-upload-impulse-response').val('').trigger(EventWrapper.CLICK);
return false;
}
if ($(this).attr('id').indexOf('mml') !== -1) {
$('#file-upload-mml').val('').trigger(EventWrapper.CLICK);
return false;
}
});
// Event listener on Drag & Drop
var uiCallbacks = {
enter : function(eventNode) {
eventNode.classList.remove('drag-off');
eventNode.classList.add('drag-on');
},
leave : function(eventNode) {
eventNode.classList.remove('drag-on');
eventNode.classList.add('drag-off');
},
drop : function(eventNode) {
eventNode.classList.remove('drag-on');
eventNode.classList.add('drag-off');
}
};
var audioCallbacks = [
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('audio').ready.call(X('audio'), arrayBuffer);
}
];
var irCallbacks = [
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('mixer').module('reverb').start.call(X('mixer').module('reverb'), arrayBuffer);
},
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('oneshot').module('reverb').start.call(X('oneshot').module('reverb'), arrayBuffer);
},
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('audio').module('reverb').start.call(X('audio').module('reverb'), arrayBuffer);
},
function(event, arrayBuffer) {
$('#dialog-read-file').dialog('close');
X('stream').module('reverb').start.call(X('audio').module('reverb'), arrayBuffer);
}
];
dropHandler('text-mask-upload-audio', audioCallbacks, uiCallbacks);
dropHandler('text-mask-upload-impulse-response', irCallbacks, uiCallbacks);
dropHandler('text-mask-upload-mml', [setMML], uiCallbacks);
})();
// Record controllers
(function() {
$('#select-rec-track').select2();
X('mixer').module('recorder').setup($('#select-rec-track').children('option').length);
X('oneshot').module('recorder').setup($('#select-rec-track').children('option').length);
X('stream').module('recorder').setup($('#select-rec-track').children('option').length);
// X('midi').module('recorder').setup($('#select-rec-track').children('option').length);
$('#rec-control').on(EventWrapper.CLICK, function() {
if ((X('mixer').module('recorder').getActiveTrack() !== -1)
&& (X('mixer').module('recorder').getActiveTrack() !== -1)
&& (X('stream').module('recorder').getActiveTrack() !== -1)
/*&& (X('midi').module('recorder').getActiveTrack() !== -1)*/) {
$('#record-controllers').append('<div id="dialog-stop-recording"><p></p></div>');
// Define dialog
$('#dialog-stop-recording').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'STOP' : function() {
X('mixer').module('recorder').stop();
X('oneshot').module('recorder').stop();
X('stream').module('recorder').stop();
// X('midi').module('recorder').stop();
$('#rec-control').removeClass('active');
// The other controllers are eabled
$('.select2-container').fadeTo('fast', 1);
$('#rec-wave').fadeIn('fast');
$('#rec-download').fadeIn('fast');
$('#rec-clear').fadeIn('fast');
$(this).dialog('close');
$(this).remove();
},
'CANCEL' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-stop-recording p').html('<b>Stop the recording. OK ?</b>');
$('#dialog-stop-recording').dialog('open');
} else {
$('#record-controllers').append('<div id="dialog-start-recording"><p></p></div>');
// Define dialog
$('#dialog-start-recording').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'START' : function() {
X('mixer').module('recorder').ready($('#select-rec-track').val());
X('oneshot').module('recorder').ready($('#select-rec-track').val());
X('stream').module('recorder').ready($('#select-rec-track').val()).start();
// X('midi').module('recorder').ready($('#select-rec-track').val());
$('#rec-control').addClass('active');
// The other controllers are disabled
$('#record-controllers .select2-container').fadeTo('fast', 0.0);
$('#rec-wave').fadeOut('fast');
$('#rec-download').fadeOut('fast');
$('#rec-clear').fadeOut('fast');
$(this).dialog('close');
$(this).remove();
},
'CANCEL' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-start-recording p').html('<b>Start recording in the TRACK ' + (parseInt($('#select-rec-track').val()) + 1) + ' . OK ?</b>');
$('#dialog-start-recording').dialog('open');
}
return false;
});
$('#rec-download').on(EventWrapper.CLICK, function() {
$('#record-controllers').append('<div id="dialog-error-download"><p></p></div>');
// Define dialog
$('#dialog-error-download').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-error-download p').html('<b>WAVE file does not exists.</b>');
$('#dialog-error-download').dialog('open');
return false;
});
$('#rec-wave').on(EventWrapper.CLICK, function(event) {
event.preventDefault();
// 2 channel, 16 bit
var objectURL = '';
switch ($('#select-sound-source').val()) {
case 'oscillator' :
objectURL = X('mixer').module('recorder').create('all', 2, 16, 'blob');
break;
case 'one-shot' :
objectURL = X('oneshot').module('recorder').create('all', 2, 16, 'blob');
break;
case 'microphone' :
objectURL = X('stream').module('recorder').create('all', 2, 16, 'blob');
break;
case 'midi' :
objectURL = X('midi').module('recorder').create('all', 2, 16, 'blob');
break;
default :
break;
}
if (objectURL) {
var audio = new Audio(objectURL);
audio.setAttribute('controls', false);
audio.play();
$('#rec-download').off(EventWrapper.CLICK);
$('#rec-download').on(EventWrapper.CLICK, function() {
var format = function(number) {
return ('0' + number).slice(-2);
};
var date = new Date();
var y = date.getFullYear();
var m = format(date.getMonth() + 1);
var d = format(date.getDate());
var h = format(date.getHours());
var i = format(date.getMinutes());
var s = format(date.getSeconds());
var time = '-' + y + m + d + h + i + s;
var filename = 'recorded' + time + '.wav';
$(this).attr('href', objectURL).attr('download', filename);
//
// Cancel of event is not necessary for downloading file
//
// return false;
});
} else {
$('#record-controllers').append('<div id="dialog-error-no-sound-data"><p></p></div>');
// Define dialog
$('#dialog-error-no-sound-data').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 450,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-no-sound-data p').html('<b>The recorded sound data does not exists.</b>');
$('#dialog-no-sound-data').dialog('open');
}
return false;
});
$('#rec-clear').on(EventWrapper.CLICK, function() {
$('#record-controllers').append('<div id="dialog-clear-recording"><p></p></div>');
// Define dialog
$('#dialog-clear-recording').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : true,
width : 400,
height : 'auto',
draggable : true,
resizable : false,
buttons : {
'CLEAR' : function() {
X('mixer').module('recorder').clear($('#select-rec-track').val());
X('oneshot').module('recorder').clear($('#select-rec-track').val());
X('stream').module('recorder').clear($('#select-rec-track').val());
// X('midi').module('recorder').clear($('#select-rec-track').val());
$(this).dialog('close');
$(this).remove();
},
'CANCEL' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-clear-recording p').html('<b>Clear the TRACK ' + (parseInt($('#select-rec-track').val()) + 1) + ' . OK ?</b>');
$('#dialog-clear-recording').dialog('open');
return false;
});
// Left channel level (Slider)
$('#slider-rec-level-left').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
X('mixer').module('recorder').param('gainL', ui.value);
X('oneshot').module('recorder').param('gainL', ui.value);
X('stream').module('recorder').param('gainL', ui.value);
// X('midi').module('recorder').param('gainL', ui.value);
$('#spinner-rec-level-left').spinner('value', ui.value);
}
});
$('#slider-rec-level-right').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
X('mixer').module('recorder').param('gainR', ui.value);
X('oneshot').module('recorder').param('gainR', ui.value);
X('stream').module('recorder').param('gainR', ui.value);
// X('midi').module('recorder').param('gainR', ui.value);
$('#spinner-rec-level-right').spinner('value', ui.value);
}
});
// Right channel level (Spinner)
$('#spinner-rec-level-left').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
X('mixer').module('recorder').param('gainL', ui.value);
X('oneshot').module('recorder').param('gainL', ui.value);
X('stream').module('recorder').param('gainL', ui.value);
// X('midi').module('recorder').param('gainL', ui.value);
$('#slider-rec-level-left').slider('value', ui.value);
}
}).spinner('value', 1);
$('#spinner-rec-level-right').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
X('mixer').module('recorder').param('gainR', ui.value);
X('oneshot').module('recorder').param('gainR', ui.value);
X('stream').module('recorder').param('gainR', ui.value);
// X('midi').module('recorder').param('gainR', ui.value);
$('#slider-rec-level-right').slider('value', ui.value);
}
}).spinner('value', 1);
})();
// UI for session
(function() {
var openCallback = function(event, socket) {
$('#session-controllers').append('<div class="dialog-open-session"><p></p></div>');
// Define dialog
$('.dialog-open-session:last').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
width : 800,
height : 'auto',
modal : false,
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
var url = socket.url;
$('.dialog-open-session:last p').html('<b>Connection to (' + url + ') succeeded.</b>');
$('.dialog-open-session:last').dialog('open');
};
var closeCallback = function(event, socket) {
$('#session-controllers').append('<div id="dialog-close-session"><p></p></div>');
// Define dialog
$('#dialog-close-session').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
width : 400,
height : 'auto',
modal : true,
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$('[for="checkbox-is-session"] span').removeClass('check-on');
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-close-session p').html('<b>Connection closed.</b>');
$('#dialog-close-session').dialog('open');
};
var errorCallback = function(event, socket) {
$('#session-controllers').append('<div id="dialog-error-session"><p></p></div>');
// Define dialog
$('#dialog-error-session').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
width : 400,
height : 'auto',
modal : true,
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$('[for="checkbox-is-session"] span').removeClass('check-on');
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-error-session p').html('<b>Server Error.</b>');
$('#dialog-error-session').dialog('open');
};
var stateCallback = function() {
$('#dialog-wait-for-change').dialog('close').remove();
var checker = $('[for="checkbox-is-session"] span');
if (X('mixer').module('session').state()) {
checker.addClass('check-on');
} else {
checker.removeClass('check-on');
}
};
var waitCallback = function(arrayBuffer) {
$('#session-controllers').append('<div id="dialog-wait-for-change"></div>');
// Define dialog
$('#dialog-wait-for-change').dialog({
title : 'Waiting...',
autoOpen : false,
show : 'fade',
hide : 'fade',
modal : true,
width : 'auto',
height : 'auto',
draggable : true,
resizable : false
});
$('#dialog-wait-for-change').html('<div><img src="images/illust/gif/progress-bar.gif" alt="Decoding ..." width="214" height="12" /></div>');
$('#dialog-wait-for-change').dialog('open');
};
$('#checkbox-is-session').on(EventWrapper.CLICK, function() {
if (this.checked) {
if (X('mixer').module('session').isConnected()
&& X('oneshot').module('session').isConnected()
&& X('stream').module('session').isConnected()
/*&& X('midi').module('session').isConnected()*/) {
// Connection to server has existed already
X('mixer').module('session').state(true, stateCallback, waitCallback);
X('oneshot').module('session').state(true, stateCallback, waitCallback);
X('audio').module('session').state(true, stateCallback, waitCallback);
X('stream').module('session').state(true, function() {
stateCallback();
if ($('#select-sound-source').val() === 'microphone') {
$('#select-sound-source').trigger('change');
}
}, waitCallback);
// X('midi').module('session').state(true, stateCallback, waitCallback);
} else {
var HOST = '';
var PATH = '';
if (location.host.indexOf('localhost') !== -1) {
HOST = 'localhost';
PATH = '';
} else if (location.host.indexOf('curtaincall.weblike.jp') !== -1) {
HOST = '210.152.156.200';
PATH = '/home/node/websocket/';
}
// The 1st
try {
X('mixer').module('session').setup({
tls : false,
host : HOST,
port : 8000,
path : PATH,
open : openCallback,
close : closeCallback,
error : errorCallback
}).state(true, stateCallback, waitCallback);
X('oneshot').module('session').setup({
tls : false,
host : HOST,
port : 8001,
path : PATH,
open : openCallback,
close : closeCallback,
error : errorCallback
}).state(true, stateCallback, waitCallback);
X('audio').module('session').setup({
tls : false,
host : HOST,
port : 8002,
path : PATH,
open : openCallback,
close : closeCallback,
error : errorCallback
}).state(true, stateCallback, waitCallback);
X('stream').module('session').setup({
tls : false,
host : HOST,
port : 8003,
path : PATH,
open : function(event, websocket) {
openCallback(event, websocket);
if ($('#select-sound-source').val() === 'microphone') {
$('#select-sound-source').trigger('change');
}
},
close : closeCallback,
error : errorCallback
}).state(true, stateCallback, waitCallback);
/*
X('midi').module('session').setup({
tls : false,
host : HOST,
port : 8004,
path : PATH,
open : openCallback,
close : closeCallback,
error : errorCallback
}).state(true, stateCallback, waitCallback);
*/
} catch (error) {
$('#session-controllers').append('<div id="dialog-offline"><p></p></div>');
// Define dialog
$('#dialog-offline').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'explode',
hide : 'explode',
width : 400,
height : 'auto',
modal : true,
draggable : true,
resizable : false,
buttons : {
'OK' : function() {
$('[for="checkbox-is-session"] span').removeClass('check-on');
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-offline p').html('<b>' + error.message + '</b>');
$('#dialog-offline').dialog('open');
}
}
} else {
X('mixer').module('session').state(false, stateCallback, waitCallback);
X('oneshot').module('session').state(false, stateCallback, waitCallback);
X('audio').module('session').state(false, stateCallback, waitCallback);
X('stream').module('session').state(false, stateCallback, waitCallback);
// X('midi').module('session').state(false, stateCallback, waitCallback);
}
});
})();
// UI for displaying audio wave
(function() {
// Interval (Slider)
$('#slider-visualization-interval').slider({
value : 500,
min : 0,
max : 1000,
step : 10,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
var interval = 0;
if (ui.value === 0) {
interval = 'AUTO';
} else {
interval = ui.value;
}
X('mixer').module('analyser').domain('time').param('interval', interval);
X('mixer').module('analyser').domain('fft').param('interval', interval);
X('oneshot').module('analyser').domain('time').param('interval', interval);
X('oneshot').module('analyser').domain('fft').param('interval', interval);
X('audio').module('analyser').domain('time').param('interval', interval);
X('audio').module('analyser').domain('fft').param('interval', interval);
X('stream').module('analyser').domain('time').param('interval', interval);
X('stream').module('analyser').domain('fft').param('interval', interval);
// X('midi').module('analyser').domain('time').param('interval', interval);
// X('midi').module('analyser').domain('fft').param('interval', interval);
$('#spinner-visualization-interval').spinner('value', ui.value);
}
});
// Interval (Slider)
$('#spinner-visualization-interval').spinner({
min : 0,
max : 1000,
step : 10,
spin : function(event, ui) {
var interval = 0;
if (ui.value === 0) {
interval = 'AUTO';
} else {
interval = ui.value;
}
X('mixer').module('analyser').domain('time').param('interval', interval);
X('mixer').module('analyser').domain('fft').param('interval', interval);
X('oneshot').module('analyser').domain('time').param('interval', interval);
X('oneshot').module('analyser').domain('fft').param('interval', interval);
X('audio').module('analyser').domain('time').param('interval', interval);
X('audio').module('analyser').domain('fft').param('interval', interval);
X('stream').module('analyser').domain('time').param('interval', interval);
X('stream').module('analyser').domain('fft').param('interval', interval);
// X('midi').module('analyser').domain('time').param('interval', interval);
// X('midi').module('analyser').domain('fft').param('interval', interval);
$('#slider-visualization-interval').slider('value', ui.value);
}
}).spinner('value', 500);
// Smoothing (Slider)
$('#slider-visualization-smoothing').slider({
value : 0.8,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
X('mixer').module('analyser').param('smoothingTimeConstant', ui.value);
X('oneshot').module('analyser').param('smoothingTimeConstant', ui.value);
X('audio').module('analyser').param('smoothingTimeConstant', ui.value);
X('stream').module('analyser').param('smoothingTimeConstant', ui.value);
// X('midi').module('analyser').param('smoothingTimeConstant', ui.value);
$('#spinner-visualization-smoothing').spinner('value', ui.value);
}
});
// Smoothing (Slider)
$('#spinner-visualization-smoothing').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
X('mixer').module('analyser').param('smoothingTimeConstant', ui.value);
X('oneshot').module('analyser').param('smoothingTimeConstant', ui.value);
X('audio').module('analyser').param('smoothingTimeConstant', ui.value);
X('stream').module('analyser').param('smoothingTimeConstant', ui.value);
// X('midi').module('analyser').param('smoothingTimeConstant', ui.value);
$('#slider-visualization-smoothing').slider('value', ui.value);
}
}).spinner('value', 0.8);
var sources = ['mixer', 'oneshot', 'audio', 'stream'/*, 'midi'*/];
var setRealTimeAnalyser = function(source, api) {
X(source).module('analyser').param({
fftSize : 2048,
minDecibels : -100,
maxDecibels : -30,
smoothingTimeConstant : 0.1
});
X(source).module('analyser').domain('time').setup(api, (api + '-time'), 'svg-parent-time').param({
interval : $('#slider-visualization-interval').slider('value'),
shape : 'line',
wave : 'rgba(0, 0, 255, 1.0)',
font : '12px Times New Roman',
width : 2,
right : 0
});
X(source).module('analyser').domain('fft').setup(api, (api + '-spectrum'), 'svg-parent-spectrum').param({
interval : $('#slider-visualization-interval').slider('value'),
shape : 'rect',
wave : (api === 'canvas') ? 'gradient' : 'rgba(0, 0, 255, 1.0)',
grad : [{offset : 0, color : 'rgba(0, 128, 255, 1.0)'}, {offset : 1, color : 'rgba(0, 0, 255, 1.0)'}],
font : '12px Times New Roman',
width : 2,
right : 0,
type : 'uint',
size : 256
});
};
var setAnalyser = function(api) {
X('audio').module('analyser').domain('time-all-L').setup(api, (api + '-time-all-L'), 'svg-parent-L').state(true).param({
shape : (api === 'canvas') ? 'rect' : 'line',
wave : (api === 'canvas') ? 'gradient' : 'rgba(0, 0, 255, 1.0)',
grad : [{offset : 0, color : 'rgba(0, 128, 255, 1.0)'}, {offset : 1, color : 'rgba(0, 0, 255, 1.0)'}],
font : '12px Times New Roman',
width : 0.5,
right : 0
});
X('audio').module('analyser').domain('time-all-R').setup(api, (api + '-time-all-R'), 'svg-parent-R').state(true).param({
shape : (api === 'canvas') ? 'rect' : 'line',
wave : (api === 'canvas') ? 'gradient' : 'rgba(0, 0, 255, 1.0)',
grad : [{offset : 0, color : 'rgba(0, 128, 255, 1.0)'}, {offset : 1, color : 'rgba(0, 0, 255, 1.0)'}],
font : '12px Times New Roman',
width : 0.5,
right : 0
});
};
// Initialization
for (var i = 0, len = sources.length; i < len; i++) {
setRealTimeAnalyser(sources[i], 'canvas');
}
setAnalyser('canvas');
// Set current time
X('audio').module('analyser').domain('time-all-L').drag(drawNodeCallback);
X('audio').module('analyser').domain('time-all-R').drag(drawNodeCallback);
$('svg').hide();
$('#select-visualization-api').change(function() {
switch ($(this).val()) {
case 'canvas' :
for (var i = 0, len = sources.length; i < len; i++) {
setRealTimeAnalyser(sources[i], 'canvas');
}
setAnalyser('canvas');
// Set current time
X('audio').module('analyser').domain('time-all-L').drag(drawNodeCallback);
X('audio').module('analyser').domain('time-all-R').drag(drawNodeCallback);
$('canvas').show();
$('svg').hide();
break;
case 'svg' :
for (var i = 0, len = sources.length; i < len; i++) {
setRealTimeAnalyser(sources[i], 'svg');
}
setAnalyser('svg');
// Set current time
X('audio').module('analyser').domain('time-all-L').drag(drawNodeCallback);
X('audio').module('analyser').domain('time-all-R').drag(drawNodeCallback);
$('svg').show();
$('canvas').hide();
break;
default :
break;
}
}).select2();
$('#visualization-of-sound').parent('.controller-panel').hide();
$('#checkbox-is-visualization').on(EventWrapper.CLICK, function() {
if (this.checked) {
X('mixer').module('analyser').domain('time').state(true);
X('mixer').module('analyser').domain('fft').state(true);
X('oneshot').module('analyser').domain('time').state(true);
X('oneshot').module('analyser').domain('fft').state(true);
X('audio').module('analyser').domain('time').state(true);
X('audio').module('analyser').domain('fft').state(true);
X('stream').module('analyser').domain('time').state(true);
X('stream').module('analyser').domain('fft').state(true);
// X('midi').module('analyser').domain('time').state(true);
// X('midi').module('analyser').domain('fft').state(true);
$('#visualization-of-sound').parent('.controller-panel').slideDown(1000, 'easeOutQuint');
$('[for="checkbox-is-visualization"] span').addClass('check-on');
} else {
X('mixer').module('analyser').domain('time').state(false);
X('mixer').module('analyser').domain('fft').state(false);
X('oneshot').module('analyser').domain('time').state(false);
X('oneshot').module('analyser').domain('fft').state(false);
X('audio').module('analyser').domain('time').state(false);
X('audio').module('analyser').domain('fft').state(false);
X('stream').module('analyser').domain('time').state(false);
X('stream').module('analyser').domain('fft').state(false);
// X('midi').module('analyser').domain('time').state(false);
// X('midi').module('analyser').domain('fft').state(false);
$('#visualization-of-sound').parent('.controller-panel').slideUp(1000, 'easeOutQuint');
$('[for="checkbox-is-visualization"] span').removeClass('check-on');
}
});
// Tab-Pannel (Left channel wave or Right channel wave)
$($('#visualization-of-sound div dl dt > a.selected').attr('href')).hide();
$('#visualization-of-sound div dl dt > a').on(EventWrapper.CLICK, function() {
$('#visualization-of-sound div dl[id*="time-all"]').hide();
$('#visualization-of-sound div dl dt > a.selected').removeClass('selected');
$($(this).attr('href')).show();
$($(this).attr('href') + ' dt a').addClass('selected');
return false;
});
})();
// Oscillator - 1
(function() {
// Toggle active
$('#checkbox-oscillator-1').on(EventWrapper.CLICK, function() {
if (this.checked) {
X('oscillator', 0).state(true);
$('[for="checkbox-oscillator-1"] span').addClass('check-on');
} else {
X('oscillator', 0).state(false);
$('[for="checkbox-oscillator-1"] span').removeClass('check-on');
}
});
// Select wave type
$('[name="form-wave-type-1"] :radio').on(EventWrapper.CLICK, function(event) {
if (this.checked) {
X('oscillator', 0).param('type', $(this).val());
$('[name="form-wave-type-1"] label.active').removeClass('active');
$('label[for="' + $(this).attr('id') + '"]').addClass('active');
}
});
var setVolume = function(value) {
for (var i = 0, len = X('oscillator').length(); i < len; i++) {
X('oscillator', i).param('volume', value);
}
};
var setOctave = function(value) {
for (var i = 0, len = X('oscillator').length(); i < len; i++) {
X('oscillator', i).param('octave', value);
}
};
var setFine = function(value) {
for (var i = 0, len = X('oscillator').length(); i < len; i++) {
X('oscillator', i).param('fine', value);
}
};
// Gain (Slider)
$('#slider-volume-1').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setVolume(ui.value);
$('#spinner-volume-1').spinner('value', ui.value);
},
slide : function(event, ui) {
setVolume(ui.value);
$('#spinner-volume-1').spinner('value', ui.value);
}
});
// Gain (Spinner)
$('#spinner-volume-1').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setVolume(ui.value);
$('#slider-volume-1').slider('value', ui.value);
}
}).spinner('value', 1);
// Octave (Slider)
$('#slider-octave-1').slider({
value : 0,
min : -4,
max : 4,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setOctave(ui.value);
$('#spinner-octave-1').spinner('value', ui.value);
},
slide : function(event, ui) {
setOctave(ui.value);
$('#spinner-octave-1').spinner('value', ui.value);
}
});
// Octave (Spinner)
$('#spinner-octave-1').spinner({
min : -4,
max : 4,
step : 1,
spin : function(event, ui) {
setOctave(ui.value);
$('#slider-octave-1').slider('value', ui.value);
}
}).spinner('value', 0);
// Fine (Slider)
$('#slider-fine-1').slider({
value : 0,
min : -1200,
max : 1200,
step : 10,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFine(ui.value);
$('#spinner-fine-1').spinner('value', ui.value);
},
slide : function(event, ui) {
setFine(ui.value);
$('#spinner-fine-1').spinner('value', ui.value);
}
});
// Fine (Spinner)
$('#spinner-fine-1').spinner({
min : -1200,
max : 1200,
step : 10,
spin : function(event, ui) {
setFine(ui.value);
$('#slider-fine-1').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Oscillator - 2
(function() {
// Toggle active
$('#checkbox-oscillator-2').on(EventWrapper.CLICK, function() {
if (this.checked) {
cloned('oscillator', 0).state(true);
$('[for="checkbox-oscillator-2"] span').addClass('check-on');
} else {
cloned('oscillator', 0).state(false);
$('[for="checkbox-oscillator-2"] span').removeClass('check-on');
}
});
// Select wave type
$('[name="form-wave-type-2"] :radio').on(EventWrapper.CLICK, function(event) {
if (this.checked) {
cloned('oscillator', 0).param('type', $(this).val());
$('[name="form-wave-type-2"] label.active').removeClass('active');
$('label[for="' + $(this).attr('id') + '"]').addClass('active');
}
});
var setVolume = function(value) {
for (var i = 0, len = cloned('oscillator').length(); i < len; i++) {
cloned('oscillator', i).param('volume', value);
}
};
var setOctave = function(value) {
for (var i = 0, len = cloned('oscillator').length(); i < len; i++) {
cloned('oscillator', i).param('octave', value);
}
};
var setFine = function(value) {
for (var i = 0, len = cloned('oscillator').length(); i < len; i++) {
cloned('oscillator', i).param('fine', value);
}
};
// Gain (Slider)
$('#slider-volume-2').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setVolume(ui.value);
$('#spinner-volume-2').spinner('value', ui.value);
},
slide : function(event, ui) {
setVolume(ui.value);
$('#spinner-volume-2').spinner('value', ui.value);
}
});
// Gain (Spinner)
$('#spinner-volume-2').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setVolume(ui.value);
$('#slider-volume-2').slider('value', ui.value);
}
}).spinner('value', 1);
// Octave (Slider)
$('#slider-octave-2').slider({
value : 0,
min : -4,
max : 4,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setOctave(ui.value);
$('#spinner-octave-2').spinner('value', ui.value);
},
slide : function(event, ui) {
setOctave(ui.value);
$('#spinner-octave-2').spinner('value', ui.value);
}
});
// Octave (Spinner)
$('#spinner-octave-2').spinner({
min : -4,
max : 4,
step : 1,
spin : function(event, ui) {
setOctave(ui.value);
$('#slider-octave-2').slider('value', ui.value);
}
}).spinner('value', 0);
// Fine (Slider)
$('#slider-fine-2').slider({
value : 0,
min : -1200,
max : 1200,
step : 10,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFine(ui.value);
$('#spinner-fine-2').spinner('value', ui.value);
},
slide : function(event, ui) {
setFine(ui.value);
$('#spinner-fine-2').spinner('value', ui.value);
}
});
// Fine (Spinner)
$('#spinner-fine-2').spinner({
min : -1200,
max : 1200,
step : 10,
spin : function(event, ui) {
setFine(ui.value);
$('#slider-fine-2').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Envelope Generator
(function() {
var setAttack = function(value) {
X('oscillator').module('eg').param('attack', value);
cloned('oscillator').module('eg').param('attack', value);
X('oneshot').module('eg').param('attack', value);
};
var setDecay = function(value) {
X('oscillator').module('eg').param('decay', value);
cloned('oscillator').module('eg').param('decay', value);
X('oneshot').module('eg').param('decay', value);
};
var setSustain = function(value) {
X('oscillator').module('eg').param('sustain', value);
cloned('oscillator').module('eg').param('sustain', value);
X('oneshot').module('eg').param('sustain', value);
};
var setRelease = function(value) {
X('oscillator').module('eg').param('release', value);
cloned('oscillator').module('eg').param('release', value);
X('oneshot').module('eg').param('release', value);
};
// Attack (Slider)
$('#slider-attack').slider({
value : 0.01,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setAttack(ui.value);
$('#spinner-attack').spinner('value', ui.value);
},
slide : function(event, ui) {
setAttack(ui.value);
$('#spinner-attack').spinner('value', ui.value);
}
});
// Attack (Spinner)
$('#spinner-attack').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setAttack(ui.value);
$('#slider-attack').slider('value', ui.value);
}
}).spinner('value', 0.01);
// Decay (Slider)
$('#slider-decay').slider({
value : 0.3,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDecay(ui.value);
$('#spinner-decay').spinner('value', ui.value);
},
slide : function(event, ui) {
setDecay(ui.value);
$('#spinner-decay').spinner('value', ui.value);
}
});
// Decay (Spinner)
$('#spinner-decay').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setDecay(ui.value);
$('#slider-decay').slider('value', ui.value);
}
}).spinner('value', 0.3);
// Sustain (Slider)
$('#slider-sustain').slider({
value : 0.5,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setSustain(ui.value);
$('#spinner-sustain').spinner('value', ui.value);
},
slide : function(event, ui) {
setSustain(ui.value);
$('#spinner-sustain').spinner('value', ui.value);
}
});
// Sustain (Spinner)
$('#spinner-sustain').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setSustain(ui.value);
$('#slider-sustain').slider('value', ui.value);
}
}).spinner('value', 0.5);
// Release (Slider)
$('#slider-release').slider({
value : 1,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setRelease(ui.value);
$('#spinner-release').spinner('value', ui.value);
},
slide : function(event, ui) {
setRelease(ui.value);
$('#spinner-release').spinner('value', ui.value);
}
});
// Release (Spinner)
$('#spinner-release').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setRelease(ui.value);
$('#slider-release').slider('value', ui.value);
}
}).spinner('value', 1);
})();
// Master volume for oscillator, one-shot audio
(function() {
var setMasterVolume = function(value) {
X('mixer').param('masterVolume', value);
X('oscillator').param('masterVolume', value);
cloned('oscillator').param('masterVolume', value);
X('oneshot').param('masterVolume', value);
X('stream').param('masterVolume', value);
};
setMasterVolume(0.5);
// Slider
$('#slider-master-volume').slider({
value : 0.5,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setMasterVolume(ui.value);
$('#spinner-master-volume').spinner('value', ui.value);
},
slide : function(event, ui) {
setMasterVolume(ui.value);
$('#spinner-master-volume').spinner('value', ui.value);
}
});
// Spinner
$('#spinner-master-volume').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setMasterVolume(ui.value);
$('#slider-master-volume').slider('value', ui.value);
}
}).spinner('value', 0.5);
})();
// Glide
(function() {
// X('oscillator').module('glide').param('type', 'exponential');
// cloned('oscillator').module('glide').param('type', 'exponential');
var setGlideTime = function(value) {
value *= 2;
X('oscillator').module('glide').param('time', value);
cloned('oscillator').module('glide').param('time', value);
};
// Slider
$('#slider-glide').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setGlideTime(ui.value);
$('#spinner-glide').spinner('value', ui.value);
},
slide : function(event, ui) {
setGlideTime(ui.value);
$('#spinner-glide').spinner('value', ui.value);
}
});
// Spinner
$('#spinner-glide').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setGlideTime(ui.value);
$('#slider-glide').slider('value', ui.value);
}
}).spinner('value', 0);;
})();
// Audio controllers
(function() {
$('#audio-control').on(EventWrapper.CLICK, function(event) {
X('audio').toggle(X('audio').param('currentTime')/*, [X('audio').module('panner')]*/);
return false;
});
X('audio').param('masterVolume', 0.5);
// Master volume for audio (Slider)
$('#slider-audio-volume').slider({
value : 0.5,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
X('audio').param('masterVolume', ui.value);
$('#spinner-audio-volume').spinner('value', ui.value);
}
});
// Master volume (Spinner)
$('#spinner-audio-volume').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
X('audio').param('masterVolume', ui.value);
$('#slider-audio-volume').slider('value', ui.value);
}
}).spinner('value', 0.5);
// Time (Slider)
$('#slider-audio-offset').slider({
value : 0,
min : 0,
// max : ?,
step : 1,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
if (X('audio').isBuffer()) {
X('audio').param('currentTime', ui.value);
X('audio').module('analyser').domain('time-all-L').update(ui.value);
X('audio').module('analyser').domain('time-all-R').update(ui.value);
var times = X.convertTime(ui.value);
$('#audio-offset').text(('0' + times.minutes).slice(-2) + ' : ' + ('0' + times.seconds).slice(-2) + '.00');
$('#spinner-audio-offset').spinner('value', Math.floor(ui.value));
}
}
});
// Time (Spinner)
$('#spinner-audio-offset').spinner({
min : 0,
// max : ?,
step : 2,
spin : function(event, ui) {
if (X('audio').isBuffer()) {
X('audio').param('currentTime', $(this).val());
X('audio').module('analyser').domain('time-all-L').update(ui.value);
X('audio').module('analyser').domain('time-all-R').update(ui.value);
var times = X.convertTime(ui.value);
$('#audio-offset').text(('0' + times.minutes).slice(-2) + ' : ' + ('0' + times.seconds).slice(-2) + '.00');
$('#slider-audio-offset').slider('value', ui.value);
}
}
}).spinner('value', 0);
// Playback rate (Slider)
$('#slider-playback-rate').slider({
value : 1,
min : 0.05,
max : 2,
step : 0.05,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
if (X('audio').isBuffer()) {
X('audio').param('playbackRate', ui.value);
}
X('oneshot').param('transpose', ui.value);
$('#spinner-playback-rate').spinner('value', ui.value);
}
});
// Playback rate (Spinner)
$('#spinner-playback-rate').spinner({
min : 0.05,
max : 2,
step : 0.05,
spin : function(event, ui) {
if (X('audio').isBuffer()) {
X('audio').param('playbackRate', ui.value);
}
X('oneshot').param('transpose', ui.value);
$('#slider-playback-rate').slider('value', ui.value);
}
}).spinner('value', 1);
// Vocal Canceler (Slider)
$('#slider-vocal-canceler').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
slide : function(event, ui) {
X('audio').module('vocalcanceler').param('depth', ui.value);
$('#spinner-vocal-canceler').spinner('value', ui.value);
}
});
// Vocal Canceler (Spinner)
$('#spinner-vocal-canceler').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
X('audio').module('vocalcanceler').param('depth', ui.value);
$('#slider-vocal-canceler').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Compressor
(function() {
var setState = function(state) {
X('mixer').module('compressor').state(state);
X('oscillator').module('compressor').state(state);
cloned('oscillator').module('compressor').state(state);
X('oneshot').module('compressor').state(state);
X('audio').module('compressor').state(state);
X('stream').module('compressor').state(state);
};
var setCompressor = function(key, value) {
X('mixer').module('compressor').param(key, value);
X('oscillator').module('compressor').param(key, value);
cloned('oscillator').module('compressor').param(key, value);
X('oneshot').module('compressor').param(key, value);
X('audio').module('compressor').param(key, value);
X('stream').module('compressor').param(key, value);
};
// Toggle active
$('#checkbox-is-compressor').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-compressor"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-compressor"] span').removeClass('check-on');
}
});
// Threshold (Slider)
$('#slider-threshold').slider({
value : -24,
min : -100,
max : 0,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setCompressor('threshold', ui.value);
$('#spinner-threshold').spinner('value', ui.value);
},
slide : function(event, ui) {
setCompressor('threshold', ui.value);
$('#spinner-threshold').spinner('value', ui.value);
}
});
// Threshold (Spinner)
$('#spinner-threshold').spinner({
min : -100,
max : 0,
step : 1,
spin : function(event, ui) {
setCompressor('threshold', ui.value);
$('#slider-threshold').slider('value', ui.value);
}
}).spinner('value', -24);
// Knee (Slider)
$('#slider-knee').slider({
value : 30,
min : 0,
max : 40,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setCompressor('knee', ui.value);
$('#spinner-knee').spinner('value', ui.value);
},
slide : function(event, ui) {
setCompressor('knee', ui.value);
$('#spinner-knee').spinner('value', ui.value);
}
});
// Knee (Spinner)
$('#spinner-knee').spinner({
min : 0,
max : 40,
step : 1,
spin : function(event, ui) {
setCompressor('knee', ui.value);
$('#slider-knee').slider('value', ui.value);
}
}).spinner('value', 30);
// Ratio (Slider)
$('#slider-ratio').slider({
value : 12,
min : 1,
max : 20,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setCompressor('ratio', ui.value);
$('#spinner-ratio').spinner('value', ui.value);
},
slide : function(event, ui) {
setCompressor('ratio', ui.value);
$('#spinner-ratio').spinner('value', ui.value);
}
});
// Ratio (Spinner)
$('#spinner-ratio').spinner({
min : 1,
max : 20,
step : 1,
spin : function(event, ui) {
setCompressor('ratio', ui.value);
$('#slider-ratio').slider('value', ui.value);
}
}).spinner('value', 12);
// Attack (Slider)
$('#slider-compressor-attack').slider({
value : 0.003,
min : 0,
max : 1,
step : 0.001,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setCompressor('attack', ui.value);
$('#spinner-compressor-attack').spinner('value', ui.value);
},
slide : function(event, ui) {
setCompressor('attack', ui.value);
$('#spinner-compressor-attack').spinner('value', ui.value);
}
});
// Attack (Spinner)
$('#spinner-compressor-attack').spinner({
min : 0,
max : 1,
step : 0.001,
spin : function(event, ui) {
setCompressor('attack', ui.value);
$('#slider-compressor-attack').slider('value', ui.value);
}
}).spinner('value', 0.003);
// Release (Slider)
$('#slider-compressor-release').slider({
value : 0.25,
min : 0.01,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setCompressor('release', ui.value);
$('#spinner-compressor-release').spinner('value', ui.value);
},
slide : function(event, ui) {
setCompressor('release', ui.value);
$('#spinner-compressor-release').spinner('value', ui.value);
}
});
// Release (Spinner)
$('#spinner-compressor-release').spinner({
min : 0.01,
max : 1,
step : 0.01,
spin : function(event, ui) {
setCompressor('release', ui.value);
$('#slider-compressor-release').slider('value', ui.value);
}
}).spinner('value', 0.25);
})();
// Distortion
(function() {
var setState = function(state) {
X('mixer').module('distortion').state(state);
X('oscillator').module('distortion').state(state);
cloned('oscillator').module('distortion').state(state);
X('oneshot').module('distortion').state(state);
X('audio').module('distortion').state(state);
X('stream').module('distortion').state(state);
};
var setDistortion = function(key, value) {
X('mixer').module('distortion').param(key, value);
X('oscillator').module('distortion').param(key, value);
cloned('oscillator').module('distortion').param(key, value);
X('oneshot').module('distortion').param(key, value);
X('audio').module('distortion').param(key, value);
X('stream').module('distortion').param(key, value);
};
// Initial state is OFF
setState(false);
// Initial color
setDistortion('color', 2000);
setDistortion('tone', 4000);
// Toggle active
$('#checkbox-is-distortion').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-distortion"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-distortion"] span').removeClass('check-on');
}
});
// Type
$('#select-distortion-type').change(function() {
setDistortion('curve', $(this).val());
}).select2();
// Sample
$('#select-distortion-sample').change(function() {
setDistortion('samples', $(this).val());
}).select2();
// Drive (Slider)
$('#slider-distortion-drive').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDistortion('drive', ui.value);
$('#spinner-distortion-drive').spinner('value', ui.value);
},
slide : function(event, ui) {
setDistortion('drive', ui.value);
$('#spinner-distortion-drive').spinner('value', ui.value);
}
});
// Drive (Spinner)
$('#spinner-distortion-drive').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setDistortion('drive', ui.value);
$('#slider-distortion-drive').slider('value', ui.value);
}
}).spinner('value', 1);
// Color (Slider)
$('#slider-distortion-color').slider({
value : 2000,
min : 20,
max : 2000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDistortion('color', ui.value);
$('#spinner-distortion-color').spinner('value', ui.value);
},
slide : function(event, ui) {
setDistortion('color', ui.value);
$('#spinner-distortion-color').spinner('value', ui.value);
}
});
// Color (Spinner)
$('#spinner-distortion-color').spinner({
min : 20,
max : 2000,
step : 1,
spin : function(event, ui) {
setDistortion('color', ui.value);
$('#slider-distortion-color').slider('value', ui.value);
}
}).spinner('value', 4000);
// Tone (Slider)
$('#slider-distortion-tone').slider({
value : 4000,
min : 20,
max : 8000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDistortion('tone', ui.value);
$('#spinner-distortion-tone').spinner('value', ui.value);
},
slide : function(event, ui) {
setDistortion('tone', ui.value);
$('#spinner-distortion-tone').spinner('value', ui.value);
}
});
// Color (Spinner)
$('#spinner-distortion-tone').spinner({
min : 20,
max : 8000,
step : 1,
spin : function(event, ui) {
setDistortion('tone', ui.value);
$('#slider-distortion-tone').slider('value', ui.value);
}
}).spinner('value', 4000);
})();
// Wah
(function() {
var setState = function(state) {
X('mixer').module('wah').state(state);
X('oscillator').module('wah').state(state);
cloned('oscillator').module('wah').state(state);
X('oneshot').module('wah').state(state);
X('audio').module('wah').state(state);
X('stream').module('wah').state(state);
};
var setWah = function(key, value) {
X('mixer').module('wah').param(key, value);
X('oscillator').module('wah').param(key, value);
cloned('oscillator').module('wah').param(key, value);
X('oneshot').module('wah').param(key, value);
X('audio').module('wah').param(key, value);
X('stream').module('wah').param(key, value);
};
// Initial state is OFF
setState(false);
// Toggle active
$('#checkbox-is-wah').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-wah"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-wah"] span').removeClass('check-on');
}
});
// Cutoff (Slider)
$('#slider-wah-cutoff').slider({
value : 350,
min : 350,
max : 8000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setWah('cutoff', ui.value);
$('#spinner-wah-cutoff').spinner('value', ui.value);
},
slide : function(event, ui) {
setWah('cutoff', ui.value);
$('#spinner-wah-cutoff').spinner('value', ui.value);
}
});
// Cutoff (Spinner)
$('#spinner-wah-cutoff').spinner({
min : 350,
max : 8000,
step : 1,
spin : function(event, ui) {
setWah('cutoff', ui.value);
$('#slider-wah-cutoff').slider('value', ui.value);
}
}).spinner('value', 350);
// Depth (Slider)
$('#slider-wah-depth').slider({
value : 0,
min : 0,
max : 0.9,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setWah('depth', ui.value);
$('#spinner-wah-depth').spinner('value', ui.value);
},
slide : function(event, ui) {
setWah('depth', ui.value);
$('#spinner-wah-depth').spinner('value', ui.value);
}
});
// Depth (Spinner)
$('#spinner-wah-depth').spinner({
min : 0,
max : 0.9,
step : 0.01,
spin : function(event, ui) {
setWah('depth', ui.value);
$('#slider-wah-depth').slider('value', ui.value);
}
}).spinner('value', 0);
// Rate (Slider)
$('#slider-wah-rate').slider({
value : 0,
min : 0,
max : 10,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setWah('rate', ui.value);
$('#spinner-wah-rate').spinner('value', ui.value);
},
slide : function(event, ui) {
setWah('rate', ui.value);
$('#spinner-wah-rate').spinner('value', ui.value);
}
});
// Rate (Spinner)
$('#spinner-wah-rate').spinner({
min : 0,
max : 10,
step : 0.05,
spin : function(event, ui) {
setWah('rate', ui.value);
$('#slider-wah-rate').slider('value', ui.value);
}
}).spinner('value', 0);
// Resonance (Slider)
$('#slider-wah-resonance').slider({
value : 1,
min : 1,
max : 20,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setWah('resonance', ui.value);
$('#spinner-wah-resonance').spinner('value', ui.value);
},
slide : function(event, ui) {
setWah('resonance', ui.value);
$('#spinner-wah-resonance').spinner('value', ui.value);
}
});
// Resonance (Spinner)
$('#spinner-wah-resonance').spinner({
min : 1,
max : 20,
step : 1,
spin : function(event, ui) {
setWah('resonance', ui.value);
$('#slider-wah-resonance').slider('value', ui.value);
}
}).spinner('value', 1);
})();
// Equalizer
(function() {
var setState = function(state) {
X('mixer').module('equalizer').state(state);
X('oscillator').module('equalizer').state(state);
cloned('oscillator').module('equalizer').state(state);
X('oneshot').module('equalizer').state(state);
X('audio').module('equalizer').state(state);
X('stream').module('equalizer').state(state);
};
var setEqualizer = function(key, value) {
X('mixer').module('equalizer').param(key, value);
X('oscillator').module('equalizer').param(key, value);
cloned('oscillator').module('equalizer').param(key, value);
X('oneshot').module('equalizer').param(key, value);
X('audio').module('equalizer').param(key, value);
X('stream').module('equalizer').param(key, value);
};
// Initial state is OFF
setState(false);
// Toggle active
$('#checkbox-is-equalizer').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-equalizer"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-equalizer"] span').removeClass('check-on');
}
});
// BASS (Slider)
$('#slider-equalizer-bass').slider({
value : 0,
min : -18,
max : 18,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setEqualizer('bass', ui.value);
$('#spinner-equalizer-bass').spinner('value', ui.value);
},
slide : function(event, ui) {
setEqualizer('bass', ui.value);
$('#spinner-equalizer-bass').spinner('value', ui.value);
}
});
// BASS (Spinner)
$('#spinner-equalizer-bass').spinner({
min : -18,
max : 18,
step : 1,
spin : function(event, ui) {
setEqualizer('bass', ui.value);
$('#slider-equalizer-bass').slider('value', ui.value);
}
}).spinner('value', 0);
// MIDDLE (Slider)
$('#slider-equalizer-middle').slider({
value : 0,
min : -18,
max : 18,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setEqualizer('middle', ui.value);
$('#spinner-equalizer-middle').spinner('value', ui.value);
},
slide : function(event, ui) {
setEqualizer('middle', ui.value);
$('#spinner-equalizer-middle').spinner('value', ui.value);
}
});
// MIDDLE (Spinner)
$('#spinner-equalizer-middle').spinner({
min : -18,
max : 18,
step : 1,
spin : function(event, ui) {
setEqualizer('middle', ui.value);
$('#slider-equalizer-middle').slider('value', ui.value);
}
}).spinner('value', 0);
// TREBLE (Slider)
$('#slider-equalizer-treble').slider({
value : 0,
min : -18,
max : 18,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setEqualizer('treble', ui.value);
$('#spinner-equalizer-treble').spinner('value', ui.value);
},
slide : function(event, ui) {
setEqualizer('treble', ui.value);
$('#spinner-equalizer-treble').spinner('value', ui.value);
}
});
// TREBLE (Spinner)
$('#spinner-equalizer-treble').spinner({
min : -18,
max : 18,
step : 1,
spin : function(event, ui) {
setEqualizer('treble', ui.value);
$('#slider-equalizer-treble').slider('value', ui.value);
}
}).spinner('value', 0);
// PRESENCE (Slider)
$('#slider-equalizer-presence').slider({
value : 0,
min : -18,
max : 18,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setEqualizer('presence', ui.value);
$('#spinner-equalizer-presence').spinner('value', ui.value);
},
slide : function(event, ui) {
setEqualizer('presence', ui.value);
$('#spinner-equalizer-presence').spinner('value', ui.value);
}
});
// PRESENCE (Spinner)
$('#spinner-equalizer-presence').spinner({
min : -18,
max : 18,
step : 1,
spin : function(event, ui) {
setEqualizer('presence', ui.value);
$('#slider-equalizer-presence').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Filter
(function() {
var setState = function(state) {
X('mixer').module('filter').state(state);
X('oscillator').module('filter').state(state);
cloned('oscillator').module('filter').state(state);
X('oneshot').module('filter').state(state);
X('audio').module('filter').state(state);
X('stream').module('filter').state(state);
};
var setFilter = function(key, value) {
X('mixer').module('filter').param(key, value);
X('oscillator').module('filter').param(key, value);
cloned('oscillator').module('filter').param(key, value);
X('oneshot').module('filter').param(key, value);
X('audio').module('filter').param(key, value);
X('stream').module('filter').param(key, value);
};
// Initial state is false
setState(false);
// Initial cutoff
setFilter('cutoff', 8000);
// Toggle active
$('#checkbox-is-filter').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-filter"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-filter"] span').removeClass('check-on');
}
});
// Filter type
$('#select-filter-type').change(function() {
setFilter('type', $(this).val());
}).select2();
// Cutoff (Slider)
$('#slider-filter-cutoff').slider({
value : 8000,
min : 20,
max : parseInt(X.SAMPLE_RATE / 2),
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFilter('cutoff', ui.value);
$('#spinner-filter-cutoff').spinner('value', ui.value);
},
slide : function(event, ui) {
setFilter('cutoff', ui.value);
$('#spinner-filter-cutoff').spinner('value', ui.value);
}
});
// Cutoff (Spinner)
$('#spinner-filter-cutoff').spinner({
min : 20,
max : parseInt(X.SAMPLE_RATE / 2),
step : 1,
spin : function(event, ui) {
setFilter('cutoff', ui.value);
$('#slider-filter-cutoff').slider('value', ui.value);
}
}).spinner('value', 8000);
// Q (Slider)
$('#slider-filter-Q').slider({
value : 1,
min : 1,
max : 20,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFilter('Q', ui.value);
$('#spinner-filter-Q').spinner('value', ui.value);
},
slide : function(event, ui) {
setFilter('Q', ui.value);
$('#spinner-filter-Q').spinner('value', ui.value);
}
});
// Q (spinner)
$('#spinner-filter-Q').spinner({
min : 1,
max : 20,
step : 1,
spin : function(event, ui) {
setFilter('Q', ui.value);
$('#slider-filter-Q').slider('value', ui.value);
}
}).spinner('value', 1);
// Gain (Slider)
$('#slider-filter-gain').slider({
value : 0,
min : -18,
max : 18,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFilter('gain', ui.value);
$('#spinner-filter-gain').spinner('value', ui.value);
},
slide : function(event, ui) {
setFilter('gain', ui.value);
$('#spinner-filter-gain').spinner('value', ui.value);
}
});
// Gain (Spinner)
$('#spinner-filter-gain').spinner({
min : -18,
max : 18,
step : 1,
spin : function(event, ui) {
setFilter('gain', ui.value);
$('#slider-filter-gain').slider('value', ui.value);
}
}).spinner('value', 0);
// Attack (Slider)
$('#slider-filter-attack').slider({
value : 0.01,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFilter('attack', ui.value);
$('#spinner-filter-attack').spinner('value', ui.value);
},
slide : function(event, ui) {
setFilter('attack', ui.value);
$('#spinner-filter-attack').spinner('value', ui.value);
}
});
// Attack (Spinner)
$('#spinner-filter-attack').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setFilter('attack', ui.value);
$('#slider-filter-attack').slider('value', ui.value);
}
}).spinner('value', 0.01);
// Decay (Slider)
$('#slider-filter-decay').slider({
value : 0.3,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFilter('decay', ui.value);
$('#spinner-filter-decay').spinner('value', ui.value);
},
slide : function(event, ui) {
setFilter('decay', ui.value);
$('#spinner-filter-decay').spinner('value', ui.value);
}
});
// Decay (Spinner)
$('#spinner-filter-decay').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setFilter('decay', ui.value);
$('#slider-filter-decay').slider('value', ui.value);
}
}).spinner('value', 0.3);
// Sustain (Slider)
$('#slider-filter-sustain').slider({
value : 1,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFilter('sustain', ui.value);
$('#spinner-filter-sustain').spinner('value', ui.value);
},
slide : function(event, ui) {
setFilter('sustain', ui.value);
$('#spinner-filter-sustain').spinner('value', ui.value);
}
});
// Sustain (Spinner)
$('#spinner-filter-sustain').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setFilter('sustain', ui.value);
$('#slider-filter-sustain').slider('value', ui.value);
}
}).spinner('value', 1);
// Release (Slider)
$('#slider-filter-release').slider({
value : 1,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFilter('release', ui.value);
$('#spinner-filter-release').spinner('value', ui.value);
},
slide : function(event, ui) {
setFilter('release', ui.value);
$('#spinner-filter-release').spinner('value', ui.value);
}
});
// Release (Spinner)
$('#spinner-filter-release').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setFilter('release', ui.value);
$('#slider-filter-release').slider('value', ui.value);
}
}).spinner('value', 1);
})();
// Tremolo
(function() {
var setState = function(state) {
X('mixer').module('tremolo').state(state);
X('oscillator').module('tremolo').state(state);
cloned('oscillator').module('tremolo').state(state);
X('oneshot').module('tremolo').state(state);
X('audio').module('tremolo').state(state);
X('stream').module('tremolo').state(state);
};
var setTremolo = function(key, value) {
X('mixer').module('tremolo').param(key, value);
X('oscillator').module('tremolo').param(key, value);
cloned('oscillator').module('tremolo').param(key, value);
X('oneshot').module('tremolo').param(key, value);
X('audio').module('tremolo').param(key, value);
X('stream').module('tremolo').param(key, value);
};
// Initial state is OFF
setState(false);
// Toggle active
$('#checkbox-is-tremolo').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-tremolo"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-tremolo"] span').removeClass('check-on');
}
});
// Wave
$('#select-tremolo-wave').change(function() {
setTremolo('wave', $(this).val());
}).select2();
// Depth (Slider)
$('#slider-tremolo-depth').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setTremolo('depth', ui.value);
$('#spinner-tremolo-depth').spinner('value', ui.value);
},
slide : function(event, ui) {
setTremolo('depth', ui.value);
$('#spinner-tremolo-depth').spinner('value', ui.value);
}
});
// Depth (Spinner)
$('#spinner-tremolo-depth').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setTremolo('depth', ui.value);
$('#slider-tremolo-depth').slider('value', ui.value);
}
}).spinner('value', 0);
// Rate (Slider)
$('#slider-tremolo-rate').slider({
value : 0,
min : 0,
max : 25,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setTremolo('rate', ui.value);
$('#spinner-tremolo-rate').spinner('value', ui.value);
},
slide : function(event, ui) {
setTremolo('rate', ui.value);
$('#spinner-tremolo-rate').spinner('value', ui.value);
}
});
// Rate (Spinner)
$('#spinner-tremolo-rate').spinner({
min : 0,
max : 25,
step : 0.05,
spin : function(event, ui) {
setTremolo('rate', ui.value);
$('#slider-tremolo-rate').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Ring modulator
(function() {
var setState = function(state) {
X('mixer').module('ringmodulator').state(state);
X('oscillator').module('ringmodulator').state(state);
cloned('oscillator').module('ringmodulator').state(state);
X('oneshot').module('ringmodulator').state(state);
X('audio').module('ringmodulator').state(state);
X('stream').module('ringmodulator').state(state);
};
var setRingModulator = function(key, value) {
X('mixer').module('ringmodulator').param(key, value);
X('oscillator').module('ringmodulator').param(key, value);
cloned('oscillator').module('ringmodulator').param(key, value);
X('oneshot').module('ringmodulator').param(key, value);
X('audio').module('ringmodulator').param(key, value);
X('stream').module('ringmodulator').param(key, value);
};
// Initial state is OFF
setState(false);
// Toggle active
$('#checkbox-is-ringmodulator').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-ringmodulator"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-ringmodulator"] span').removeClass('check-on');
}
});
// Depth (Slider)
$('#slider-ringmodulator-depth').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setRingModulator('depth', ui.value);
$('#spinner-ringmodulator-depth').spinner('value', ui.value);
},
slide : function(event, ui) {
setRingModulator('depth', ui.value);
$('#spinner-ringmodulator-depth').spinner('value', ui.value);
}
});
// Depth (Spinner)
$('#spinner-ringmodulator-depth').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setRingModulator('depth', ui.value);
$('#slider-ringmodulator-depth').slider('value', ui.value);
}
}).spinner('value', 1);
// Rate (Slider)
$('#slider-ringmodulator-rate').slider({
value : 0,
min : 0,
max : 1500,
step : 100,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setRingModulator('rate', ui.value);
$('#spinner-ringmodulator-rate').spinner('value', ui.value);
},
slide : function(event, ui) {
setRingModulator('rate', ui.value);
$('#spinner-ringmodulator-rate').spinner('value', ui.value);
}
});
// Rate (Spinner)
$('#spinner-ringmodulator-rate').spinner({
min : 0,
max : 1500,
step : 100,
spin : function(event, ui) {
setRingModulator('rate', ui.value);
$('#slider-ringmodulator-rate').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Auto panner
(function() {
var setState = function(state) {
X('mixer').module('autopanner').state(state);
X('oscillator').module('autopanner').state(state);
cloned('oscillator').module('autopanner').state(state);
X('oneshot').module('autopanner').state(state);
X('audio').module('autopanner').state(state);
X('stream').module('autopanner').state(state);
};
var setAutoPanner = function(key, value) {
X('mixer').module('autopanner').param(key, value);
X('oscillator').module('autopanner').param(key, value);
cloned('oscillator').module('autopanner').param(key, value);
X('oneshot').module('autopanner').param(key, value);
X('audio').module('autopanner').param(key, value);
X('stream').module('autopanner').param(key, value);
};
// Initial state is OFF
setState(false);
// Toggle active
$('#checkbox-is-autopanner').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-autopanner"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-autopanner"] span').removeClass('check-on');
}
});
// Depth (Slider)
$('#slider-autopanner-depth').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setAutoPanner('depth', ui.value);
$('#spinner-autopanner-depth').spinner('value', ui.value);
},
slide : function(event, ui) {
setAutoPanner('depth', ui.value);
$('#spinner-autopanner-depth').spinner('value', ui.value);
}
});
// Depth (Spinner)
$('#spinner-autopanner-depth').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setAutoPanner('depth', ui.value);
$('#slider-autopanner-depth').slider('value', ui.value);
}
}).spinner('value', 0);
// Rate (Slider)
$('#slider-autopanner-rate').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setAutoPanner('rate', ui.value);
$('#spinner-autopanner-rate').spinner('value', ui.value);
},
slide : function(event, ui) {
setAutoPanner('rate', ui.value);
$('#spinner-autopanner-rate').spinner('value', ui.value);
}
});
// Rate (Spinner)
$('#spinner-autopanner-rate').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setAutoPanner('rate', ui.value);
$('#slider-autopanner-rate').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Phaser
(function() {
var setState = function(state) {
X('mixer').module('phaser').state(state);
X('oscillator').module('phaser').state(state);
cloned('oscillator').module('phaser').state(state);
X('oneshot').module('phaser').state(state);
X('audio').module('phaser').state(state);
X('stream').module('phaser').state(state);
};
var setPhaser = function(key, value) {
X('mixer').module('phaser').param(key, value);
X('oscillator').module('phaser').param(key, value);
cloned('oscillator').module('phaser').param(key, value);
X('oneshot').module('phaser').param(key, value);
X('audio').module('phaser').param(key, value);
X('stream').module('phaser').param(key, value);
};
// Initial state is OFF
setState(false);
// Toggle active
$('#checkbox-is-phaser').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-phaser"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-phaser"] span').removeClass('check-on');
}
});
// The number of All-Pass Filters
$('#select-phaser-stage').change(function() {
setPhaser('stage', $(this).val());
}).select2();
// Cutoff (Slider)
$('#slider-phaser-cutoff').slider({
value : 350,
min : 350,
max : 8000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setPhaser('cutoff', ui.value);
$('#spinner-phaser-cutoff').spinner('value', ui.value);
},
slide : function(event, ui) {
setPhaser('cutoff', ui.value);
$('#spinner-phaser-cutoff').spinner('value', ui.value);
}
});
// Cutoff (Spinner)
$('#spinner-phaser-cutoff').spinner({
min : 350,
max : 8000,
step : 1,
spin : function(event, ui) {
setPhaser('cutoff', ui.value);
$('#slider-phaser-cutoff').slider('value', ui.value);
}
}).spinner('value', 350);
// Resonance (Slider)
$('#slider-phaser-resonance').slider({
value : 1,
min : 1,
max : 20,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setPhaser('resonance', ui.value);
$('#spinner-phaser-resonance').spinner('value', ui.value);
},
slide : function(event, ui) {
setPhaser('resonance', ui.value);
$('#spinner-phaser-resonance').spinner('value', ui.value);
}
});
// Resonance (Spinner)
$('#spinner-phaser-resonance').spinner({
min : 1,
max : 20,
step : 1,
spin : function(event, ui) {
setPhaser('resonance', ui.value);
$('#slider-phaser-resonance').slider('value', ui.value);
}
}).spinner('value', 1);
// Depth (Slider)
$('#slider-phaser-depth').slider({
value : 0,
min : 0,
max : 0.9,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setPhaser('depth', ui.value);
$('#spinner-phaser-depth').spinner('value', ui.value);
},
slide : function(event, ui) {
setPhaser('depth', ui.value);
$('#spinner-phaser-depth').spinner('value', ui.value);
}
});
// Depth (Spinner)
$('#spinner-phaser-depth').spinner({
min : 0,
max : 0.9,
step : 0.05,
spin : function(event, ui) {
setPhaser('depth', ui.value);
$('#slider-phaser-depth').slider('value', ui.value);
}
}).spinner('value', 0);
// Rate (Slider)
$('#slider-phaser-rate').slider({
value : 0,
min : 0,
max : 5,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setPhaser('rate', ui.value);
$('#spinner-phaser-rate').spinner('value', ui.value);
},
slide : function(event, ui) {
setPhaser('rate', ui.value);
$('#spinner-phaser-rate').spinner('value', ui.value);
}
});
// Rate (Spinner)
$('#spinner-phaser-rate').spinner({
min : 0,
max : 5,
step : 0.1,
spin : function(event, ui) {
setPhaser('rate', ui.value);
$('#slider-phaser-rate').slider('value', ui.value);
}
}).spinner('value', 0);
// Mix (Slider)
$('#slider-phaser-mix').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setPhaser('mix', ui.value);
$('#spinner-phaser-mix').spinner('value', ui.value);
},
slide : function(event, ui) {
setPhaser('mix', ui.value);
$('#spinner-phaser-mix').spinner('value', ui.value);
}
});
// Mix (Spinner)
$('#spinner-phaser-mix').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setPhaser('mix', ui.value);
$('#slider-phaser-mix').slider('value', ui.value);
}
}).spinner('value', 0);
// Feedback (Slider)
$('#slider-phaser-feedback').slider({
value : 0,
min : 0,
max : 0.95,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setPhaser('feedback', ui.value);
$('#spinner-phaser-feedback').spinner('value', ui.value);
},
slide : function(event, ui) {
setPhaser('feedback', ui.value);
$('#spinner-phaser-feedback').spinner('value', ui.value);
}
});
// Feedback (Spinner)
$('#spinner-phaser-feedback').spinner({
min : 0,
max : 0.95,
step : 0.05,
spin : function(event, ui) {
setPhaser('feedback', ui.value);
$('#slider-phaser-feedback').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Flanger
(function() {
var setState = function(state) {
X('mixer').module('flanger').state(state);
X('oscillator').module('flanger').state(state);
cloned('oscillator').module('flanger').state(state);
X('oneshot').module('flanger').state(state);
X('audio').module('flanger').state(state);
X('stream').module('flanger').state(state);
};
var setFlanger = function(key, value) {
X('mixer').module('flanger').param(key, value);
X('oscillator').module('flanger').param(key, value);
cloned('oscillator').module('flanger').param(key, value);
X('oneshot').module('flanger').param(key, value);
X('audio').module('flanger').param(key, value);
X('stream').module('flanger').param(key, value);
};
// Initial state is OFF
setState(false);
// Initail tone
setFlanger('tone', 4000);
// Toggle active
$('#checkbox-is-flanger').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-flanger"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-flanger"] span').removeClass('check-on');
}
});
// Delay Time (Slider)
$('#slider-flanger-time').slider({
value : 0,
min : 0,
max : 10,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFlanger('time', (ui.value / Math.pow(10, 3)));
$('#spinner-flanger-time').spinner('value', ui.value);
},
slide : function(event, ui) {
setFlanger('time', (ui.value / Math.pow(10, 3)));
$('#spinner-flanger-time').spinner('value', ui.value);
}
});
// Delay Time (Spinner)
$('#spinner-flanger-time').spinner({
min : 0,
max : 10,
step : 0.05,
spin : function(event, ui) {
setFlanger('time', (ui.value / Math.pow(10, 3)));
$('#slider-flanger-time').slider('value', ui.value);
}
}).spinner('value', 0);
// Depth (Slider)
$('#slider-flanger-depth').slider({
value : 0,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFlanger('depth', ui.value);
$('#spinner-flanger-depth').spinner('value', ui.value);
},
slide : function(event, ui) {
setFlanger('depth', ui.value);
$('#spinner-flanger-depth').spinner('value', ui.value);
}
});
// Depth (Spinner)
$('#spinner-flanger-depth').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setFlanger('depth', ui.value);
$('#slider-flanger-depth').slider('value', ui.value);
}
}).spinner('value', 0);
// Rate (Slider)
$('#slider-flanger-rate').slider({
value : 0,
min : 0,
max : 10,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFlanger('rate', ui.value);
$('#spinner-flanger-rate').spinner('value', ui.value);
},
slide : function(event, ui) {
setFlanger('rate', ui.value);
$('#spinner-flanger-rate').spinner('value', ui.value);
}
});
// Rate (Spinner)
$('#spinner-flanger-rate').spinner({
min : 0,
max : 10,
step : 0.05,
spin : function(event, ui) {
setFlanger('rate', ui.value);
$('#slider-flanger-rate').slider('value', ui.value);
}
}).spinner('value', 0);
// Mix (Slider)
$('#slider-flanger-mix').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFlanger('mix', ui.value);
$('#spinner-flanger-mix').spinner('value', ui.value);
},
slide : function(event, ui) {
setFlanger('mix', ui.value);
$('#spinner-flanger-mix').spinner('value', ui.value);
}
});
// Mix (Spinner)
$('#spinner-flanger-mix').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setFlanger('mix', ui.value);
$('#slider-flanger-mix').slider('value', ui.value);
}
}).spinner('value', 0);
// Tone (Slider)
$('#slider-flanger-tone').slider({
value : 4000,
min : 20,
max : 8000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFlanger('tone', ui.value);
$('#spinner-flanger-tone').spinner('value', ui.value);
},
slide : function(event, ui) {
setFlanger('tone', ui.value);
$('#spinner-flanger-tone').spinner('value', ui.value);
}
});
// Color (Spinner)
$('#spinner-flanger-tone').spinner({
min : 20,
max : 8000,
step : 1,
spin : function(event, ui) {
setFlanger('tone', ui.value);
$('#slider-cborus-tone').slider('value', ui.value);
}
}).spinner('value', 4000);
// Feedback (Slider)
$('#slider-flanger-feedback').slider({
value : 0,
min : 0,
max : 0.95,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setFlanger('feedback', ui.value);
$('#spinner-flanger-feedback').spinner('value', ui.value);
},
slide : function(event, ui) {
setFlanger('feedback', ui.value);
$('#spinner-flanger-feedback').spinner('value', ui.value);
}
});
// Feedback (Spinner)
$('#spinner-flanger-feedback').spinner({
min : 0,
max : 0.95,
step : 0.05,
spin : function(event, ui) {
setFlanger('feedback', ui.value);
$('#slider-flanger-feedback').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Chorus
(function() {
var setState = function(state) {
X('mixer').module('chorus').state(state);
X('oscillator').module('chorus').state(state);
cloned('oscillator').module('chorus').state(state);
X('oneshot').module('chorus').state(state);
X('audio').module('chorus').state(state);
X('stream').module('chorus').state(state);
};
var setChorus = function(key, value) {
X('mixer').module('chorus').param(key, value);
X('oscillator').module('chorus').param(key, value);
cloned('oscillator').module('chorus').param(key, value);
X('oneshot').module('chorus').param(key, value);
X('audio').module('chorus').param(key, value);
X('stream').module('chorus').param(key, value);
};
// Initial state is OFF
setState(false);
// Initail tone
setChorus('tone', 4000);
// Toggle active
$('#checkbox-is-chorus').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-chorus"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-chorus"] span').removeClass('check-on');
}
});
// Delay Time (Slider)
$('#slider-chorus-time').slider({
value : 0,
min : 0,
max : 50,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setChorus('time', (ui.value / Math.pow(10, 3)));
$('#spinner-chorus-time').spinner('value', ui.value);
},
slide : function(event, ui) {
setChorus('time', (ui.value / Math.pow(10, 3)));
$('#spinner-chorus-time').spinner('value', ui.value);
}
});
// Delay Time (Spinner)
$('#spinner-chorus-time').spinner({
min : 0,
max : 50,
step : 1,
spin : function(event, ui) {
setChorus('time', (ui.value / Math.pow(10, 3)));
$('#slider-chorus-time').slider('value', ui.value);
}
}).spinner('value', 0);
// Depth (Slider)
$('#slider-chorus-depth').slider({
value : 0,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setChorus('depth', ui.value);
$('#spinner-chorus-depth').spinner('value', ui.value);
},
slide : function(event, ui) {
setChorus('depth', ui.value);
$('#spinner-chorus-depth').spinner('value', ui.value);
}
});
// Depth (Spinner)
$('#spinner-chorus-depth').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setChorus('depth', ui.value);
$('#slider-chorus-depth').slider('value', ui.value);
}
}).spinner('value', 0);
// Rate (Slider)
$('#slider-chorus-rate').slider({
value : 0,
min : 0,
max : 1,
step : 0.01,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setChorus('rate', ui.value);
$('#spinner-chorus-rate').spinner('value', ui.value);
},
slide : function(event, ui) {
setChorus('rate', ui.value);
$('#spinner-chorus-rate').spinner('value', ui.value);
}
});
// Rate (Spinner)
$('#spinner-chorus-rate').spinner({
min : 0,
max : 1,
step : 0.01,
spin : function(event, ui) {
setChorus('rate', ui.value);
$('#slider-chorus-rate').slider('value', ui.value);
}
}).spinner('value', 0);
// Mix (Slider)
$('#slider-chorus-mix').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setChorus('mix', ui.value);
$('#spinner-chorus-mix').spinner('value', ui.value);
},
slide : function(event, ui) {
setChorus('mix', ui.value);
$('#spinner-chorus-mix').spinner('value', ui.value);
}
});
// Mix (Spinner)
$('#spinner-chorus-mix').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setChorus('mix', ui.value);
$('#slider-chorus-mix').slider('value', ui.value);
}
}).spinner('value', 0);
// Tone (Slider)
$('#slider-chorus-tone').slider({
value : 4000,
min : 20,
max : 8000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setChorus('tone', ui.value);
$('#spinner-chorus-tone').spinner('value', ui.value);
},
slide : function(event, ui) {
setChorus('tone', ui.value);
$('#spinner-chorus-tone').spinner('value', ui.value);
}
});
// Color (Spinner)
$('#spinner-chorus-tone').spinner({
min : 20,
max : 8000,
step : 1,
spin : function(event, ui) {
setChorus('tone', ui.value);
$('#slider-cborus-tone').slider('value', ui.value);
}
}).spinner('value', 4000);
// Feedback (Slider)
$('#slider-chorus-feedback').slider({
value : 0,
min : 0,
max : 0.5,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setChorus('feedback', ui.value);
$('#spinner-chorus-feedback').spinner('value', ui.value);
},
slide : function(event, ui) {
setChorus('feedback', ui.value);
$('#spinner-chorus-feedback').spinner('value', ui.value);
}
});
// Feedback (Spinner)
$('#spinner-chorus-feedback').spinner({
min : 0,
max : 0.5,
step : 0.05,
spin : function(event, ui) {
setChorus('feedback', ui.value);
$('#slider-chorus-feedback').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Delay
(function() {
var setState = function(state) {
X('mixer').module('delay').state(state);
X('oscillator').module('delay').state(state);
cloned('oscillator').module('delay').state(state);
X('oneshot').module('delay').state(state);
X('audio').module('delay').state(state);
X('stream').module('delay').state(state);
};
var setDelay = function(key, value) {
X('mixer').module('delay').param(key, value);
X('oscillator').module('delay').param(key, value);
cloned('oscillator').module('delay').param(key, value);
X('oneshot').module('delay').param(key, value);
X('audio').module('delay').param(key, value);
X('stream').module('delay').param(key, value);
};
// Initial state is OFF
setState(false);
// Initail tone
setDelay('tone', 4000);
// Toggle active
$('#checkbox-is-delay').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-delay"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-delay"] span').removeClass('check-on');
}
});
// Delay time (Slider)
$('#slider-delay-time').slider({
value : 0,
min : 0,
max : 1000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDelay('delayTime', (ui.value / Math.pow(10, 3)));
$('#spinner-delay-time').spinner('value', ui.value);
},
slide : function(event, ui) {
setDelay('delayTime', (ui.value / Math.pow(10, 3)));
$('#spinner-delay-time').spinner('value', ui.value);
}
});
// Delay time (Spinner)
$('#spinner-delay-time').spinner({
min : 0,
max : 1000,
step : 1,
spin : function(event, ui) {
setDelay('delayTime', (ui.value / Math.pow(10, 3)));
$('#slider-delay-time').slider('value', ui.value);
}
}).spinner('value', 0);
// Dry (Slider)
$('#slider-delay-dry').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDelay('dry', ui.value);
$('#spinner-delay-dry').spinner('value', ui.value);
},
slide : function(event, ui) {
setDelay('dry', ui.value);
$('#spinner-delay-dry').spinner('value', ui.value);
}
});
// Dry (Spinner)
$('#spinner-delay-dry').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setDelay('dry', ui.value);
$('#slider-delay-dry').slider('value', ui.value);
}
}).spinner('value', 1);
// Wet (Slider)
$('#slider-delay-wet').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDelay('wet', ui.value);
$('#spinner-delay-wet').spinner('value', ui.value);
},
slide : function(event, ui) {
setDelay('wet', ui.value);
$('#spinner-delay-wet').spinner('value', ui.value);
}
});
// Wet (Spinner)
$('#spinner-delay-wet').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setDelay('wet', ui.value);
$('#slider-delay-wet').slider('value', ui.value);
}
}).spinner('value', 0);
// Tone (Slider)
$('#slider-delay-tone').slider({
value : 4000,
min : 20,
max : 8000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDelay('tone', ui.value);
$('#spinner-delay-tone').spinner('value', ui.value);
},
slide : function(event, ui) {
setDelay('tone', ui.value);
$('#spinner-delay-tone').spinner('value', ui.value);
}
});
// Color (Spinner)
$('#spinner-delay-tone').spinner({
min : 20,
max : 8000,
step : 1,
spin : function(event, ui) {
setDelay('tone', ui.value);
$('#slider-delay-tone').slider('value', ui.value);
}
}).spinner('value', 4000);
// Feedback (Slider)
$('#slider-chorus-feedback').slider({
value : 0,
min : 0,
max : 0.5,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setChorus('feedback', ui.value);
$('#spinner-chorus-feedback').spinner('value', ui.value);
},
slide : function(event, ui) {
setChorus('feedback', ui.value);
$('#spinner-chorus-feedback').spinner('value', ui.value);
}
});
// Feedback (Slider)
$('#slider-delay-feedback').slider({
value : 0,
min : 0,
max : 0.8,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setDelay('feedback', ui.value);
$('#spinner-delay-feedback').spinner('value', ui.value);
},
slide : function(event, ui) {
setDelay('feedback', ui.value);
$('#spinner-delay-feedback').spinner('value', ui.value);
}
});
// Feedback (Spinner)
$('#spinner-delay-feedback').spinner({
min : 0,
max : 0.8,
step : 0.05,
spin : function(event, ui) {
setDelay('feedback', ui.value);
$('#slider-delay-feedback').slider('value', ui.value);
}
}).spinner('value', 0);
})();
// Reverb
(function() {
var setState = function(state) {
X('mixer').module('reverb').state(state);
X('oscillator').module('reverb').state(state);
cloned('oscillator').module('reverb').state(state);
X('oneshot').module('reverb').state(state);
X('audio').module('reverb').state(state);
X('stream').module('reverb').state(state);
};
var setReverb = function(key, value) {
X('mixer').module('reverb').param(key, value);
X('oscillator').module('reverb').param(key, value);
cloned('oscillator').module('reverb').param(key, value);
X('oneshot').module('reverb').param(key, value);
X('audio').module('reverb').param(key, value);
X('stream').module('reverb').param(key, value);
};
// Initial state is OFF
setState(false);
// Initail tone
setReverb('tone', 4000);
// Toggle active
$('#checkbox-is-reverb').on(EventWrapper.CLICK, function() {
if (this.checked) {
setState(true);
$('[for="checkbox-is-reverb"] span').addClass('check-on');
} else {
setState(false);
$('[for="checkbox-is-reverb"] span').removeClass('check-on');
}
});
// RIR (Reverb Type)
$('#select-reverb-type').change(function() {
var value = parseInt($(this).val()) - 1;
if (value === -1) {
value = null;
}
setReverb('type', value);
}).select2();
// Dry (Slider)
$('#slider-reverb-dry').slider({
value : 1,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setReverb('dry', ui.value);
$('#spinner-reverb-dry').spinner('value', ui.value);
},
slide : function(event, ui) {
setReverb('dry', ui.value);
$('#spinner-reverb-dry').spinner('value', ui.value);
}
});
// Dry (Spinner)
$('#spinner-reverb-dry').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setReverb('dry', ui.value);
$('#slider-reverb-dry').slider('value', ui.value);
}
}).spinner('value', 1);
// Wet (Slider)
$('#slider-reverb-wet').slider({
value : 0,
min : 0,
max : 1,
step : 0.05,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setReverb('wet', ui.value);
$('#spinner-reverb-wet').spinner('value', ui.value);
},
slide : function(event, ui) {
setReverb('wet', ui.value);
$('#spinner-reverb-wet').spinner('value', ui.value);
}
});
// Wet (Spinner)
$('#spinner-reverb-wet').spinner({
min : 0,
max : 1,
step : 0.05,
spin : function(event, ui) {
setReverb('wet', ui.value);
$('#slider-reverb-wet').slider('value', ui.value);
}
}).spinner('value', 0);
// Tone (Slider)
$('#slider-reverb-tone').slider({
value : 4000,
min : 20,
max : 8000,
step : 1,
range : 'min',
animate : 'slow',
change : function(event, ui) {
setReverb('tone', ui.value);
$('#spinner-reverb-tone').spinner('value', ui.value);
},
slide : function(event, ui) {
setReverb('tone', ui.value);
$('#spinner-reverb-tone').spinner('value', ui.value);
}
});
// Color (Spinner)
$('#spinner-reverb-tone').spinner({
min : 20,
max : 8000,
step : 1,
spin : function(event, ui) {
setReverb('tone', ui.value);
$('#slider-reverb-tone').slider('value', ui.value);
}
}).spinner('value', 4000);
})();
// for Account and Patch system
(function() {
var IFRAME_NAME = 'iframe-target';
var ALLOW_ORIGIN = 'http://curtaincall.c.node-ninja.com:8080'; //unnecessary last '/'
var POST_ORIGIN = '';
var CHECK_ORIGIN = false;
if (location.host.indexOf('localhost') !== -1) {
POST_ORIGIN = 'http://localhost:8080/~rilakkuma3xjapan/portfolio-x-sound/';
CHECK_ORIGIN = false;
} else if (location.host.indexOf('curtaincall.weblike.jp') !== -1) {
POST_ORIGIN = 'http://curtaincall.c.node-ninja.com:8080/';
CHECK_ORIGIN = true;
}
var MESSAGES = {};
MESSAGES.TIMEOUT = 'Session Timeout. Please input account again.';
MESSAGES.FORBIDDEN = '403 Forbidden';
var getPatches = function() {
var patches = {
masterVolume : X('mixer').param('masterVolume'),
glide : {
type : X('oscillator').module('glide').param('type'),
time : X('oscillator').module('glide').param('time')
},
eg : {
attack : X('oscillator').module('eg').param('attack'),
decay : X('oscillator').module('eg').param('decay'),
sustain : X('oscillator').module('eg').param('sustain'),
release : X('oscillator').module('eg').param('release')
},
oscillator1 : {
state : X('oscillator', 0).state(),
type : X('oscillator', 0).param('type'),
volume : X('oscillator', 0).param('volume'),
octave : X('oscillator', 0).param('octave'),
fine : X('oscillator', 0).param('fine')
},
oscillator2 : {
state : cloned('oscillator', 0).state(),
type : cloned('oscillator', 0).param('type'),
volume : cloned('oscillator', 0).param('volume'),
octave : cloned('oscillator', 0).param('octave'),
fine : cloned('oscillator', 0).param('fine')
},
compressor : {
state : X('mixer').module('compressor').state(),
threshold : X('mixer').module('compressor').param('threshold'),
knee : X('mixer').module('compressor').param('knee'),
ratio : X('mixer').module('compressor').param('ratio'),
attack : X('mixer').module('compressor').param('attack'),
release : X('mixer').module('compressor').param('release')
},
distortion : {
state : X('mixer').module('distortion').state(),
curve : $('#select-distortion-type').val(),
samples : X('mixer').module('distortion').param('samples'),
drive : X('mixer').module('distortion').param('drive'),
color : X('mixer').module('distortion').param('color'),
tone : X('mixer').module('distortion').param('tone')
},
equalizer : {
state : X('mixer').module('equalizer').state(),
bass : X('mixer').module('equalizer').param('bass'),
middle : X('mixer').module('equalizer').param('middle'),
treble : X('mixer').module('equalizer').param('treble'),
presence : X('mixer').module('equalizer').param('presence')
},
wah : {
state : X('mixer').module('wah').state(),
cutoff : X('mixer').module('wah').param('cutoff'),
depth : X('mixer').module('wah').param('depth'),
rate : X('mixer').module('wah').param('rate'),
resonance : X('mixer').module('wah').param('resonance')
},
filter : {
state : X('mixer').module('filter').state(),
type : X('mixer').module('filter').param('type'),
cutoff : X('mixer').module('filter').param('cutoff'),
Q : X('mixer').module('filter').param('Q'),
gain : X('mixer').module('filter').param('gain'),
attack : X('mixer').module('filter').param('attack'),
decay : X('mixer').module('filter').param('decay'),
sustain : X('mixer').module('filter').param('sustain'),
release : X('mixer').module('filter').param('release')
},
autopanner : {
state : X('mixer').module('autopanner').state(),
depth : X('mixer').module('autopanner').param('depth'),
rate : X('mixer').module('autopanner').param('rate')
},
tremolo : {
state : X('mixer').module('tremolo').state(),
wave : X('mixer').module('tremolo').param('wave'),
depth : X('mixer').module('tremolo').param('depth'),
rate : X('mixer').module('tremolo').param('rate')
},
ringmodulator : {
state : X('mixer').module('ringmodulator').state(),
depth : X('mixer').module('ringmodulator').param('depth'),
rate : X('mixer').module('ringmodulator').param('rate')
},
phaser : {
state : X('mixer').module('phaser').state(),
stage : X('mixer').module('phaser').param('stage'),
cutoff : X('mixer').module('phaser').param('cutoff'),
resonance : X('mixer').module('phaser').param('resonance'),
depth : X('mixer').module('phaser').param('depth'),
rate : X('mixer').module('phaser').param('rate'),
mix : X('mixer').module('phaser').param('mix'),
feedback : X('mixer').module('phaser').param('feedback')
},
flanger : {
state : X('mixer').module('flanger').state(),
time : X('mixer').module('flanger').param('time'),
depth : X('mixer').module('flanger').param('depth'),
rate : X('mixer').module('flanger').param('rate'),
mix : X('mixer').module('flanger').param('mix'),
tone : X('mixer').module('flanger').param('tone'),
feedback : X('mixer').module('flanger').param('feedback')
},
chorus : {
state : X('mixer').module('chorus').state(),
time : X('mixer').module('chorus').param('time'),
depth : X('mixer').module('chorus').param('rate'),
rate : X('mixer').module('chorus').param('rate'),
mix : X('mixer').module('chorus').param('mix'),
tone : X('mixer').module('chorus').param('tone'),
feedback : X('mixer').module('chorus').param('feedback')
},
delay : {
state : X('mixer').module('delay').state(),
time : X('mixer').module('delay').param('delayTime'),
dry : X('mixer').module('delay').param('dry'),
wet : X('mixer').module('delay').param('wet'),
tone : X('mixer').module('delay').param('tone'),
feedback : X('mixer').module('delay').param('feedback')
},
reverb : {
state : X('mixer').module('reverb').state(),
type : $('#select-reverb-type').val(),
dry : X('mixer').module('reverb').param('dry'),
wet : X('mixer').module('reverb').param('wet'),
tone : X('mixer').module('reverb').param('tone')
}
};
return {patch : patches};
};
var setPatches = function(patches) {
if (!$.isPlainObject(patches)) {
return;
}
var setState = function(module, state) {
$('#checkbox-is-' + module).attr('checked', state);
if (state) {
$('[for="checkbox-is-' + module + '"] span').addClass('check-on');
} else {
$('[for="checkbox-is-' + module + '"] span').removeClass('check-on');
}
X('oscillator').module(module).state(state);
cloned('oscillator').module(module).state(state);
X('mixer').module(module).state(state);
X('oneshot').module(module).state(state);
X('audio').module(module).state(state);
};
if ('masterVolume' in patches) {
$('#slider-master-volume').slider('value', patches.masterVolume);
}
if ('glide' in patches) {
var glide = patches.glide;
if ('time' in glide) {
$('#slider-glide').slider('value', (glide.time / 2));
}
}
if ('eg' in patches) {
var eg = patches.eg;
if ('attack' in eg) {$('#slider-attack').slider('value', eg.attack);}
if ('decay' in eg) {$('#slider-decay').slider('value', eg.decay);}
if ('sustain' in eg) {$('#slider-sustain').slider('value', eg.sustain);}
if ('release' in eg) {$('#slider-release').slider('value', eg.release);}
}
if ('oscillator1' in patches) {
var oscillator1 = patches.oscillator1;
if ('state' in oscillator1) {
if (oscillator1.state) {
$('#checkbox-oscillator-1').attr('checked', true);
$('[for="checkbox-oscillator-1"] span').addClass('check-on');
X('oscillator', 0).state(true);
} else {
$('#checkbox-oscillator-1').attr('checked', false);
$('[for="checkbox-oscillator-1"] span').removeClass('check-on');
X('oscillator', 0).state(false);
}
}
if ('type' in oscillator1) {
$('[name="form-wave-type-1"] label.active').removeClass('active');
$('[name="form-wave-type-1"] :radio').each(function(index, element) {
if ($(element).val() === oscillator1.type) {
$(element).attr('checked', true);
$('label[for="' + $(element).attr('id') + '"]').addClass('active');
}
});
X('oscillator', 0).param('type', oscillator1.type);
}
if ('volume' in oscillator1) {$('#slider-volume-1').slider('value', oscillator1.volume);}
if ('octave' in oscillator1) {$('#slider-octave-1').slider('value', oscillator1.octave);}
if ('fine' in oscillator1) {$('#slider-fine-1').slider('value', oscillator1.fine);}
}
if ('oscillator2' in patches) {
var oscillator2 = patches.oscillator2;
if ('state' in oscillator2) {
if (oscillator2.state) {
$('#checkbox-oscillator-2').attr('checked', true);
$('[for="checkbox-oscillator-2"] span').addClass('check-on');
cloned('oscillator', 0).state(true);
} else {
$('#checkbox-oscillator-2').attr('checked', false);
$('[for="checkbox-oscillator-2"] span').removeClass('check-on');
cloned('oscillator', 0).state(false);
}
}
if ('type' in oscillator2) {
$('[name="form-wave-type-2"] label.active').removeClass('active');
$('[name="form-wave-type-2"] :radio').each(function(index, element) {
if ($(element).val() === oscillator2.type) {
$(element).attr('checked', true);
$('label[for="' + $(element).attr('id') + '"]').addClass('active');
}
});
cloned('oscillator', 0).param('type', oscillator2.type);
}
if ('volume' in oscillator2) {$('#slider-volume-2').slider('value', oscillator2.volume);}
if ('octave' in oscillator2) {$('#slider-octave-2').slider('value', oscillator2.octave);}
if ('fine' in oscillator2) {$('#slider-fine-2').slider('value', oscillator2.fine);}
}
if ('compressor' in patches) {
var compressor = patches.compressor;
if ('state' in compressor) {setState('compressor', compressor.state);}
if ('threshold' in compressor) {$('#slider-threshold').slider('value', compressor.threshold);}
if ('knee' in compressor) {$('#slider-knee').slider('value', compressor.knee);}
if ('ratio' in compressor) {$('#slider-ratio').slider('value', compressor.ratio);}
if ('attack' in compressor) {$('#slider-compressor-attack').slider('value', compressor.attack);}
if ('release' in compressor) {$('#slider-compressor-release').slider('value', compressor.release);}
}
if ('distortion' in patches) {
var distortion = patches.distortion;
if ('state' in distortion) {setState('distortion', distortion.state);}
if ('curve' in distortion) {$('#select-distortion-type').val(distortion.curve).trigger('change');}
if ('samples' in distortion) {$('#select-distortion-sample').val('value', distortion.samples);}
if ('drive' in distortion) {$('#slider-distortion-drive').slider('value', distortion.drive);}
if ('color' in distortion) {$('#slider-distortion-color').slider('value', distortion.color);}
if ('tone' in distortion) {$('#slider-distortion-tone').slider('value', distortion.tone);}
}
if ('wah' in patches) {
var wah = patches.wah;
if ('state' in wah) {setState('wah', wah.state);}
if ('cutoff' in wah) {$('#slider-wah-cutoff').slider('value', wah.cutoff);}
if ('depth' in wah) {$('#slider-wah-depth').slider('value', wah.depth);}
if ('rate' in wah) {$('#slider-wah-rate').slider('value', wah.rate);}
if ('resonance' in wah) {$('#slider-wah-resonance').slider('value', wah.resonance);}
}
if ('equalizer' in patches) {
var equalizer = patches.equalizer;
if ('state' in equalizer) {setState('equalizer', equalizer.state);}
if ('bass' in equalizer) {$('#slider-equalizer-bass').slider('value', equalizer.bass);}
if ('middle' in equalizer) {$('#slider-equalizer-middle').slider('value', equalizer.middle);}
if ('treble' in equalizer) {$('#slider-equalizer-treble').slider('value', equalizer.treble);}
if ('presence' in equalizer) {$('#slider-equalizer-presence').slider('value', equalizer.presence);}
}
if ('filter' in patches) {
var filter = patches.filter;
if ('state' in filter) {setState('filter', filter.state);}
if ('type' in filter) {$('#select-filter-type').val(filter.type).trigger('change');}
if ('cutoff' in filter) {$('#slider-filter-cutoff').slider('value', filter.cutoff);}
if ('Q' in filter) {$('#slider-filter-Q').slider('value', filter.Q);}
if ('gain' in filter) {$('#slider-filter-gain').slider('value', filter.gain);}
if ('attack' in filter) {$('#slider-filter-attack').slider('value', filter.attack);}
if ('decay' in filter) {$('#slider-filter-decay').slider('value', filter.decay);}
if ('sustain' in filter) {$('#slider-filter-sustain').slider('value', filter.sustain);}
if ('release' in filter) {$('#slider-filter-release').slider('value', filter.release);}
}
if ('autopanner' in patches) {
var autopanner = patches.autopanner;
if ('state' in autopanner) {setState('autopanner', autopanner.state);}
if ('depth' in autopanner) {$('#slider-autopanner-depth').slider('value', autopanner.depth);}
if ('rate' in autopanner) {$('#slider-autopanner-rate').slider('value', autopanner.rate);}
}
if ('tremolo' in patches) {
var tremolo = patches.tremolo;
if ('state' in tremolo) {setState('tremolo', tremolo.state);}
if ('depth' in tremolo) {$('#slider-tremolo-depth').slider('value', tremolo.depth);}
if ('rate' in tremolo) {$('#slider-tremolo-rate').slider('value', tremolo.rate);}
if ('wave' in tremolo) {$('#select-tremolo-wave').val(tremolo.wave);}
}
if ('ringmodulator' in patches) {
var ringmodulator = patches.ringmodulator;
if ('state' in ringmodulator) {setState('ringmodulator', ringmodulator.state);}
if ('depth' in ringmodulator) {$('#slider-ringmodulator-depth').slider('value', ringmodulator.depth);}
if ('rate' in ringmodulator) {$('#slider-ringmodulator-rate').slider('value', ringmodulator.rate);}
}
if ('phaser' in patches) {
var phaser = patches.phaser;
if ('state' in phaser) {setState('phaser', phaser.state);}
if ('stage' in phaser) {$('#select-phaser-stage').val(phaser.stage);}
if ('cutoff' in phaser) {$('#slider-phaser-cutoff').slider('value', phaser.cutoff);}
if ('resonance' in phaser) {$('#slider-phaser-resonance').slider('value', phaser.resonance);}
if ('depth' in phaser) {$('#slider-phaser-depth').slider('value', phaser.depth);}
if ('rate' in phaser) {$('#slider-phaser-rate').slider('value', phaser.rate);}
if ('mix' in phaser) {$('#slider-phaser-mix').slider('value', phaser.mix);}
if ('feedback' in phaser) {$('#slider-phaser-feedback').slider('value', phaser.feedback);}
}
if ('flanger' in patches) {
var flanger = patches.flanger;
if ('state' in flanger) {setState('flanger', flanger.state);}
if ('time' in flanger) {$('#slider-flanger-time').slider('value', (Math.pow(10, 3) * flanger.time));}
if ('depth' in flanger) {$('#slider-flanger-depth').slider('value', flanger.depth);}
if ('rate' in flanger) {$('#slider-flanger-rate').slider('value', flanger.rate);}
if ('mix' in flanger) {$('#slider-flanger-mix').slider('value', flanger.mix);}
if ('tone' in flanger) {$('#slider-flanger-tone').slider('value', flanger.tone);}
if ('feedback' in flanger) {$('#slider-flanger-feedback').slider('value', flanger.feedback);}
}
if ('chorus' in patches) {
var chorus = patches.chorus;
if ('state' in chorus) {setState('chorus', chorus.state);}
if ('time' in chorus) {$('#slider-chorus-time').slider('value', (Math.pow(10, 3) * chorus.time));}
if ('depth' in chorus) {$('#slider-chorus-depth').slider('value', (Math.pow(10, 3) * chorus.depth ));}
if ('rate' in chorus) {$('#slider-chorus-rate').slider('value', chorus.rate);}
if ('mix' in chorus) {$('#slider-chorus-mix').slider('value', chorus.mix);}
if ('tone' in chorus) {$('#slider-chorus-tone').slider('value', chorus.tone);}
if ('feedback' in chorus) {$('#slider-chorus-feedback').slider('value', chorus.feedback);}
}
if ('delay' in patches) {
var delay = patches.delay;
if ('state' in delay) {setState('delay', delay.state);}
if ('time' in delay) {$('#slider-delay-time').slider('value', (Math.pow(10, 3) * delay.time));}
if ('dry' in delay) {$('#slider-delay-dry').slider('value', delay.dry);}
if ('wet' in delay) {$('#slider-delay-wet').slider('value', delay.wet);}
if ('tone' in delay) {$('#slider-delay-tone').slider('value', delay.tone);}
if ('feedback' in delay) {$('#slider-delay-feedback').slider('value', delay.feedback);}
}
if ('reverb' in patches) {
var reverb = patches.reverb;
if ('state' in reverb) {setState('reverb', reverb.state);}
if ('type' in reverb) {$('#select-reverb-type').val(reverb.type);}
if ('dry' in reverb) {$('#slider-reverb-dry').slider('value', reverb.dry);}
if ('wet' in reverb) {$('#slider-reverb-wet').slider('value', reverb.wet);}
if ('tone' in reverb) {$('#slider-reverb-tone').slider('value', reverb.tone);}
}
};
$('[for="checkbox-is-patch"] span a').colorbox({
inline : true,
width : '600px',
height : '480px',
transition : 'fade',
speed : 600,
opacity : 0.6,
fadeOut : 600,
returnFocus : false,
onOpen : function() {
$('#patch-container').show();
},
onCleanup : function() {
$('#patch-container').hide();
$('[for="checkbox-is-patch"] span').removeClass('check-on');
}
});
// Accoun Tab-Panel
$('#patch-container > #patch-form-area > div:not(:first-child)').hide();
$('#patch-container').on(EventWrapper.CLICK, 'ul > li > a', function() {
$('#patch-container > #patch-form-area > div').hide();
$('#patch-container > #patch-form-area > ' + $(this).attr('href')).show();
$('#patch-container > ul > li > a').removeClass('selected');
$(this).addClass('selected');
return false;
});
// for Cross Origin by window.postMessage
var createDummyIframe = function() {
$('#patch-container').append('<iframe name="' + IFRAME_NAME + '" style="border:none; width:0px; height:0px;"></iframe>');
$('#patch-container #patch-form-area div form').attr('target', IFRAME_NAME);
$('body > form:last-child').attr('target', IFRAME_NAME);
};
// for Update or Delete patch
var createForm = function(action, user, password, patchname, patches) {
$('body').append('<form></form>');
var form = $('body > form:last-child');
form.attr('action', (POST_ORIGIN + action))
.attr('method', 'post')
.hide();
form.append('<input type="hidden" name="text-patch-name" value="' + patchname + '" />')
.append('<input type="hidden" name="_csrf" value="' + $('#patch-container form [name="_csrf"]').val() + '" />');
if (patches !== undefined) {
form.append('<input type="hidden" name="hidden-patch" />');
form.children('[name="hidden-patch"]').val(patches);
}
createDummyIframe();
return form;
};
// &quot; -> '"', &lt; -> '<', '&gt;' -> '>', &amp; -> '&'
var decodeJade = function(string) {
return string.replace(/&quot;/g, '"')
.replace(/&lt;/g, '<')
.replace(/&gt;/g, '>')
.replace(/&amp;/g, '&');
};
var createPatchList = function(patches, isUpdate) {
var PATCH_ID_PREFIX = 'patch-id-';
var listParent = $('#patch-list');
if (isUpdate) {
listParent.children('dd').remove();
}
for (var i = 0, len = patches.length; i < len; i++) {
var patchname = patches[i].property.name;
listParent.append($('<dd />').attr('id', (PATCH_ID_PREFIX + patchname))
.addClass('button-hover')
.text(patchname));
listParent.children('dd:last-child').on(EventWrapper.CLICK, function() {
var user = $('[name="text-user-name"]').val();
var password = $('[name="password-user-password"]').val();
var targetPatch = $(this).attr('id').replace(PATCH_ID_PREFIX, '');
var findPatch = function(isIndex) {
for (var j = 0, num = patches.length; j < num; j++) {
if (patches[j].property.name === targetPatch) {
if (('patch' in patches[j]) && ($.isPlainObject(patches[j].patch))) {
return isIndex ? j : patches[j].patch;
}
}
}
};
var self = $(this);
$('body').append('<div id="dialog-operate-patch"></div>');
// Define dialog
$('#dialog-operate-patch').dialog({
title : targetPatch,
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : false,
width : 600,
height : 400,
draggable : true,
resizable : false,
zIndex : 999999,
buttons : {
'LOAD' : function() {
setPatches(findPatch());
$(this).dialog('close');
$(this).remove();
},
'UPDATE' : function() {
$(this).dialog('close');
$(this).remove();
var newPatches = getPatches();
if (!$.isPlainObject(newPatches)) {
return;
}
var json = JSON.stringify(newPatches);
var form = createForm('patch/update', user, password, targetPatch, json);
form.submit(function() {
window.onmessage = function(event) {
if (CHECK_ORIGIN && (event.origin !== ALLOW_ORIGIN)) {
return;
}
var results = JSON.parse(decodeJade(event.data));
if (results.result) {
patches[findPatch(true)].patch = results.patch;
createPatchList(patches, true);
showResultDialog('dialog-update-patch', 'Confirmation', results.message);
} else if (('message' in results) && (results.message === 'timeout')) {
redirectIndex(MESSAGES.TIMEOUT, results.html);
} else if (('message' in results) && (results.message === '403')) {
redirectIndex(MESSAGES.FORBIDDEN, results.html);
}
};
}).submit();
form.remove();
},
'DELETE' : function() {
$(this).dialog('close');
$(this).remove();
var form = createForm('patch/remove', user, password, targetPatch);
form.submit(function() {
window.onmessage = function(event) {
if (CHECK_ORIGIN && (event.origin !== ALLOW_ORIGIN)) {
return;
}
var results = JSON.parse(decodeJade(event.data));
if (results.result && (results.num === 1)) {
self.remove();
showResultDialog('dialog-delete-patch', 'Confirmation', results.message);
} else if (('message' in results) && (results.message === 'timeout')) {
redirectIndex(MESSAGES.TIMEOUT, results.html);
} else if (('message' in results) && (results.message === '403')) {
redirectIndex(MESSAGES.FORBIDDEN, results.html);
}
};
}).submit();
form.remove();
},
'CLOSE' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-operate-patch').html(createPatchTable(findPatch()));
$('#dialog-operate-patch').dialog('open');
});
}
};
var createPatchTable = function(patches) {
if (!$.isPlainObject(patches)) {
return;
}
var patchTable = '';
var createOscillatorTable = function(oscillator1, oscillator2) {
var createTd = function(item, value1, value2) {
var td = '';
td += '<tr>';
td += '<td>' + item + '</td>';
td += '<td>' + String(value1).toUpperCase() + '</td>';
td += '<td>' + String(value2).toUpperCase() + '</td>';
td += '</tr>';
return td;
};
var table = '';
table += '<table>';
table += '<caption>OSCILLATOR</caption>';
table += '<thead>';
table += '<tr>';
table += '<th scope="col"></th>';
table += '<th scope="col">OSCILLATOR- 1</th>';
table += '<th scope="col">OSCILLATOR - 2</th>';
table += '</tr>';
table += '</thead>';
table += '<tbody>';
if ('masterVolume' in patches) {
table += '<tr>';
table += '<td>MASTER VOLUME</td>';
table += '<td colspan="2" style="text-align:center;">' + patches.masterVolume + '</td>';
table += '<tr>';
}
if (('glide' in patches) && ('time' in patches.glide)) {
table += '<tr>';
table += '<td>GLIDE TIME</td>';
table += '<td colspan="2" style="text-align:center;">' + patches.glide.time + '</td>';
table += '<tr>';
}
table += '<tr>';
table += '<td>STATE</td>';
table += '<td>' + (oscillator1.state ? 'ON' : 'OFF') + '</td>';
table += '<td>' + (oscillator2.state ? 'ON' : 'OFF') + '</td>';
table += '</tr>';
if (('type' in oscillator1) && ('type' in oscillator2)) {table += createTd('TYPE', oscillator1.type, oscillator2.type);}
if (('volume' in oscillator1) && ('volume' in oscillator2)) {table += createTd('VOLUME', oscillator1.volume, oscillator2.volume);}
if (('octave' in oscillator1) && ('octave' in oscillator2)) {table += createTd('OCTAVE', oscillator1.octave, oscillator2.octave);}
if (('fine' in oscillator1) && ('fine' in oscillator2)) {table += createTd('FINE', oscillator1.fine, oscillator2.fine);}
table += '</tbody>';
table += '</table>';
return table;
};
var createEGTable = function(egs) {
var createTd = function(item, value) {
var td = '';
td += '<tr>';
td += '<td>' + item + '</td>';
td += '<td>' + value + '</td>';
td += '</tr>';
return td;
};
var table = '';
table += '<table>';
table += '<caption>ENVELOPE GENERATOR</caption>';
table += '<thead>';
table += '<tr>';
table += '<th colspan="2" scope="col">ENVELOPE GENERATOR</th>';
table += '</tr>';
table += '</thead>';
table += '<tbody>';
if ('attack' in egs) {table += createTd('ATTACK', egs.attack);}
if ('decay' in egs) {table += createTd('DECAY', egs.decay);}
if ('sustain' in egs) {table += createTd('SUSTAIN', egs.sustain);}
if ('release' in egs) {table += createTd('RELEASE', egs.release);}
table += '</tbody>';
table += '</table>';
return table;
};
if (('oscillator1' in patches) && ('oscillator2' in patches)) {patchTable += createOscillatorTable(patches.oscillator1, patches.oscillator2);}
if ('eg' in patches) {patchTable += createEGTable(patches.eg);}
var createTable = function(effector, caption) {
var createTd = function(item, value) {
var td = '';
var v = String(value).toUpperCase();
if (v === 'TRUE') {v = 'ON';}
if (v === 'FALSE') {v = 'OFF';}
td += '<tr>';
td += '<td>' + item + '</td>';
td += '<td>' + v + '</td>';
td += '</tr>';
return td;
};
var c = String(caption).toUpperCase();
var table = '';
table += '<table>';
table += '<caption>' + c + '</caption>';
table += '<thead>';
table += '<tr>';
table += '<th colspan="2" scope="col">' + c + '</th>';
table += '</tr>';
table += '</thead>';
table += '<tbody>';
for (var param in effector) {
var p = param.toUpperCase();
if (p === 'FREQUENCY') {p = 'CUTOFF';}
if (p === 'CURVE') {p = 'TYPE';}
table += createTd(p, effector[param]);
}
table += '</tbody>';
table += '</table>';
return table;
};
if ('compressor' in patches) {patchTable += createTable(patches.compressor, 'compressor');}
if ('distortion' in patches) {patchTable += createTable(patches.distortion, 'distortion');}
if ('wah' in patches) {patchTable += createTable(patches.wah, 'wah');}
if ('equalizer' in patches) {patchTable += createTable(patches.equalizer, 'equalizer');}
if ('filter' in patches) {patchTable += createTable(patches.filter, 'filter');}
if ('autopanner' in patches) {patchTable += createTable(patches.autopanner, 'autopanner');}
if ('tremolo' in patches) {patchTable += createTable(patches.tremolo, 'tremolo');}
if ('ringmodulator' in patches) {patchTable += createTable(patches.ringmodulator, 'ringmodulator');}
if ('phaser' in patches) {patchTable += createTable(patches.phaser, 'phaser');}
if ('flanger' in patches) {patchTable += createTable(patches.flanger, 'flanger');}
if ('chorus' in patches) {patchTable += createTable(patches.chorus, 'chorus');}
if ('delay' in patches) {patchTable += createTable(patches.delay, 'delay');}
if ('reverb' in patches) {patchTable += createTable(patches.reverb, 'reverb');}
return patchTable;
};
// for session timeout
var redirectIndex = function(message, view) {
if (message.indexOf('403') !== -1) {
message += '<br/>';
message += 'If the cookie in your browser is invalid, you enable cookie by referring the following URL.';
message += '<ul class="cookie-help-list clearfix">';
message += '<li><a href="https://support.google.com/accounts/answer/61416?hl=ja" target="_blank">Chrome</a></li>';
message += '<li><a href="http://support.apple.com/kb/PH5042?viewlocale=ja_JP&locale=ja_JP" target="_blank">Safari</a></li>';
message += '<li><a href="http://help.opera.com/Mac/9.10/ja/cookies.html" target="_blank">Opera</a></li>';
message += '<li><a href="https://support.mozilla.org/ja/kb/enable-and-disable-cookies-website-preferences" target="_blank">Firefox</a></li>';
message += '</ul>';
}
$('body').append('<div id="dialog-redirect-index"><p></p></div>');
// Define dialog
$('#dialog-redirect-index').dialog({
title : 'Error',
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : false,
width : 600,
height : 'auto',
draggable : true,
resizable : false,
zIndex : 999999,
buttons : {
'OK' : function() {
$('#patch-container').html(view);
$('#patch-container > #patch-form-area > div:not(:first-child)').hide();
createDummyIframe();
$(this).dialog('close');
$(this).remove();
}
}
});
$('#dialog-redirect-index p').html('<b>' + message + '</b>');
$('#dialog-redirect-index').dialog('open');
};
var showResultDialog = function(dialogId, title, message) {
$('body').append('<div id="' + dialogId + '"><p></p></div>');
// Define dialog
$('#' + dialogId).dialog({
title : title,
autoOpen : false,
show : 'explode',
hide : 'explode',
modal : false,
width : 600,
height : 'auto',
draggable : true,
resizable : false,
zIndex : 999999,
buttons : {
'OK' : function() {
$(this).dialog('close');
$(this).remove();
}
}
});
$('#' + dialogId + ' p').html('<b>' + message + '</b>');
$('#' + dialogId).dialog('open');
};
// Has already authenticated ?
(function() {
$('body').append('<form></form>');
var form = $('body > form:last-child');
form.attr('action', POST_ORIGIN)
.attr('method', 'get')
.attr('target', IFRAME_NAME);
createDummyIframe();
form.submit(function() {
window.onmessage = function(event) {
form.remove();
if (CHECK_ORIGIN && (event.origin !== ALLOW_ORIGIN)) {
return;
}
var results = JSON.parse(decodeJade(event.data));
$('#patch-container').html(results.html);
$('#patch-container > #patch-form-area > div:not(:first-child)').hide(); // for Tab-Panel
createDummyIframe();
if (results.authenticated) {
createPatchList(results.patch);
}
};
}).submit();
})();
$('#patch-container').on('submit', '#patch-form-area #signin form, #patch-form-area #signup form', function() {
window.onmessage = function(event) {
if (CHECK_ORIGIN && (event.origin !== ALLOW_ORIGIN)) {
return;
}
var results = JSON.parse(decodeJade(event.data));
if (results.result) {
$('#patch-container').html(results.html);
$('#patch-container > #patch-form-area > div:not(:first-child)').hide();
createDummyIframe();
$('#patch-save').append('<div>' + createPatchTable(getPatches().patch) + '</div>');
// Display patch lists in the case of SIGN IN
if (('patch' in results) && ($.isArray(results.patch))) {
createPatchList(results.patch);
}
if ('message' in results) {
showResultDialog('dialog-create-account', 'Confirmation', results.message);
}
} else if (('message' in results) && (results.message === 'timeout')) {
redirectIndex(MESSAGES.TIMEOUT, results.html);
} else if (('message' in results) && (results.message === '403')) {
redirectIndex(MESSAGES.FORBIDDEN, results.html);
} else {
if (results.password.length > 0) {
showResultDialog('dialog-error-password', 'Error', results.password);
}
if ((results.user.length > 0) && (results.user !== results.password)) {
showResultDialog('dialog-error-user', 'Error', results.user);
}
}
};
});
$('#patch-container').on('submit', '#patch-form-area #account form#signout', function() {
window.onmessage = function(event) {
if (CHECK_ORIGIN && (event.origin !== ALLOW_ORIGIN)) {
return;
}
var results = JSON.parse(decodeJade(event.data));
if (results.result) {
$('#patch-container').html(results.html);
$('#patch-container > #patch-form-area > div:not(:first-child)').hide();
createDummyIframe();
} else if (('message' in results) && (results.message === 'timeout')) {
redirectIndex(MESSAGES.TIMEOUT, results.html);
} else if (('message' in results) && (results.message === '403')) {
redirectIndex(MESSAGES.FORBIDDEN, results.html);
}
};
});
$('#patch-container').on(EventWrapper.CLICK, '#patch-form-area #account form#delete-account ul li button[type="button"]', function() {
var CONFIRM_MESSAGE = 'Delete your account. OK ?<br /> (If you delete account, the all of patches that you saved are also deleted.)';
$('body').append('<div id="dialog-confirm-delete-account"><p></p></div>');
// Define dialog
$('#dialog-confirm-delete-account').dialog({
title : 'Confirmation',
autoOpen : false,
show : 'bounce',
hide : 'explode',
modal : false,
width : 600,
height : 'auto',
draggable : true,
resizable : false,
zIndex : 999999,
buttons : {
'CANCEL' : function() {
$(this).dialog('close');
$(this).remove();
},
'OK' : function() {
$(this).dialog('close');
$(this).remove();
$('form#delete-account').submit();
window.onmessage = function(event) {
if (CHECK_ORIGIN && (event.origin !== ALLOW_ORIGIN)) {
return;
}
var results = JSON.parse(decodeJade(event.data));
if (results.result) {
$('#patch-container').html(results.html);
$('#patch-container > #patch-form-area > div:not(:first-child)').hide();
createDummyIframe();
showResultDialog('dialog-delete-account', 'Confirmation', results.message);
} else if (('message' in results) && (results.message === 'timeout')) {
redirectIndex(MESSAGES.TIMEOUT, results.html);
} else if (('message' in results) && (results.message === '403')) {
redirectIndex(MESSAGES.FORBIDDEN, results.html);
} else if (('message' in results)) {
showResultDialog('dialog-delete-account', 'Confirmation', results.message);
}
};
}
}
});
$('#dialog-confirm-delete-account p').html('<b class="dangerous">' + CONFIRM_MESSAGE + '</b>');
$('#dialog-confirm-delete-account').dialog('open');
});
$('#patch-container').on('submit', '#patch-form-area #patch-save form', function(e) {
var patches = getPatches();
if (!$.isPlainObject(patches)) {
return;
}
var json = JSON.stringify(patches);
$(this).find('[name="hidden-patch"]').val(json);
window.onmessage = function(event) {
if (CHECK_ORIGIN && (event.origin !== ALLOW_ORIGIN)) {
return;
}
var results = JSON.parse(decodeJade(event.data));
if (('message' in results) && (results.message === 'timeout')) {
redirectIndex(MESSAGES.TIMEOUT, results.html);
} else if (('message' in results) && (results.message === '403')) {
redirectIndex(MESSAGES.FORBIDDEN, results.html);
} else {
// Update patch list
if (results.result && $.isPlainObject(results.patch)) {
createPatchList([results.patch]);
}
showResultDialog('dialog-result-save-patch', (results.result ? 'Confirmation' : 'Error'), results.message);
}
};
});
// Modal window (by colorbox.js)
$('#patch-container').hide();
$('#checkbox-is-patch').on(EventWrapper.CLICK, function() {
if (this.checked) {
$('[for="checkbox-is-patch"] span').addClass('check-on');
$('[for="checkbox-is-patch"] span a').trigger(EventWrapper.CLICK);
$('#patch-save').append('<div>' + createPatchTable(getPatches().patch) + '</div>');
} else {
$.colorbox.close();
$('[for="checkbox-is-patch"] span').removeClass('check-on');
$('#patch-save > div:last-child').remove();
}
});
})();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment