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 @@