diff --git a/web/app/assets/javascripts/dialog/configureTrackDialog.js b/web/app/assets/javascripts/dialog/configureTrackDialog.js index 47435f87e..1215844d6 100644 --- a/web/app/assets/javascripts/dialog/configureTrackDialog.js +++ b/web/app/assets/javascripts/dialog/configureTrackDialog.js @@ -223,7 +223,7 @@ if (enableVstTimeout) { clearTimeout(enableVstTimeout) } - enableVstTimeout = setTimeout(function() { enableVst() }, 5000) + enableVstTimeout = setTimeout(function() { enableVst() }, 1000) } function enableVst () { diff --git a/web/app/assets/javascripts/globals.js b/web/app/assets/javascripts/globals.js index d6a7367f5..5fb037cc5 100644 --- a/web/app/assets/javascripts/globals.js +++ b/web/app/assets/javascripts/globals.js @@ -8,6 +8,8 @@ context.JK = context.JK || {}; var logger = context.JK.logger; + context.JK.MIDI_TRACK = 100 + context.JK.OS = { WIN32: "Win32", OSX: "MacOSX", @@ -358,7 +360,9 @@ "PeerAudioInputMusicGroup": 13, "PeerMediaTrackGroup": 14, "JamTrackGroup": 15, - "MetronomeGroup": 16 + "MetronomeGroup": 16, + "MidiInputMusicGroup": 17, + "PeerMidiInputMusicGroup": 18 }; context.JK.ChannelGroupLookup = { @@ -378,7 +382,9 @@ 13: "PeerAudioInputMusicGroup", 14: "PeerMediaTrackGroup", 15: "JamTrackGroup", - 16: "MetronomeGroup" + 16: "MetronomeGroup", + 17: "MidiInputMusicGroup", + 18: "PeerMidiInputMusicGroup" } context.JK.CategoryGroupIds = { "AudioInputMusic" : "AudioInputMusic", diff --git a/web/app/assets/javascripts/react-components/ConfigureLiveTracksDialog.js.jsx.coffee b/web/app/assets/javascripts/react-components/ConfigureLiveTracksDialog.js.jsx.coffee index eaa89d4bf..1f44c1430 100644 --- a/web/app/assets/javascripts/react-components/ConfigureLiveTracksDialog.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/ConfigureLiveTracksDialog.js.jsx.coffee @@ -147,6 +147,15 @@ ConfigureTracksStore = @ConfigureTracksStore if @state.configureTracks? + if @state.configureTracks.scanningVsts + scan = + `
+
Scanning your system
for VST & AU plug-ins...
+
` + + if @state.configureTracks.unscanned + initialScan = `

“If you want to use a midi instrument, click the manage audio plugins link above, and then click the scan for new or updated plugins link in the menu.

` + logger.debug("current midi device: " + @state.configureTracks.editingTrack.midiDeviceIndex) selectedMidiInterface = @state.configureTracks.editingTrack.midiDeviceIndex @@ -193,6 +202,8 @@ ConfigureTracksStore = @ConfigureTracksStore
SETTING . . .
+ {initialScan} + {scan} ` @@ -223,11 +234,6 @@ ConfigureTracksStore = @ConfigureTracksStore

{header}

-
-

Track Type

-
-
-
{activeElement} @@ -328,33 +334,33 @@ ConfigureTracksStore = @ConfigureTracksStore componentDidMount: () -> $root = $(@getDOMNode()) - $radio = context.JK.checkbox($root.find('input[type="radio"]')) - $radio.on("ifChanged", @trackTypeChanged); + #$radio = context.JK.checkbox($root.find('input[type="radio"]')) + #$radio.on("ifChanged", @trackTypeChanged); componentWillUpdate: () -> - @ignoreICheck = true + #@ignoreICheck = true $root = $(@getDOMNode()) - $radio = $root.find('input[type="radio"]') + #$radio = $root.find('input[type="radio"]') - if gon.midi_enabled - $radio.iCheck('disable') - else - $radio.iCheck('enable') + #if gon.midi_enabled + # $radio.iCheck('disable') + # else + # $radio.iCheck('enable') componentDidUpdate: () -> $root = $(@getDOMNode()) - $radio = $root.find('input[type="radio"]') - $radio = context.JK.checkbox($root.find('input[type="radio"]')) - $radio.on("ifChanged", @trackTypeChanged); - if gon.midi_enabled - if @state.configureTracks.editingTrack.assignment == 1 - $radio.iCheck('disable') - else - $radio.iCheck('enable') - else - $radio.iCheck('disable') + #$radio = $root.find('input[type="radio"]') + #$radio = context.JK.checkbox($root.find('input[type="radio"]')) + #$radio.on("ifChanged", @trackTypeChanged); + #if gon.midi_enabled + # if @state.configureTracks.editingTrack.assignment == 1 + # $radio.iCheck('disable') + # else + # $radio.iCheck('enable') + #else + # $radio.iCheck('disable') - @ignoreICheck = false + # @ignoreICheck = false $manageAudioPlugins = $root.find('.manage-audio-plugins') @@ -416,10 +422,10 @@ ConfigureTracksStore = @ConfigureTracksStore vstSelected = $select.val() logger.debug("updateMidiAssocations", vstSelected, midiInterface) - if vstSelected != 'NONE' - vstSelected = {file: vstSelected} - else - vstSelected = null + #if vstSelected != 'NONE' + vstSelected = {file: vstSelected} + #else + # vstSelected = null if midiInterface == '' midiInterface = null @@ -437,6 +443,9 @@ ConfigureTracksStore = @ConfigureTracksStore else if midi? logger.debug("updating midi:#{midiInterface}") ConfigureTracksActions.associateMIDIWithTrack(midiInterface) + else + logger.debug("unassociating midi:#{midiInterface}") + ConfigureTracksActions.associateMIDIWithTrack(null) @setState({midiInterface: midiInterface}) diff --git a/web/app/assets/javascripts/react-components/ConfigureTracks.js.jsx.coffee b/web/app/assets/javascripts/react-components/ConfigureTracks.js.jsx.coffee index 0dc06875b..dac708c9b 100644 --- a/web/app/assets/javascripts/react-components/ConfigureTracks.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/ConfigureTracks.js.jsx.coffee @@ -6,6 +6,8 @@ VOICE_CHAT = context.JK.VOICE_CHAT MAX_TRACKS = context.JK.MAX_TRACKS MAX_OUTPUTS = context.JK.MAX_OUTPUTS gearUtils = context.JK.GearUtils +MIDI_TRACK = context.JK.MIDI_TRACK + @ConfigureTracks = React.createClass({ @@ -24,29 +26,42 @@ gearUtils = context.JK.GearUtils trackAssignments = @state.configureTracks?.trackAssignments + if gon.midi_enabled + addMidiTrack = `ADD MIDI TRACK . . . ` + if trackAssignments - for inputsForTrack in trackAssignments.inputs.assigned + for inputsForTrack, i in trackAssignments.inputs.assigned candidate = inputsForTrack[0] inputs = [] - for input in inputsForTrack - inputs.push(`
{input.name}
`) + if candidate.assignment == MIDI_TRACK + trackTypeLabel = 'MIDI' + midiDeviceName = 'UNKNOWN' + for midiDevice in @state.configureTracks.attachedMidiDevices.midiDevices + if midiDevice.deviceIndex == inputsForTrack.vst?.midiDeviceIndex + midiDeviceName = midiDevice.deviceName + inputs.push(`
{midiDeviceName}
`) + else + trackTypeLabel = 'AUDIO' + for input in inputsForTrack + inputs.push(`
{input.name}
`) if !inputsForTrack.instrument_id? instrument = `?` else instrument = `` - trackTypeLabel = 'AUDIO' + + vstName = 'None' if inputsForTrack.vst? && inputsForTrack.vst.name != 'NONE' vstName = "#{inputsForTrack.vst.name} by #{inputsForTrack.vst.manuf}" liveTracks.push( - `
-
{candidate.assignment}:{trackTypeLabel}{inputs}
+ `
+
{i + 1}:{trackTypeLabel}{inputs}
{vstName}
{instrument}
@@ -65,7 +80,7 @@ gearUtils = context.JK.GearUtils
-

Session Audio Inputs (Live Performance Tracks)

+

Session Audio Inputs (Live Tracks)

Plugin

Instrument

@@ -73,7 +88,8 @@ gearUtils = context.JK.GearUtils {liveTracks}
- ADD TRACK . . . + ADD AUDIO TRACK . . . + {addMidiTrack}
@@ -100,18 +116,21 @@ gearUtils = context.JK.GearUtils # can't delete the last assignment context.JK.Banner.showAlert('You can not delete the 1st audio track.') else + trackType = 'live' + if liveTrack.assignment == MIDI_TRACK + trackType = 'MIDI' context.JK.Banner.showYesNo({ title: "Confirm Deletion", - html: "Are you sure you want to delete this live track?", + html: "Are you sure you want to delete this #{trackType} track?", yes: => ConfigureTracksActions.deleteTrack(liveTrack.assignment) }) - openLiveTrackDialog: (e) -> + openLiveTrackDialog: (type, e) -> e.preventDefault() - ConfigureTracksActions.showAddNewTrack() + ConfigureTracksActions.showAddNewTrack(type) openOutputTrackDialog: (e) -> e.preventDefault() diff --git a/web/app/assets/javascripts/react-components/SessionMyTrack.js.jsx.coffee b/web/app/assets/javascripts/react-components/SessionMyTrack.js.jsx.coffee index 1e7c94092..b7b4a87e3 100644 --- a/web/app/assets/javascripts/react-components/SessionMyTrack.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/SessionMyTrack.js.jsx.coffee @@ -48,12 +48,15 @@ ConfigureTracksActions = @ConfigureTracksActions 'no-mixer' : !this.props.hasMixer }) - pan = if this.props.mixers.mixer? then this.props.mixers.mixer.pan else 0 + unless @props.no_pan + pan = if this.props.mixers.mixer? then this.props.mixers.mixer.pan else 0 - panStyle = { - transform: "rotate(#{pan}deg)" - WebkitTransform: "rotate(#{pan}deg)" - } + panStyle = { + transform: "rotate(#{pan}deg)" + WebkitTransform: "rotate(#{pan}deg)" + } + + panJsx = `
` classification = @state.stats?.classification @@ -77,7 +80,7 @@ ConfigureTracksActions = @ConfigureTracksActions
-
+ {panJsx} {vst}
diff --git a/web/app/assets/javascripts/react-components/helpers/MixerHelper.js.coffee b/web/app/assets/javascripts/react-components/helpers/MixerHelper.js.coffee index 642b79bea..590848abc 100644 --- a/web/app/assets/javascripts/react-components/helpers/MixerHelper.js.coffee +++ b/web/app/assets/javascripts/react-components/helpers/MixerHelper.js.coffee @@ -19,7 +19,7 @@ MIX_MODES = context.JK.MIX_MODES; @mediaSummary = {} @mediaTrackGroups = [ChannelGroupIds.MediaTrackGroup, ChannelGroupIds.JamTrackGroup, ChannelGroupIds.MetronomeGroup] - @muteBothMasterAndPersonalGroups = [ChannelGroupIds.AudioInputMusicGroup, ChannelGroupIds.MediaTrackGroup, + @muteBothMasterAndPersonalGroups = [ChannelGroupIds.AudioInputMusicGroup, ChannelGroupIds.MidiInputMusicGroup, ChannelGroupIds.MediaTrackGroup, ChannelGroupIds.JamTrackGroup, ChannelGroupIds.MetronomeGroup] @vuStats = {} @shouldCollectVuStats = false @@ -636,7 +636,7 @@ MIX_MODES = context.JK.MIX_MODES; muteMixer = mixer # sanity checks - if mixer && mixer.group_id != ChannelGroupIds.AudioInputMusicGroup + if mixer && (mixer.group_id != ChannelGroupIds.AudioInputMusicGroup && mixer.group_id != ChannelGroupIds.MidiInputMusicGroup) logger.error("found local mixer that was not of groupID: AudioInputMusicGroup", mixer) if mixer @@ -649,7 +649,7 @@ MIX_MODES = context.JK.MIX_MODES; # sanity checks if !oppositeMixer logger.error("unable to find opposite mixer for local mixer", mixer) - else if oppositeMixer.group_id != ChannelGroupIds.AudioInputMusicGroup + else if oppositeMixer.group_id != ChannelGroupIds.AudioInputMusicGroup && oppositeMixer.group_id != ChannelGroupIds.MidiInputMusicGroup logger.error("found local mixer in opposite mode that was not of groupID: AudioInputMusicGroup", mixer, oppositeMixer) else logger.debug("local track is not present: ", track, @allMixers) @@ -661,7 +661,7 @@ MIX_MODES = context.JK.MIX_MODES; mixer = @getMixerByTrackId(track.client_track_id, MIX_MODES.MASTER) # sanity check - if mixer && mixer.group_id != ChannelGroupIds.PeerAudioInputMusicGroup + if mixer && (mixer.group_id != ChannelGroupIds.PeerAudioInputMusicGroup && mixer.group_id != ChannelGroupIds.PeerMidiInputMusicGroup) logger.warn("master: found remote mixer that was not of groupID: PeerAudioInputMusicGroup", client_id, track.client_track_id, mixer) vuMixer = mixer @@ -689,7 +689,7 @@ MIX_MODES = context.JK.MIX_MODES; oppositeMixer = @getMixerByTrackId(track.client_track_id, MIX_MODES.MASTER) if !oppositeMixer logger.debug("personal: unable to find a PeerAudioInputMusicGroup master mixer matching a UserMusicInput", client_id, track.client_track_id) - else if oppositeMixer.group_id != ChannelGroupIds.PeerAudioInputMusicGroup + else if oppositeMixer.group_id != ChannelGroupIds.PeerAudioInputMusicGroup && oppositeMixer.group_id != mixer.group_id != ChannelGroupIds.PeerMidiInputMusicGroup logger.error("personaol: found remote mixer that was not of groupID: PeerAudioInputMusicGroup", client_id, track.client_track_id, mixer) #vuMixer = oppositeMixer; # for personal mode, use the PeerAudioInputMusicGroup's VUs diff --git a/web/app/assets/javascripts/react-components/mixins/SessionMyTracksMixin.js.coffee b/web/app/assets/javascripts/react-components/mixins/SessionMyTracksMixin.js.coffee index 73fed532f..d414dbc49 100644 --- a/web/app/assets/javascripts/react-components/mixins/SessionMyTracksMixin.js.coffee +++ b/web/app/assets/javascripts/react-components/mixins/SessionMyTracksMixin.js.coffee @@ -1,4 +1,7 @@ context = window +ChannelGroupIds = context.JK.ChannelGroupIds +MIDI_TRACK = context.JK.MIDI_TRACK + @SessionMyTracksMixin = { @@ -51,16 +54,28 @@ context = window trackName = "#{name}: #{track.instrument}" + no_pan = false associatedVst = null + # find any VST info if hasMixer && @configureTracks? # bug in the backend; track is wrong for personal mixers (always 1), but correct for master mix trackAssignment = -1 if @props.mode == context.JK.MIX_MODES.MASTER - trackAssignment = mixerData.mixer.track + if mixerData.mixer.group_id == ChannelGroupIds.MidiInputMusicGroup + trackAssignment = MIDI_TRACK + else + trackAssignment = mixerData.mixer.track else - trackAssignment = mixerData.oppositeMixer?.track + if mixerData.mixer.group_id == ChannelGroupIds.MidiInputMusicGroup + trackAssignment = MIDI_TRACK + else + trackAssignment = mixerData.oppositeMixer?.track + + if trackAssignment == MIDI_TRACK + no_pan = true + track.no_pan = no_pan for vst in @configureTracks.vstTrackAssignments.vsts if vst.track == trackAssignment - 1 && vst.name != 'NONE' @@ -68,7 +83,7 @@ context = window associatedVst = vst break - tracks.push({track: track, mixerFinder: mixerFinder, mixers: mixerData, hasMixer:hasMixer, name: name, trackName: trackName, instrumentIcon: instrumentIcon, photoUrl: photoUrl, clientId: participant.client_id, associatedVst: associatedVst}) + tracks.push({track: track, mixerFinder: mixerFinder, mixers: mixerData, hasMixer:hasMixer, name: name, trackName: trackName, instrumentIcon: instrumentIcon, photoUrl: photoUrl, clientId: participant.client_id, associatedVst: associatedVst, no_pan: no_pan}) else logger.warn("SessionMyTracks: unable to find participant") diff --git a/web/app/assets/javascripts/react-components/stores/ConfigureTracksStore.js.coffee b/web/app/assets/javascripts/react-components/stores/ConfigureTracksStore.js.coffee index 132ee871c..5484b0845 100644 --- a/web/app/assets/javascripts/react-components/stores/ConfigureTracksStore.js.coffee +++ b/web/app/assets/javascripts/react-components/stores/ConfigureTracksStore.js.coffee @@ -8,6 +8,7 @@ MAX_OUTPUTS = context.JK.MAX_OUTPUTS gearUtils = context.JK.GearUtils AUDIO_UNIT_TYPE_ID = 0 VST_TYPE_ID = 1 +MIDI_TRACK = context.JK.MIDI_TRACK ### @@ -165,7 +166,6 @@ void removeSearchPath(int typeId, QString pathToRemove); @vstPluginList = context.jamClient.VSTListVsts() @vstTrackAssignments = context.jamClient.VSTListTrackAssignments() - console.log("@vstTrackAssignments", @vstTrackAssignments) onMidiScan: () -> @performMidiScan() @@ -192,7 +192,60 @@ void removeSearchPath(int typeId, QString pathToRemove); context.jamClient.VSTShowHideGui(true, trackNumber) if trackNumber? + + findMidiTrack: () -> + midi = null + for assignment in @trackAssignments.inputs.assigned + if assignment.assignment == MIDI_TRACK + midi = assignment + break + midi + + removeMidiTrack: () -> + removeIndex = -1 + for assignment, i in @trackAssignments.inputs.assigned + if assignment.assignment == MIDI_TRACK + # remove this + removeIndex = i + break + + if removeIndex > -1 + @trackAssignments.inputs.assigned.splice(removeIndex, 1) + + defaultTrackInstrument: (trackNumber) -> + clientInstrument = context.jamClient.TrackGetInstrument(trackNumber) + if clientInstrument == 0 + logger.debug("defaulting midi instrument for assignment #{trackNumber}") + # ensure that we always have an instrument set (50 = electric guitar + context.jamClient.TrackSetInstrument(trackNumber, 50) + clientInstrument = 50 + + context.JK.client_to_server_instrument_map[clientInstrument]; + # the backend does not have a consistent way of tracking assigned inputs for midi. + # let's make it seem consistent + injectMidiToTrackAssignments: () -> + if @vstTrackAssignments? + for vst in @vstTrackAssignments.vsts + if vst.track == MIDI_TRACK - 1 + if vst.midiDeviceIndex > -1 + + # first see if midi is already there + midi = @findMidiTrack() + + if !midi? + instrument = @defaultTrackInstrument(MIDI_TRACK) + + midi = [{assignment: MIDI_TRACK}] + midi.instrument_id = instrument?.server_id + midi.assignment = MIDI_TRACK + @trackAssignments.inputs.assigned.push(midi) + else + @removeMidiTrack() + changed: () -> + + @injectMidiToTrackAssignments() + @editingTrack = [] @editingTrack.assignment = @trackNumber @@ -218,11 +271,9 @@ void removeSearchPath(int typeId, QString pathToRemove); if @editingTrack.vst? logger.debug("current track has a VST assigned:" + @editingTrack.vst.file) - logger.debug("trackAssignments:", @trackAssignments) - logger.debug("editingTrack:", @editingTrack) unscanned = !@scannedBefore && @vstPluginList.vsts.length <= 1 - console.log("@vstPluginList, unscanned", @vstPluginList.vsts.length, unscanned) + @item = { unscanned: unscanned, musicPorts: @musicPorts, @@ -322,10 +373,22 @@ void removeSearchPath(int typeId, QString pathToRemove); logger.debug("context.jamClient.TrackSetInstrument(trackNumber, track.instrument_id)", @trackNumber, instrumentId) + clientInstrumentId = null if instrumentId != null && instrumentId != '' - context.jamClient.TrackSetInstrument(@trackNumber, context.JK.instrument_id_to_instrument[instrumentId].client_id) + clientInstrumentId = context.JK.instrument_id_to_instrument[instrumentId].client_id else - context.jamClient.TrackSetInstrument(@trackNumber, 0) + clientInstrumentId = 0 + + context.jamClient.TrackSetInstrument(@trackNumber, clientInstrumentId) + + if @trackNumber == MIDI_TRACK + logger.debug("checking midi track for track instrument synchronization") + # keep artificial midi track in sync + midi = @findMidiTrack() + if midi? + logger.debug("synced midi track with #{instrumentId}") + midi.instrument_id = instrumentId + if(!result || result.length == 0) @@ -381,33 +444,45 @@ void removeSearchPath(int typeId, QString pathToRemove); logger.error("unable to process cancel for an existing track") onDeleteTrack: (assignment) -> - track = null - for inputsForTrack in @trackAssignments.inputs.assigned - if inputsForTrack.assignment == assignment - track = inputsForTrack - break + logger.debug("deleting track with assignment #{assignment}") + if assignment != MIDI_TRACK + track = null + for inputsForTrack in @trackAssignments.inputs.assigned + if inputsForTrack.assignment == assignment + track = inputsForTrack + break - if track? - for input in inputsForTrack - context.jamClient.TrackSetAssignment(input.id, true, ASSIGNMENT.UNASSIGNED) - result = context.jamClient.TrackSaveAssignments() + if track? + for input in inputsForTrack + context.jamClient.TrackSetAssignment(input.id, true, ASSIGNMENT.UNASSIGNED) + result = context.jamClient.TrackSaveAssignments() - if(!result || result.length == 0) + if(!result || result.length == 0) - else - context.JK.Banner.showAlert('Unable to save assignments. ' + result); + else + context.JK.Banner.showAlert('Unable to save assignments. ' + result); + else + logger.error("unable to find track to delete") else - logger.error("unable to find track to delete") + logger.debug("deleting midi track") + @onAssociateMIDIWithTrack(null) + @removeMidiTrack() + @changed() - onShowAddNewTrack: () -> + onShowAddNewTrack: (type) -> # check if we have what we need... namely, free ports - if @trackAssignments.inputs.unassigned.length == 0 - context.JK.Banner.showAlert('You have no more unassigned input ports.

You can free some up by editing an AUDIO track.') - return - - @openLiveTrackDialog(@nextTrackNumber) + if type == 'audio' + if @trackAssignments.inputs.unassigned.length == 0 + context.JK.Banner.showAlert('You have no more unassigned input ports.

You can free some up by editing an AUDIO track.') + return + @openLiveTrackDialog(@nextTrackNumber) + else + if @findMidiTrack()? + context.JK.Banner.showAlert('You have only one MIDI input.') + return + @openLiveTrackDialog(MIDI_TRACK) onShowEditTrack: (trackNumber) -> @openLiveTrackDialog(trackNumber) @@ -423,22 +498,12 @@ void removeSearchPath(int typeId, QString pathToRemove); @newTrack = false break - if @newTrack - @trackType = 'audio' + if @trackNumber == MIDI_TRACK + @trackType = 'midi' else - if @trackNumber == 1 - @trackType = 'audio' - else - @trackType = 'audio' - for trackAssignment in @vstTrackAssignments.vsts - if trackAssignment.track == @trackNumber - 1 - if trackAssignment.midiDeviceIndex > -1 - logger.debug("editing midi track") - @trackType = 'midi' - break + @trackType = 'audio' if @newTrack - assignment = context.jamClient.TrackGetInstrument(@trackNumber) if assignment == 0 @@ -457,7 +522,7 @@ void removeSearchPath(int typeId, QString pathToRemove); @trackType = trackType if @trackType == 'midi' - @trackNumber = 100 + @trackNumber = MIDI_TRACK @changed() onUpdateOutputs: (outputId1, outputId2) -> @@ -477,7 +542,7 @@ void removeSearchPath(int typeId, QString pathToRemove); onAssociateMIDIWithTrack: (midiInterface) -> - @trackNumber = 100 + @trackNumber = MIDI_TRACK if !midiInterface? || midiInterface == '' logger.debug("disabling midiInterface:#{midiInterface}, track:#{@trackNumber - 1}") diff --git a/web/app/assets/javascripts/react-components/stores/MixerStore.js.coffee b/web/app/assets/javascripts/react-components/stores/MixerStore.js.coffee index d98600ca5..96066d255 100644 --- a/web/app/assets/javascripts/react-components/stores/MixerStore.js.coffee +++ b/web/app/assets/javascripts/react-components/stores/MixerStore.js.coffee @@ -132,6 +132,8 @@ rest = context.JK.Rest() @masterMixers = context.jamClient.SessionGetAllControlState(true); @personalMixers = context.jamClient.SessionGetAllControlState(false); + #console.log("@personalMixers", @personalMixers) + #console.log("@masterMixers", @masterMixers) @mixers = new context.MixerHelper(@session, @masterMixers, @personalMixers, @metro, @noAudioUsers, @mixers?.mixMode || MIX_MODES.PERSONAL) @issueChange() diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 5f5ef170c..37115a72a 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -1641,7 +1641,7 @@ muteMixer = mixer; // sanity checks - if(mixer && (mixer.group_id != ChannelGroupIds.AudioInputMusicGroup)) { logger.error("found local mixer that was not of groupID: AudioInputMusicGroup", mixer) } + if(mixer && (mixer.group_id != ChannelGroupIds.AudioInputMusicGroup || mixer.group_id != ChannelGroupIds.MidiInputMusicGroup) ) { logger.error("found local mixer that was not of groupID: AudioInputMusicGroup", mixer) } if(mixer) { // find the matching AudioInputMusicGroup for the opposite mode @@ -1653,7 +1653,7 @@ // sanity checks if(!oppositeMixer) {logger.error("unable to find opposite mixer for local mixer", mixer)} - else if(oppositeMixer.group_id != ChannelGroupIds.AudioInputMusicGroup) { logger.error("found local mixer in opposite mode that was not of groupID: AudioInputMusicGroup", mixer, oppositeMixer)} + else if(oppositeMixer.group_id != ChannelGroupIds.AudioInputMusicGroup || oppositeMixer.group_id != ChannelGroupIds.MidiInputMusicGroup) { logger.error("found local mixer in opposite mode that was not of groupID: AudioInputMusicGroup", mixer, oppositeMixer)} } else { logger.debug("local track is not present: ", track) diff --git a/web/app/assets/javascripts/trackHelpers.js b/web/app/assets/javascripts/trackHelpers.js index f2be21ea5..edf3dca2f 100644 --- a/web/app/assets/javascripts/trackHelpers.js +++ b/web/app/assets/javascripts/trackHelpers.js @@ -82,10 +82,13 @@ */ getUserTracks: function(jamClient, allTracks) { var localMusicTracks = []; + var localMidiTracks = []; var i; localMusicTracks = context.JK.TrackHelpers.getTracks(jamClient, ChannelGroupIds.AudioInputMusicGroup, allTracks); + localMidiTracks = context.JK.TrackHelpers.getTracks(jamClient, ChannelGroupIds.MidiInputMusicGroup, allTracks); + localMusicTracks = localMusicTracks.concat(localMidiTracks) var trackObjects = []; for (i=0; i < localMusicTracks.length; i++) { diff --git a/web/app/assets/stylesheets/client/react-components/ConfigureTracks.css.scss b/web/app/assets/stylesheets/client/react-components/ConfigureTracks.css.scss index 72d90891a..2769a9545 100644 --- a/web/app/assets/stylesheets/client/react-components/ConfigureTracks.css.scss +++ b/web/app/assets/stylesheets/client/react-components/ConfigureTracks.css.scss @@ -10,6 +10,7 @@ height:220px; .live-tracks { + margin-bottom:5px; height:165px; overflow:auto; a { diff --git a/web/config/application.rb b/web/config/application.rb index 22758e55e..7428e6d5c 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -406,6 +406,6 @@ if defined?(Bundler) } } config.vst_enabled = true - config.midi_enabled = false + config.midi_enabled = true end end