Last active
August 29, 2015 14:13
-
-
Save Korilakkuma/a9eeff1b6d3ce36360e5 to your computer and use it in GitHub Desktop.
X Sound legacy controller
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(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; | |
}; | |
// " -> '"', < -> '<', '>' -> '>', & -> '&' | |
var decodeJade = function(string) { | |
return string.replace(/"/g, '"') | |
.replace(/</g, '<') | |
.replace(/>/g, '>') | |
.replace(/&/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