var mixer = {}; var studio; $(document).on('click', '#studio_new', function() { $('#studio').attr('uuid','').attr('name',''); studioInit(); $('#studio_song_select').val('none'); }); $(document).on('click', '#pedalboard_hamburger', function() { var pd = $('#pedalboard'); var z = $('#studio_viewer').closest('.wind').css('z-index'); if (pd.is(':visible')) { pd.hide(); } else { pd.show(); pd.css({ 'z-index': (z + 10) }); } }); function studioInit() { mixer = { time: { duration: 0, status: 'stop', position: 0, marks: [], interval: 0, startTime: 0 }, buttons: { record: { obg: '', bg: 'red', interval: '' }, stop: { obg: '', bg: 'lightgreen', interval: '' }, play: { obg: '', bg: 'yellow', interval: '' } } }; $('#studio_track_container').html(''); var pd = $('#pedalboard'); if (!$('#soundroom_sidebar_container').is(':visible')) { var width = $('#soundroom_sidebar_container').width(); width = (width + 30) + 'px'; $('#studio').find('.to_sound').each(function(i,v) { var channel = $(v).attr('channel') + 1; $('#browser').append($(v).html()); $(v).remove(); $('.cord[channel="' + channel + '"]').draggable({ start: function(p,ui) { $('.jack').show(); }, drag: function(p,ui) { }, stop: function(p,ui) { $('.jack').hide(); } }); }); } studioRetriever(); if ($('#studio').attr('uuid')) { var uuid = $('#studio').attr('uuid'); studioLoad(uuid); } } $(document).on('click', '.studio_close_button', function() { $('#soundroom_sidebar_container').html('').hide(); $('.cord').remove(); }); $(document).on('click','.knob',function() { var knob = $(this); var control = knob.attr('control'); var channel = knob.attr('channel'); var input = $('.knob_control[control="' + control + '"][channel="' + channel + '"]'); var current_value = input.val(); var vis = input.is(':visible'); if (vis) { input.hide(); $('.knob[channel="' + channel + '"]').show(); } else { input.show(); $('.knob[channel="' + channel + '"]').hide(); $('.knob[control="' + control + '"][channel="' + channel + '"]').show(); } studioSaver(); }); $(document).on('mousewheel', '.knob', function(e) { var mvmt = numeral(e.originalEvent.wheelDelta).value(); mvmt = numeral(mvmt / 30).value() ; var knob = $(this); var control = knob.attr('control'); var channel = knob.attr('channel'); var input = $('.knob_control[control="' + control + '"][channel="' + channel + '"]'); var current_value = input.val(); input.val((numeral(current_value).value() + mvmt) ); input.trigger('change'); studioSaver(); }); $(document).on('change mousemove touchmove','.knob_control',function() { var input = $(this); var channel = input.attr('channel'); var current_value = input.val(); var control = input.attr('control'); var knob = $('.knob[control="' + control + '"][channel="' + channel + '"]'); var direction = knob.attr('direction'); var flip = numeral(knob.attr('flip')).value() || 0; var range = numeral(knob.attr('range')).value() || .85; var step = numeral(input.attr('step')).value(); var transform_value = (flip + numeral((360 / 100) * (current_value * range)).value()); if (direction == 'counter') { transform_value = (flip - numeral((360 / 100) * (current_value * range)).value()); } knob.css({ 'transform': 'rotate(' + transform_value + 'deg)' }); studioSaver(); }); $(document).on('click', '.button_control', function() { var b = $(this); var control = b.attr('control'); var colour = b.attr('colour'); var status = b.attr('status'); if (status == 'depressed') { b.attr('status', 'pressed'); b.attr('src', '/images/studio/button_pressed_' + colour + '.png'); } else { b.attr('status', 'depressed'); b.attr('src', '/images/studio/button_depressed_' + colour + '.png'); } studioSaver(); }); $(document).on('mousewheel', '.channel_volume', function(e) { var vol = $(this); var mvmt = numeral(e.originalEvent.wheelDelta).value() / 30; var newVol = (numeral(vol.val()).value() + mvmt); vol.val(newVol); studioSaver(); }); $(document).on('change', '.channel_volume', function() { studioSaver(); }); $(document).on('click', '#studio_loop', function() { var sl = $(this); if (sl.attr('enabled') == 'on') { sl.attr('enabled', 'off'); sl.css({'background-color': sl.attr('obg') }); } else { sl.attr('obg', sl.css('background-color')); sl.attr('enabled', 'on'); sl.css({'background-color': 'red' }); } studioSaver(); }); function studioSaver() { var studio = {}; var name = $('#studio').attr('name'); var uuid = $('#studio').attr('uuid'); $('.knob_control, .channel_volume').each(function(i,v) { var channel = $(v).attr('channel'); var control = $(v).attr('control'); var value = $(v).val(); if (control == 'pan') { value = (value - 0) / (100 - 0) * ( 1 - -1) + -1; } if (studio[channel] == undefined) { studio[channel] = {}; } studio[channel][control] = value; if (mixer[channel]) { mixer[channel][control] = value; } }); $('.armed').each(function(i,v) { var channel = $(v).attr('channel'); var control = $(v).attr('control'); var state = $(v).attr('state'); var text = $(v).text(); studio[channel][control] = { state: state, text: text }; }); var sl = $('#studio_loop').attr('enabled'); var video_toggle = $('#studio_video_toggle').attr('toggled'); studio['admin'] = { time: mixer['time'], name: name, uuid: uuid, loop: sl, video_toggle: video_toggle }; studio = JSON.stringify(studio); localStorage.setItem('studio', studio); } function studioRetriever() { var studio = localStorage.getItem('studio') || "{}"; studio = JSON.parse(studio); $.each(studio, function(i,v) { if (!mixer[i]) { mixer[i] = {}; } $.each(studio[i], function(n,w) { mixer[i][n] = w; $.each(mixer[i], function(ir,vr) { studio[i]['mixer'] = vr; }); if (n == 'armed') { $('[channel="' + i + '"][control="' + n + '"]').attr('state', w.state); $('[channel="' + i + '"][control="' + n + '"]').text(w.text); } else { if (n == 'pan') { w = (w - -1) / (1 - -1) * ( 100 - 0) + 0; } $('[channel="' + i + '"][control="' + n + '"]').val(w).trigger('change'); } }); }); mixer['time']['loop'] = studio['admin']['loop']; return studio; } var studio_jw_deg = 0; var studio_last = 'out'; $(document).on('touchmove mousemove', '#studio_jog_wheel', function(e) { e.preventDefault(); e.preventDefault(); var j = $(this); var jc = j.closest('.jog_wheel_frame').find('.jog_wheel_centre'); if (e.which === 1 || e.originalEvent.type == 'touchmove') { var x = e.originalEvent.clientX; var y = e.originalEvent.clientY; if (e.originalEvent.targetTouches) { x = e.originalEvent.targetTouches[0].clientX; y = e.originalEvent.targetTouches[0].clientY; } var middle_x = numeral(jc.offset().left + (jc.width() / 2)).value(); var middle_y = numeral(jc.offset().top + (jc.height() / 2)).value(); var deltaX = middle_x - x; var deltaY = middle_y - y; var rad = Math.atan2(deltaY, deltaX); var deg = rad * (180 / Math.PI) - 90; var diff = 0; if (studio_last == 'in') { diff = (deg - studio_jw_deg); } studio_jw_deg = (studio_jw_deg + diff); j.css({'rotate': studio_jw_deg + 'deg' }); studio_last = 'in'; mixer['time']['position'] = mixer['time']['position'] + diff / 10; studioTime(); } }); $(document).on('mouseout touchend mouseup', '#studio_jog_wheel', function() { studio_last = 'out'; }); $(document).on('mousewheel', '#studio_jog_wheel', function(e) { var j = $(this); var mvmt = numeral(e.originalEvent.wheelDelta).value(); var diff = numeral(mvmt / 30).value() ; studio_jw_deg = (studio_jw_deg + diff); j.css({'rotate': studio_jw_deg + 'deg' }); mixer['time']['position'] = mixer['time']['position'] + diff / 10; studioTime(); }); $(document).on('click', '#studio_video_toggle', function() { var toggle = $(this).attr('toggled'); if (toggle == 'on') { toggle = 'off'; } else { toggle = 'on'; } $(this).attr('toggled', toggle); studioSaver(); }); $(document).on('click', '#studio_record', function() { if (mixer['time']['status'] != 'record' && mixer['time']['status'] != 'play') { studioRecord(); mixer['time']['status'] = 'record'; } }); $(document).on('click', '.armed',function() { var armed = $(this); var state = armed.attr('state'); if (state == 'off') { armed.attr('state', 'rec'); armed.text('R'); } else if (state == 'rec') { armed.attr('state', 'play'); armed.text('P'); } else if (state == 'play') { armed.attr('state', 'loop'); armed.text('L'); } else { armed.attr('state', 'off'); armed.text('O'); } studioSaver(); }); async function studioRecord() { var studio = studioRetriever(); mixer['time']['status'] = 'record'; var constraints = { 'audio': true }; if (mixer['admin']['video_toggle'] == 'on') { constraints['video'] = true; } var inputStream = await navigator.mediaDevices.getUserMedia(constraints); studioTime('start'); $.each(studio, function(i,v) { if (v.armed) { if (v.armed.state == 'rec') { if (!mixer[i]['media']) { mixer[i]['media'] = {}; } var rec = { startTime: mixer['time']['position'] }; mixer[i]['media']['in'] = inputStream; rec['track'] = new MediaRecorder(mixer[i]['media']['in']); if (!mixer[i]['media']['rec']) { mixer[i]['media']['rec'] = []; mixer[i]['media']['rec'][0] = rec; } else { mixer[i]['media']['rec'][mixer[i]['media']['rec'].length] = rec; } var count = mixer[i]['media']['rec'].length - 1; if (!mixer[i]['media']['out']) { mixer[i]['media']['out'] = []; } if (!mixer[i]['media']['out'][count]) { mixer[i]['media']['out'][count] = {}; } if (!mixer[i]['media']['actx']) { mixer[i]['media']['actx'] = []; } if (!mixer[i]['media']['actx'][count]) { mixer[i]['media']['actx'][count] = {}; } if (!mixer[i]['media']['actx'][count]['ctx']) { mixer[i]['media']['actx'][count]['ctx'] = { 'state': 'uninitialized', pcmData: [] }; } mixer[i]['media']['actx'][count]['ctx'] = new AudioContext(); var c = mixer[i]['media']['actx'][count]['ctx']; mixer[i]['media']['actx'][count]['track'] = c.createMediaStreamSource(inputStream); // mixer[i]['media']['actx'][ir]['track'].connect(c.destination); mixer[i]['media']['actx'][count]['panner'] = new StereoPannerNode(c, { pan: mixer[i]['pan']}); mixer[i]['media']['actx'][count]['analyser'] = c.createAnalyser(); mixer[i]['media']['actx'][count]['track'].connect(mixer[i]['media']['actx'][count]['analyser']);//.connect(mixer[i]['media']['actx'][count]['panner']); const pcmData = new Float32Array(mixer[i]['media']['actx'][count]['analyser'].fftSize); // console.log(pcmData); mixer[i]['media']['actx'][count]['pcmData'] = pcmData; var trackContainer = $('#studio_track_container'); trackContainer.append(''); if (mixer['admin']['video_toggle'] == 'on') { var v = document.getElementById('studio_video_monitor'); v.srcObject = rec['track'].stream; v.muted = true; } mixer[i]['media']['out'][count]['track'] = document.getElementById('studio_channel_' + i + '_' + count); mixer[i]['media']['out'][count]['startTime'] = mixer['time']['position']; rec['track'].audioBitsPerSecond = 192000 mixer[i]['media']['rec'][count]['track'].ondataavailable = (event) => { var data = event.data; if (!mixer[i]['media']['aud']) { mixer[i]['media']['aud'] = []; } if (!mixer[i]['media']['aud'][count]) { mixer[i]['media']['aud'][count] = {}; } mixer[i]['media']['out'][count]['data'] = data; mixer[i]['media']['out'][count]['encoding'] = data['type']; mixer[i]['media']['out'][count]['size'] = data['size']; mixer[i]['media']['aud'][count]['track'] = new Audio; var audioUrl = URL.createObjectURL(data); mixer[i]['media']['out'][count]['track'].src = audioUrl; mixer[i]['media']['out'][count]['status'] = 'stop'; }; mixer[i]['media']['rec'][count]['track'].start(); } } }); studioPlay('rec'); } $(document).on('click', '#studio_play', function() { if (mixer['time']['status'] != 'record' && mixer['time']['status'] != 'play') { studioPlay('play'); mixer['time']['status'] = 'play'; } }); async function studioPlay(mode) { var playTracks = []; if (mode != 'rec') { studioTime('start'); } var studio = studioRetriever(); $.each(studio, function(i,v) { if (v.armed) { if ((v.armed.state == 'rec' && mode == 'play') || v.armed.state == 'play') { if (mixer[i]['media']) { if (mixer[i]['media']['out']) { $.each(mixer[i]['media']['out'],function(ir,vr) { vr['track'].currentTime = mixer['time']['position']; //vr['track'].play(); vr['track'].volume = (studio[i]['volume'] / 100); }); } } } } }); } $(document).on('click', '#studio_stop', function() { studioStop(); mixer['time']['status'] = 'stop'; }); async function studioStop() { var playTracks = []; if (mixer['time']['status'] == 'stop') { mixer['time']['position'] = 0; } studioTime('stop'); var studio = studioRetriever(); $.each(studio, function(i,v) { if (v.armed) { if (mixer[i]['media']) { if (mixer[i]['media']['rec'] && mixer['time']['status'] == 'record') { $.each(mixer[i]['media']['rec'], function(ir,vr) { console.log(vr['track']); if (vr['track'].state == 'recording') { vr['track'].stop(); mixer[i]['media']['in'].getTracks().forEach(function(track) { console.log(track); track.stop(); }); } vr['status'] = 'stop'; mixer[i]['media']['out'][ir]['status'] = 'stop'; mixer[i]['media']['out'][ir]['duration'] = mixer['time']['position'] - mixer[i]['media']['out'][ir]['startTime'] ; }); } if (mixer[i]['media']['out']) { $.each(mixer[i]['media']['out'], function(ir,vr) { vr['status'] = 'stop'; vr['track'].pause(); // vr['track'].play(); if (mixer[i]['media']['actx'][ir]) { // mixer[i]['media']['actx'][ir] = null; } }); } } } }); mixer['time']['status'] = 'stop'; } function studioTime(command) { if (command == 'start') { mixer['time']['startTime'] = Date.now(); mixer['time']['startTime'] = (mixer['time']['startTime'] - (mixer['time']['position'] * 1000)); var svm = document.getElementById('studio_video_monitor'); mixer['time']['interval'] = setInterval(function() { var now = Date.now(); mixer['time']['position'] = ((now - mixer['time']['startTime']) / 1000); $('#studio_time_display').html(numeral(mixer['time']['position']).format('00.000')); if (mixer['time']['status'] == 'record' && mixer['time']['position'] > mixer['time']['duration']) { mixer['time']['duration'] = mixer['time']['position']; $('#studio_time_duration').html(numeral(mixer['time']['duration']).format('00.000')); } else if (mixer['time']['status'] == 'play' && mixer['time']['position'] > mixer['time']['duration']) { studioStop(); clearInterval(mixer['time']['interval']); console.log(mixer['time']['loop']); if (mixer['time']['loop'] == 'on') { mixer['time']['position'] = 0; studioPlay(); mixer['time']['status'] = 'play'; } else { clearInterval(mixer['time']['interval']); mixer['time']['status'] = 'stop'; studioStop(); return; } } $.each(mixer, function(i,v) { if (mixer[i]['media'] && mixer[i]['armed']['state'] != 'off') { var canvas = document.getElementById('track_view_' + i); var metreCanvas = document.getElementById('channel_volume_metre_' + i); var mctx = metreCanvas.getContext('2d'); var ctx = canvas.getContext('2d'); $.each(mixer[i]['media']['out'], function(ir,vr) { if (mixer[i]['media']['in'].active == true) { let sum = 0.0; if (eval(typeof mixer[i]['media']['actx'][ir]['analyser'].getFloatTimeDomainData == 'function')) { mixer[i]['media']['actx'][ir]['analyser'].getFloatTimeDomainData(mixer[i]['media']['actx'][ir]['pcmData']); for (const amplitude of mixer[i]['media']['actx'][ir]['pcmData']) { sum += amplitude * amplitude; } var metreValue = Math.sqrt(sum / mixer[i]['media']['actx'][ir]['pcmData'].length) * 3; // console.log(metreValue + ' ' + ((metreValue * metreCanvas.height) - metreCanvas.height)); mctx.beginPath(); // if (mixer[i]['media']['actx'][ir]['lastClear'] + 500 <= now) { mctx.clearRect(0,0,metreCanvas.width,metreCanvas.height); mctx.fill(); mixer[i]['media']['actx'][ir]['lastClear'] = now; // } mctx.fillStyle = "green"; mctx.fillRect(0, Math.abs((metreValue * metreCanvas.height) - metreCanvas.height), metreCanvas.width, metreCanvas.height); mctx.fill(); if (mixer[i]['media']['actx'][ir]['panner']['pan']) { mixer[i]['media']['actx'][ir]['panner'].pan.value = mixer[i]['pan']; } } } else if (vr['startTime'] <= mixer['time']['position'] && (vr['status'] != 'record' && vr['status'] != 'play')) { if (!mixer[i]['media']['actx'] && vr['status']) { mixer[i]['media']['actx'] = []; console.log('new track'); } if (!mixer[i]['media']['actx'][ir]) { mixer[i]['media']['actx'][ir] = {}; console.log('new take'); } if (!mixer[i]['media']['actx'][ir]['ctx']) { mixer[i]['media']['actx'][ir]['ctx'] = { state: 'uninitialized' }; console.log('new take'); } if (mixer[i]['media']['actx'][ir]['ctx'].state == 'uninitialized') { console.log('new state'); vr['init'] = true; mixer[i]['media']['actx'][ir]['ctx'] = new AudioContext(); var c = mixer[i]['media']['actx'][ir]['ctx']; mixer[i]['media']['actx'][ir]['track'] = c.createMediaElementSource(vr['track']); mixer[i]['media']['actx'][ir]['track'].connect(c.destination); mixer[i]['media']['actx'][ir]['panner'] = new StereoPannerNode(c, { pan: mixer[i]['pan']}); mixer[i]['media']['actx'][ir]['analyser'] = c.createAnalyser(); // console.log(mixer[i]['media']['actx'][ir]['analyser']); const pcmData = new Float32Array(mixer[i]['media']['actx'][ir]['analyser'].fftSize); // console.log(pcmData); mixer[i]['media']['actx'][ir]['pcmData'] = pcmData; mixer[i]['media']['actx'][ir]['track'].connect(mixer[i]['media']['actx'][ir]['panner']).connect(mixer[i]['media']['actx'][ir]['analyser']).connect(c.destination); var now = Date.now(); mixer['time']['position'] = ((now - mixer['time']['startTime']) / 1000); console.log('added the panning and whatnot'); mixer[i]['media']['actx'][ir]['lastClear'] = now; } vr['track'].currentTime = mixer['time']['position'] - vr['startTime']; vr['track'].play(); vr['status'] = 'play'; svm.src = vr['track'].src; svm.play(); } // else { vr['init'] = false; } if (mixer[i]['media']['actx'][ir] && vr['status'] != 'record') { if (vr['init'] == true) { //console.log(vr['track']); if (vr['track']) { vr['track'].volume = (mixer[i]['volume'] / 100); if (mixer[i]['media']['actx'][ir]['panner']['pan']) { mixer[i]['media']['actx'][ir]['panner'].pan.value = mixer[i]['pan']; } let sum = 0.0; if (typeof mixer[i]['media']['actx'][ir]['analyser'].getFloatTimeDomainData == 'function') { mixer[i]['media']['actx'][ir]['analyser'].getFloatTimeDomainData(mixer[i]['media']['actx'][ir]['pcmData']); for (const amplitude of mixer[i]['media']['actx'][ir]['pcmData']) { sum += amplitude * amplitude; } var metreValue = Math.sqrt(sum / mixer[i]['media']['actx'][ir]['pcmData'].length) * 3; // console.log(metreValue + ' ' + ((metreValue * metreCanvas.height) - metreCanvas.height)); mctx.beginPath(); // if (mixer[i]['media']['actx'][ir]['lastClear'] + 500 <= now) { mctx.clearRect(0,0,metreCanvas.width,metreCanvas.height); mctx.fill(); mixer[i]['media']['actx'][ir]['lastClear'] = now; // } mctx.fillStyle = "green"; mctx.fillRect(0, Math.abs((metreValue * metreCanvas.height) - metreCanvas.height), metreCanvas.width, metreCanvas.height); mctx.fill(); } } } } ctx.beginPath(); ctx.fillStyle = 'red'; ctx.fillRect((vr['startTime'] / mixer['time']['duration'] * canvas.width), 0, ((vr['duration'] / mixer['time']['duration'] * canvas.width )), canvas.height); ctx.lineWidth = 10; var positionLine = (mixer['time']['position'] / mixer['time']['duration'] * canvas.width); ctx.moveTo(positionLine, 0); ctx.lineTo(positionLine, canvas.height); ctx.strokeStyle = 'black'; ctx.stroke(); ctx.fill(); }); } }); },10); } else if (command == 'stop') { clearInterval(mixer['time']['interval']); $('#studio_time_display').html(numeral(mixer['time']['position']).format('00.000')); } else { $('#studio_time_display').html(numeral(mixer['time']['position']).format('00.000')); } if (!mixer['time']['status']) { mixer['time']['status'] = 'stop'; } var button = $('#studio_' + mixer['time']['status'] ); $.each(mixer['buttons'], function(i,v) { clearInterval(v['interval']); $('#studio_' + i).css({'background-color': v.obg }); }); mixer['buttons'][mixer['time']['status']]['interval'] = setInterval(function() { button.css({'background-color': mixer['buttons'][mixer['time']['status']]['bg'] }); var obg = mixer['buttons'][mixer['time']['status']]['obg']; setTimeout(function() { button.css({'background-color': obg }); },500); },1000); } $(document).on('click', '#studio_metronome', function() { var met = $(this); if (met.attr('armed') == 'yes') { met.attr('armed','no'); met.css({'background-color': met.attr('obg')}); } else { met.attr('armed', 'yes'); met.attr('obg', met.css('background-color')); met.css({'background-color': 'red'}); } }); $(document).on('click', '#studio_save', function() { studioSave(); }); function studioSave() { var app = 'studio'; var now = Date.now(); var name = $('#studio').attr('name'); var uuid = $('#studio').attr('uuid'); if (name) { var formData = new FormData(); var studio = studioRetriever(); formData.append('app', name); formData.append('name', name); formData.append('duration', mixer['time']['duration']); formData.append('timestamp', now); formData.append('type', 'studio'); formData.append('uuid', uuid ); $.each(mixer, function(i,v) { if (mixer[i]['media']) { $.each(mixer[i]['media']['out'], function(ir,vr) { var filename = app + '_' + now + '_' + i + '_' + ir + '.webm'; if (vr.data && vr.data.size && vr.data.type) { formData.append('blob', vr.data, filename); } }); } }); var jStudio = JSON.stringify(studio); formData.append('studio', jStudio); $.ajax({ url: '/manager/studio/save', type: 'POST', data: formData, success: function (response) { $('#studio').attr('uuid', response.uuid); $('#studio').attr('name', response.app); var studio = JSON.stringify(response.studio); localStorage.setItem('studio', studio); continent_record({'uuid':response['uuid'], 'app':response['app'],'timestamp':response['timestamp']}); studioRetriever(); }, cache: false, contentType: false, processData: false }); } else { $('#studio_name').attr('type','text').focus(); } } $(document).on('click', '#song_delete', function() { var uuid = $('#studio').attr('uuid'); var app = $('#studio').attr('name'); var a = $(this); if (a.armed == 'yes') { $.ajax({ url: '/manager/studio/delete', type: 'POST', data: { uuid: uuid, app: app }, success: function(response) { } }); } else { a.attr('armed', 'yes'); var bgcolor = a.css('background-color'); a.css({'background-color': 'red' }); setTimeout(function() { a.css({'background-color': bgcolor }); a.attr('armed', 'no'); },2000); } }); $(document).on('change', '#studio_song_select', function() { var uuid = $(this).val(); if (uuid != 'none') { studioLoad(uuid); } }); function studioLoad(uuid) { var buttons = mixer['buttons']; studioStop(); $.ajax({ url: '/manager/studio/load', type: 'GET', data: { uuid: uuid }, success: function(response) { console.log(response); $('#studio_song_select').val(response['uuid']); mixer['time'] = response.studio['admin']['time']; console.log(response.studio); console.log(mixer['time']['loop']); mixer['time']['status'] = 'stop'; $('#studio_video_toggle').attr('toggled', mixer['admin']['video_toggle']); if (mixer['time']['loop'] == 'on') { $('#studio_loop').attr('enabled','on').attr('obg', 'rgb(211, 211, 211)').css({'background-color':'red'}); } else { $('#studio_loop').attr('enabled', 'off').css({'background-color':'rgb(211, 211, 211)'}); } $('#studio').attr('name', response['app']); $('#studio').attr('uuid', response['uuid']); $('#studio_time_display').html(numeral(mixer['time']['position']).format('00.000')); $.each(response.studio, function(i,v) { if (v['mixer']) { $('#studio_channel_container_' + i ).html(''); if (!i.match('[a-zA-Z]')) { mixer[i]['media'] = v['mixer']; } $.each(v['mixer']['out'], function(ir, vr) { var trackContainer = $('#studio_track_container'); trackContainer.append(''); $('#studio_channel_' + i + '_' + ir).attr('src', vr['src']); if (!mixer[i]['media']['aud']) { mixer[i]['media']['aud'] = []; } if (!mixer[i]['media']['aud'][ir]) { mixer[i]['media']['aud'][ir] = {}; } mixer[i]['media']['actx'][ir]['ctx'] = { 'state': 'uninitialized', pcmData: [] } ; mixer[i]['media']['aud'][ir]['track'] = new Audio; mixer[i]['media']['out'][ir]['track'] = document.getElementById('studio_channel_' + i + '_' + ir); }); } }); var studio = JSON.stringify(response.studio); localStorage.setItem('studio', studio); studioRetriever(); mixer['buttons'] = buttons; } }); } $(document).on('change', '#studio_name', function() { $('#studio').attr('name', $(this).val()); $('#studio_name').hide(); }); $(document).on('blur', '#studio_name', function() { $('#studio_name').hide(); }); $(document).on('click', '#studio_mark', function() { var seen = undefined; for (n = 0; n <= mixer['time']['marks'].length; n++) { if (mixer['time']['position'] == mixer['time']['marks'][n]) { seen = n; } } if (seen == undefined) { mixer['time']['marks'].push(mixer['time']['position']); mixer['time']['marks'] = mixer['time']['marks'].sort(function(a,b) { return a - b; }); } else { mixer['time']['marks'].splice(seen,1); console.log(seen); console.log(mixer['time']['marks']); } }); $(document).on('click', '#studio_prev, #studio_next', function() { console.log('moving'); var potentialPosition = 0; if ($(this).hasClass('prev')) { console.log('previous'); for (var n = 0; n <= mixer['time']['marks'].length; n++) { if (mixer['time']['position'] > mixer['time']['marks'][n]) { potentialPosition = mixer['time']['marks'][n]; } } } else { potentialPosition = mixer['time']['duration']; for (var n = mixer['time']['marks'].length; n >= 0; n--) { if (mixer['time']['position'] < mixer['time']['marks'][n]) { potentialPosition = mixer['time']['marks'][n]; } } } mixer['time']['position'] = potentialPosition; $('#studio_time_display').html(numeral(mixer['time']['position']).format('00.000')); });