diff --git a/app/assets/javascripts/fakeJamClient.js b/app/assets/javascripts/fakeJamClient.js index d9385ecd9..360020887 100644 --- a/app/assets/javascripts/fakeJamClient.js +++ b/app/assets/javascripts/fakeJamClient.js @@ -72,8 +72,7 @@ } function GetASIODevices() { - var response =[{"device_id":0,"device_name":"Realtek High Definition Audio","interfaces":[{"interface_id":0,"interface_name":"Realtek HDA SPDIF Out","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":1,"interface_name":"Realtek HD Audio rear output","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":2,"interface_name":"Realtek HD Audio Mic input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":3,"interface_name":"Realtek HD Audio Line input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":4,"interface_name":"Realtek HD Digital input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"}]},{"interface_id":5,"interface_name":"Realtek HD Audio Stereo input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]}],"wavert_supported":false},{"device_id":1,"device_name":"M-Audio FW Audiophile","interfaces":[{"interface_id":0,"interface_name":"FW AP Multi","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":1,"interface_name":"FW AP 1/2","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":2,"interface_name":"FW AP SPDIF","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":3,"interface_name":"FW AP 3/4","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":2,"device_name":"Virtual Audio Cable","interfaces":[{"interface_id":0,"interface_name":"Virtual Cable 2","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]},{"interface_id":1,"interface_name":"Virtual Cable 1","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":3,"device_name":"WebCamDV WDM Audio Capture","interfaces":[{"interface_id":0,"interface_name":"WebCamDV Audio","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"},{"is_input":false,"pin_id":1,"pin_name":"Volume Control"}]}],"wavert_supported":false}]; - + var response =[{"device_id":0,"device_name":"Realtek High Definition Audio","device_type": 0,"interfaces":[{"interface_id":0,"interface_name":"Realtek HDA SPDIF Out","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":1,"interface_name":"Realtek HD Audio rear output","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":2,"interface_name":"Realtek HD Audio Mic input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":3,"interface_name":"Realtek HD Audio Line input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":4,"interface_name":"Realtek HD Digital input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"}]},{"interface_id":5,"interface_name":"Realtek HD Audio Stereo input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]}],"wavert_supported":false},{"device_id":1,"device_name":"M-Audio FW Audiophile","device_type": 1,"interfaces":[{"interface_id":0,"interface_name":"FW AP Multi","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":1,"interface_name":"FW AP 1/2","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":2,"interface_name":"FW AP SPDIF","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":3,"interface_name":"FW AP 3/4","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":2,"device_name":"Virtual Audio Cable","device_type": 2,"interfaces":[{"interface_id":0,"interface_name":"Virtual Cable 2","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]},{"interface_id":1,"interface_name":"Virtual Cable 1","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":3,"device_name":"WebCamDV WDM Audio Capture","device_type": 3,"interfaces":[{"interface_id":0,"interface_name":"WebCamDV Audio","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"},{"is_input":false,"pin_id":1,"pin_name":"Volume Control"}]}],"wavert_supported":false}]; return response; } @@ -213,6 +212,7 @@ var suffixes = [ " - Left", " - Right", " - Left", " - Right"]; var lefts = [true, false, true, false]; var inputs = [true, true, false, false]; + var types = ["music", "non-music", "music", "non-music"]; var response = []; var name, o, i, j; for (j=0; j<4; j++) { @@ -224,7 +224,8 @@ id: name, input: inputs[j], left: lefts[j], - name: name + name: name, + device_type: types[j] }; response.push(o); } @@ -236,27 +237,40 @@ return 1; // Real version returns whatever was set } - function TrackGetInstrument(trackNumber) {} - + function TrackGetInstrument(trackNumber) { + if (trackNumber === 1) { + return 0; + } + else { + return 1; + } + } function TrackGetDevices() { - var response =[{"device_id":0,"device_name":"Realtek High Definition Audio","interfaces":[{"interface_id":0,"interface_name":"Realtek HDA SPDIF Out","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":1,"interface_name":"Realtek HD Audio rear output","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":2,"interface_name":"Realtek HD Audio Mic input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":3,"interface_name":"Realtek HD Audio Line input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":4,"interface_name":"Realtek HD Digital input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"}]},{"interface_id":5,"interface_name":"Realtek HD Audio Stereo input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]}],"wavert_supported":false},{"device_id":1,"device_name":"M-Audio FW Audiophile","interfaces":[{"interface_id":0,"interface_name":"FW AP Multi","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":1,"interface_name":"FW AP 1/2","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":2,"interface_name":"FW AP SPDIF","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":3,"interface_name":"FW AP 3/4","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":2,"device_name":"Virtual Audio Cable","interfaces":[{"interface_id":0,"interface_name":"Virtual Cable 2","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]},{"interface_id":1,"interface_name":"Virtual Cable 1","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":3,"device_name":"WebCamDV WDM Audio Capture","interfaces":[{"interface_id":0,"interface_name":"WebCamDV Audio","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"},{"is_input":false,"pin_id":1,"pin_name":"Volume Control"}]}],"wavert_supported":false}]; + var response = {"Built-in":"Built-in", "ASIO4ALL v2":"ASIO4ALL v2 - ASIO", "BEHRINGER USB AUDIO":"BEHRINGER USB AUDIO - ASIO", "{2B7D1F21-FA6E-11D4-0002-DDCA793267F2}":"SoundMAX HD Audio O - WDM", "{ABCC5A6C-C263-463B-A72F-A5BF64C86EBA}":"Generic USB Audio Device - WDM"}; return response; } + + function TrackGetMusicDeviceID() { + return "ASIO4ALL v2"; + } + function TrackSetMusicDevice(id) { device_id = id; } // mock response of this method by allowing only even device IDs to open control panel function TrackHasControlPanel() { - var devices = TrackGetDevices(); - if (devices[device_id].device_id % 2 === 0) { - return true; - } - else { - return false; - } + return true; + } + + function TrackIsMusicDeviceType(type) { + return true; + } + + function TrackGetChatUsesMusic() { + return true; } function TrackOpenControlPanel() { @@ -271,6 +285,7 @@ // assignment is an enum: // CHAT = -2, OUTPUT = -1, UNASSIGNED = 0 function TrackSetAssignment(chanId, isInput, assignment) {} + // Get a Track Assignment. function TrackGetAssignment(chanId, isInput) { // CHAT = -2, OUTPUT = -1, UNASSIGNED = 0 @@ -370,9 +385,13 @@ this.TrackGetInstrument = TrackGetInstrument; this.TrackGetDevices = TrackGetDevices; + this.TrackGetMusicDeviceID = TrackGetMusicDeviceID; this.TrackSetMusicDevice = TrackSetMusicDevice; this.TrackHasControlPanel = TrackHasControlPanel; this.TrackOpenControlPanel = TrackOpenControlPanel; + this.TrackIsMusicDeviceType = TrackIsMusicDeviceType; + + this.TrackGetChatUsesMusic = TrackGetChatUsesMusic; // Client Update this.ClientUpdateVersion = ClientUpdateVersion; diff --git a/app/assets/javascripts/session.js b/app/assets/javascripts/session.js index dd306fc9e..0e266f9c8 100644 --- a/app/assets/javascripts/session.js +++ b/app/assets/javascripts/session.js @@ -11,6 +11,19 @@ var mixers = []; var myTrackCount = 0; + // dialog variables + var unusedAudioInputChannels = []; + var track1AudioInputChannels = []; + var track2AudioInputChannels = []; + + var unusedAudioOutputChannels = []; + var usedAudioOutputChannels = []; + + var usedChatInputChannels = []; + + var devices = []; + var original_device_id; + // TODO Consolidate dragged controls and handles var $draggingFaderHandle = null; var $draggingFader = null; @@ -680,18 +693,18 @@ $('#tab-configure-audio').click(function() { // validate voice chat settings - if (validateVoiceChatSettings()) { + //if (validateVoiceChatSettings()) { setAudioInstructions(); initMusicAudioPanel(); - } + //} }); $('#tab-configure-voice').click(function() { // validate audio settings - if (validateAudioSettings()) { + //if (validateAudioSettings()) { initVoiceChatPanel(); $('#instructions', 'div[layout-id="configure-audio"]').html(configure_voice_instructions); - } + //} }); // Track 1 Add @@ -728,31 +741,39 @@ initVoiceChatPanel(); }); + $('#audio-drivers').change(function() { + audioDriverChanged(); + }); + $('#btn-driver-settings').click(function() { - context.jamClient.TrackSetMusicDevice($('#audio-drivers').val()); - - if (context.jamClient.TrackHasControlPanel()) { - logger.debug("Opening control panel"); - context.jamClient.TrackOpenControlPanel(); - } + logger.debug("Opening control panel..."); + context.jamClient.TrackOpenControlPanel(); }); - $('#btn-save-settings').click(function() { - if (!validateAudioSettings()) { - return false; - } + $('#btn-save-settings').click(saveSettings); - if (!validateVoiceChatSettings()) { - - } - }); + $('#btn-cancel-settings').click(cancelSettings); $('#btn-leave-session-test').click(function() { $('div[layout-id="configure-audio"]').hide(); }); } + function audioDriverChanged() { + context.jamClient.TrackSetMusicDevice($('#audio-drivers').val()); + + if (context.jamClient.TrackHasControlPanel()) { + logger.debug("Showing DRIVER SETTINGS button..."); + $('#btn-driver-settings').show(); + } + else { + logger.debug("Hiding DRIVER SETTINGS button..."); + $('#btn-driver-settings').hide(); + } + } + function initMusicAudioPanel() { + $('div[tab-id="music-audio"]').show(); $('div[tab-id="voice-chat"]').hide(); @@ -761,73 +782,28 @@ $('#audio-drivers').empty(); - // TODO: add logic for Audio Driver dropdown change event + // determine correct music device to preselect + var original_device_id = context.jamClient.TrackGetMusicDeviceID(); + var current_device_id = original_device_id; - // load Audio Driver dropdown (TODO: determine correct preselected option) - var devices = context.jamClient.TrackGetDevices(); - loadOptions($('#audio-drivers'), devices, "device_id", "device_name", 0); + // load Audio Driver dropdown + devices = context.jamClient.TrackGetDevices(); + var keys = Object.keys(devices); - // get data needed for listboxes - var channels = context.jamClient.TrackGetChannels(); - - var unusedAudioInputChannels = []; - var track1AudioInputChannels = []; - var track2AudioInputChannels = []; - - var unusedAudioOutputChannels = []; - var usedAudioOutputChannels = []; - - var usedChatInputChannels = []; - - - /* -2 = chat - -1 = speakers - 0 = unassigned - >0 = the music input track number */ - - $.each(channels, function(index, val) { - - var assignment = context.jamClient.TrackGetAssignment(val.input, val.id); - - logger.debug("channel id=" + val.id + ", channel input=" + val.input + ", channel assignment=" + assignment + ", channel name=" + val.name); - - // INPUT - if (val.input) { - if (assignment === -2) { - usedChatInputChannels.push(val); - } - else if (assignment === 0) { - unusedAudioInputChannels.push(val); - } - else if (assignment === -1) { - - } - else { - if (assignment === 1) { - track1AudioInputChannels.push(val); - } - else { - track2AudioInputChannels.push(val); - } - } + for (var i=0; i < keys.length; i++) { + var template = $('#template-option').html(); + var isSelected = ""; + if (keys[i] === current_device_id) { + isSelected = "selected"; } + var html = context.JK.fillTemplate(template, { + value: keys[i], + label: devices[keys[i]], + selected: isSelected + }); - // OUTPUT - else { - if (assignment === -2) { - usedChatInputChannels.push(val); - } - else if (assignment === 0) { - unusedAudioOutputChannels.push(val); - } - else if (assignment === -1) { - - } - else { - usedAudioOutputChannels.push(val); - } - } - }); + $('#audio-drivers').append(html); + } $('#audio-inputs-unused').empty(); $('#track1-input').empty(); @@ -837,6 +813,8 @@ $('#audio-output-unused').empty(); $('#audio-output-selection').empty(); + initDialogData(); + // load Unused Inputs loadOptions($('#audio-inputs-unused'), unusedAudioInputChannels, "device_id", "name", -1); @@ -844,7 +822,9 @@ loadOptions($('#track1-input'), track1AudioInputChannels, "device_id", "name", -1); // load Track 1 Instrument - + var instrument = context.jamClient.TrackGetInstrument(1); + // TODO: use map of integer to instrument to get appropriate instrument + //loadOptions($('#track1-instrument', [instrument], "", "", -1)); // load Track 2 config details if necessary if (myTrackCount > 1) { @@ -852,6 +832,9 @@ loadOptions($('#track2-input'), track2AudioInputChannels, "device_id", "name", -1); // load Track 2 Instrument + instrument = context.jamClient.TrackGetInstrument(2); + // TODO: use map of integer to instrument to get appropriate instrument + // loadOptions($('#track1-instrument', [instrument], "", "", -1)); } // load Unused Outputs @@ -873,7 +856,75 @@ $('#voice-inputs-unused').empty(); $('#voice-inputs-selection').empty(); + initDialogData(); + // load Voice Chat Input + loadOptions($('#voice-inputs-unused'), unusedAudioInputChannels, "device_id", "name", -1); + loadOptions($('#voice-inputs-selection'), usedChatInputChannels, "device_id", "name", -1); + } + + function initDialogData() { + + // clear out arrays + unusedAudioInputChannels = []; + track1AudioInputChannels = []; + track2AudioInputChannels = []; + unusedAudioOutputChannels = []; + usedAudioOutputChannels = []; + usedChatInputChannels = []; + + // get data needed for listboxes + var channels = context.jamClient.TrackGetChannels(); + + /* -2 = chat + -1 = speakers + 0 = unassigned + >0 = the music input track number */ + + $.each(channels, function(index, val) { + var assignment = context.jamClient.TrackGetAssignment(val.id, val.input); + logger.debug("channel id=" + val.id + ", channel input=" + val.input + ", channel assignment=" + assignment + + ", channel name=" + val.name + ", channel type=" + val.device_type); + + // INPUT + if (context.jamClient.TrackIsMusicDeviceType(val.device_type)) { + if (val.input) { + if (assignment === -2) { + usedChatInputChannels.push(val); + } + else if (assignment === 0) { + unusedAudioInputChannels.push(val); + } + else if (assignment === -1) { + + } + else { + if (assignment === 1) { + track1AudioInputChannels.push(val); + } + else { + track2AudioInputChannels.push(val); + } + } + } + + // OUTPUT + else { + if (assignment === -2) { + + } + else if (assignment === 0) { + unusedAudioOutputChannels.push(val); + } + else if (assignment === -1) { + + } + else { + usedAudioOutputChannels.push(val); + } + } + } + }); } function loadOptions(listbox_id, input_array, id_field, text_field, selected_id) { @@ -893,7 +944,33 @@ }); } + function saveSettings() { + if (!validateAudioSettings()) { + return false; + } + + if (!validateVoiceChatSettings()) { + return false; + } + + // TrackSetAssignment(const QString& id, bool input, int assignment) + // TrackSetInstrument(int track, int instrument_id) + // TrackSaveAssignments() + + // update jam-db with settings + + // TODO: reload / refresh Session screen (instrument icons at minimum) + } + + function cancelSettings() { + // reset to original device ID + context.jamClient.TrackSetMusicDevice(original_device_id); + } + function validateAudioSettings() { + // verify Track 1 Input and Instrument exist + + // verify Session Audio Output exists return true; } diff --git a/app/views/clients/_session.html.erb b/app/views/clients/_session.html.erb index b3fc762eb..0bf5ddbfa 100644 --- a/app/views/clients/_session.html.erb +++ b/app/views/clients/_session.html.erb @@ -261,8 +261,8 @@

- CANCEL  - UPDATE SETTINGS + CANCEL  + UPDATE SETTINGS

@@ -331,7 +331,7 @@

CANCEL  - LEAVE SESSION & START TEST + LEAVE SESSION & START TEST