This commit is contained in:
Seth Call 2015-07-08 12:17:45 -05:00
parent 15f9c6196a
commit f520b889e5
20 changed files with 158 additions and 48 deletions

View File

@ -112,10 +112,14 @@
$voiceChatTabSelector.click(function () { $voiceChatTabSelector.click(function () {
// validate audio settings // validate audio settings
if (validateAudioSettings()) { if (validateAudioSettings()) {
logger.debug("initializing voice chat helper")
configureTracksHelper.reset(); configureTracksHelper.reset();
voiceChatHelper.reset(); voiceChatHelper.reset();
showVoiceChatPanel(); showVoiceChatPanel();
} }
else {
logger.debug("invalid audio settings; ignoring")
}
}); });
$btnCancel.click(function() { $btnCancel.click(function() {

View File

@ -1,7 +1,7 @@
(function(context,$) { (function(context,$) {
context.JK = context.JK || {}; context.JK = context.JK || {};
context.JK.SessionSettingsDialog = function(app, sessionScreen) { context.JK.SessionSettingsDialog = function(app) {
var logger = context.JK.logger; var logger = context.JK.logger;
var gearUtils = context.JK.GearUtilsInstance; var gearUtils = context.JK.GearUtilsInstance;
var $dialog; var $dialog;

View File

@ -334,6 +334,25 @@
"MetronomeGroup": 16 "MetronomeGroup": 16
}; };
context.JK.ChannelGroupLookup = {
0: "MasterGroup",
1: "MonitorGroup",
2: "MasterCatGroup",
3: "MonitorCatGroup",
4: "AudioInputMusicGroup",
5: "AudioInputChatGroup",
6: "MediaTrackGroup",
7: "StreamOutMusicGroup",
8: "StreamOutChatGroup",
9: "StreamOutMediaGroup",
10: "UserMusicInputGroup",
11: "UserChatInputGroup",
12: "UserMediaInputGroup",
13: "PeerAudioInputMusicGroup",
14: "PeerMediaTrackGroup",
15: "JamTrackGroup",
16: "MetronomeGroup"
}
context.JK.CategoryGroupIds = { context.JK.CategoryGroupIds = {
"AudioInputMusic" : "AudioInputMusic", "AudioInputMusic" : "AudioInputMusic",
"AudioInputChat" : "AudioInputChat", "AudioInputChat" : "AudioInputChat",

View File

@ -53,10 +53,10 @@ MixerActions = @MixerActions
<div className="track-controls"> <div className="track-controls">
<SessionTrackVU orientation="horizontal" lightCount={4} lightWidth={17} lightHeight={3} side="best" mixers={mixers} /> <SessionTrackVU orientation="horizontal" lightCount={4} lightWidth={17} lightHeight={3} side="best" mixers={mixers} />
<div className="track-buttons"> <div className="track-buttons">
<div className="track-instrument"><img height="24" src={this.props.instrumentIcon} width="24" /></div>
<div className="track-icon-pan" style={panStyle}/> <div className="track-icon-pan" style={panStyle}/>
<div className={classes} data-control="mute" data-mixer-id={muteMixerId} onClick={this.handleMute}/> <div className={classes} data-control="mute" data-mixer-id={muteMixerId} onClick={this.handleMute}/>
</div> </div>
<div className="track-instrument"><img height="24" src={this.props.instrumentIcon} width="24" /></div>
<br className="clearall"/> <br className="clearall"/>
</div> </div>
<br className="clearall"/> <br className="clearall"/>

View File

@ -53,10 +53,10 @@ MixerActions = @MixerActions
<div className="track-controls"> <div className="track-controls">
<SessionTrackVU orientation="horizontal" lightCount={4} lightWidth={17} lightHeight={3} side="best" mixers={mixers} /> <SessionTrackVU orientation="horizontal" lightCount={4} lightWidth={17} lightHeight={3} side="best" mixers={mixers} />
<div className="track-buttons"> <div className="track-buttons">
<div className="track-instrument"><img height="24" src={this.props.instrumentIcon} width="24" /></div>
<div className="track-icon-pan" style={panStyle}/> <div className="track-icon-pan" style={panStyle}/>
<div className={classes} data-control="mute" data-mixer-id={muteMixerId} onClick={this.handleMute}/> <div className={classes} data-control="mute" data-mixer-id={muteMixerId} onClick={this.handleMute}/>
</div> </div>
<div className="track-instrument"><img height="24" src={this.props.instrumentIcon} width="24" /></div>
<br className="clearall"/> <br className="clearall"/>
</div> </div>

View File

@ -7,6 +7,11 @@ MixerActions = @MixerActions
mixins: [Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged")] mixins: [Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged")]
closeHover: (e) ->
e.preventDefault()
$container = $(this.getDOMNode()).closest('.react-holder')
$container.data('bt').btOff()
onInputsChanged: (sessionMixers) -> onInputsChanged: (sessionMixers) ->
mixers = sessionMixers.mixers mixers = sessionMixers.mixers
@ -115,6 +120,10 @@ MixerActions = @MixerActions
<p>This will not affect the volume for other musicians in the session.</p> <p>This will not affect the volume for other musicians in the session.</p>
</div> </div>
</div> </div>
<div className="close-window">
<a onClick={this.closeHover}>close</a>
</div>
</div>` </div>`
componentDidMount: () -> componentDidMount: () ->

View File

@ -6,6 +6,11 @@ MixerActions = @MixerActions
mixins: [Reflux.listenTo(@SessionMyTracksStore, "onInputsChanged")] mixins: [Reflux.listenTo(@SessionMyTracksStore, "onInputsChanged")]
closeHover: (e) ->
e.preventDefault()
$container = $(this.getDOMNode()).closest('.react-holder')
$container.data('bt').btOff()
onInputsChanged: (sessionMixers) -> onInputsChanged: (sessionMixers) ->
mixers = sessionMixers.mixers mixers = sessionMixers.mixers
newMixers = mixers.refreshMixer(@state.mixers) newMixers = mixers.refreshMixer(@state.mixers)
@ -30,6 +35,9 @@ MixerActions = @MixerActions
<div className="session-pan"> <div className="session-pan">
<SessionTrackPan mixers={this.state.mixers} /> <SessionTrackPan mixers={this.state.mixers} />
</div> </div>
<div className="close-window">
<a onClick={this.closeHover}>close</a>
</div>
</div>` </div>`
componentWillUpdate: (nextProps, nextState) -> componentWillUpdate: (nextProps, nextState) ->

View File

@ -64,9 +64,9 @@ ptrCount = 0
$root = $(this.getDOMNode()) $root = $(this.getDOMNode())
if mixerChanged if mixerChanged
logger.debug("re-registering VU") logger.debug("re-registering VU #{context.JK.groupIdDisplay(mixer)}", mixer)
else else
logger.debug("registered VU") logger.debug("registered VU #{context.JK.groupIdDisplay(mixer)}", mixer)
context.JK.VuHelpers.registerVU(@props.side, mixer, @state.ptr, @props.orientation == 'horizontal', @props.lightCount, $root.find('td')) context.JK.VuHelpers.registerVU(@props.side, mixer, @state.ptr, @props.orientation == 'horizontal', @props.lightCount, $root.find('td'))
@ -81,7 +81,7 @@ ptrCount = 0
componentWillUnmount: () -> componentWillUnmount: () ->
if @state.registered? if @state.registered?
logger.debug("unregistered VU") logger.debug("unregistered VU #{context.JK.groupIdDisplay(@state.registered.mixer)}")
context.JK.VuHelpers.unregisterVU(@state.registered.mixer, @state.registered.ptr) context.JK.VuHelpers.unregisterVU(@state.registered.mixer, @state.registered.ptr)
}) })

View File

@ -5,9 +5,13 @@ ptrCount = 0
@SessionTrackVolumeHover = React.createClass({ @SessionTrackVolumeHover = React.createClass({
btElement: null
mixins: [Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged")] mixins: [Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged")]
closeHover: (e) ->
e.preventDefault()
$container = $(this.getDOMNode()).closest('.react-holder')
$container.data('bt').btOff()
onInputsChanged: (sessionMixers) -> onInputsChanged: (sessionMixers) ->
mixers = sessionMixers.mixers mixers = sessionMixers.mixers
@ -75,6 +79,10 @@ ptrCount = 0
<p>This will not affect the volume of this track for other musicians in the session.</p> <p>This will not affect the volume of this track for other musicians in the session.</p>
<p>To adjust master levels for all musicians for recordings and broadcasts, use Mixer button in the toolbar.</p> <p>To adjust master levels for all musicians for recordings and broadcasts, use Mixer button in the toolbar.</p>
</div> </div>
<div className="close-window">
<a onClick={this.closeHover}>close</a>
</div>
</div>` </div>`
componentDidMount: () -> componentDidMount: () ->

View File

@ -1,5 +1,6 @@
context = window context = window
logger = context.JK.logger
ChannelGroupIds = context.JK.ChannelGroupIds ChannelGroupIds = context.JK.ChannelGroupIds
CategoryGroupIds = context.JK.CategoryGroupIds CategoryGroupIds = context.JK.CategoryGroupIds
MIX_MODES = context.JK.MIX_MODES; MIX_MODES = context.JK.MIX_MODES;
@ -20,6 +21,8 @@ MIX_MODES = context.JK.MIX_MODES;
ChannelGroupIds.MetronomeGroup] ChannelGroupIds.MetronomeGroup]
@muteBothMasterAndPersonalGroups = [ChannelGroupIds.AudioInputMusicGroup, ChannelGroupIds.MediaTrackGroup, @muteBothMasterAndPersonalGroups = [ChannelGroupIds.AudioInputMusicGroup, ChannelGroupIds.MediaTrackGroup,
ChannelGroupIds.JamTrackGroup, ChannelGroupIds.MetronomeGroup] ChannelGroupIds.JamTrackGroup, ChannelGroupIds.MetronomeGroup]
@vuStats = {}
@shouldCollectVuStats = false
@organize() @organize()
organize: () -> organize: () ->
@ -745,10 +748,27 @@ MIX_MODES = context.JK.MIX_MODES;
@currentMixerRangeMax = mixer.range_high; @currentMixerRangeMax = mixer.range_high;
mixer mixer
collectStats: (mixer) ->
mixerStats = @vuStats[mixer.id]
unless mixerStats?
mixerStats = {count: 0, group_name: context.JK.groupIdDisplay(mixer)}
@vuStats[mixer.id] = mixerStats
mixerStats.count++
dumpVUStats: () ->
# to use: check MixerStore for setInterval in cstr
logger.debug("VU STAT DUMP")
for mixerId, mixerStat of @vuStats
logger.debug("VU STAT: #{mixerState.group_name} count=#{mixerStat.count}")
updateVU: (mixerId, mode, leftValue, leftClipping, rightValue, rightClipping) -> updateVU: (mixerId, mode, leftValue, leftClipping, rightValue, rightClipping) ->
mixer = @getMixer(mixerId, mode) mixer = @getMixer(mixerId, mode)
if mixer? if mixer?
@collectStats(mixer) if @shouldCollectVuStats
context.JK.VuHelpers.updateVU3(mixer, leftValue, leftClipping, rightValue, rightClipping) context.JK.VuHelpers.updateVU3(mixer, leftValue, leftClipping, rightValue, rightClipping)
### ###

View File

@ -39,7 +39,7 @@ context = window
else else
logger.debug("SessionMyTracks: unable to find participant") logger.warn("SessionMyTracks: unable to find participant")
this.setState(tracks: tracks, session:session, chat: chat) this.setState(tracks: tracks, session:session, chat: chat)
} }

View File

@ -40,6 +40,10 @@ rest = context.JK.Rest()
context.JK.HandleBridgeCallback2 = @handleBridgeCallback context.JK.HandleBridgeCallback2 = @handleBridgeCallback
context.JK.HandleBackingTrackSelectedCallback2 = @handleBackingTrackSelectedCallback context.JK.HandleBackingTrackSelectedCallback2 = @handleBackingTrackSelectedCallback
#setInterval(@dumpVUStats, 5000)
dumpVUStats: () ->
@mixers.dumpVUStats() if @mixers?
issueChange: () -> issueChange: () ->
@trigger({session: @session, mixers: @mixers}) @trigger({session: @session, mixers: @mixers})

View File

@ -3265,6 +3265,7 @@
$metronomePlaybackSelect.metronomePlaybackMode().on(EVENTS.METRONOME_PLAYBACK_MODE_SELECTED, metronomePlaybackModeChanged) $metronomePlaybackSelect.metronomePlaybackMode().on(EVENTS.METRONOME_PLAYBACK_MODE_SELECTED, metronomePlaybackModeChanged)
context.JK.helpBubble($metronomePlaybackHelp, 'metromone-playback-modes', {} , {offsetParent: $screen, width:'400px'}); context.JK.helpBubble($metronomePlaybackHelp, 'metromone-playback-modes', {} , {offsetParent: $screen, width:'400px'});
$(document).on('layout_resized', function() { $(document).on('layout_resized', function() {
console.log("RESIZE FLUID")
resizeFluid(); resizeFluid();
}); });
} }

View File

@ -340,6 +340,15 @@
} }
context.JK.groupIdDisplay = function(mixer) {
if(mixer && mixer.group_id) {
return context.JK.ChannelGroupLookup[mixer.group_id]
}
else {
return "?group?"
}
}
context.JK.bindProfileClickEvents = function($parent, dialogsToClose) { context.JK.bindProfileClickEvents = function($parent, dialogsToClose) {
if (!$parent) { if (!$parent) {
$parent = $('body'); $parent = $('body');

View File

@ -336,14 +336,15 @@
// renders volumes based on what the backend says // renders volumes based on what the backend says
function renderVolumes() { function renderVolumes() {
var $fader = $voiceChatFader.find('[control="fader"]'); var $fader = $voiceChatFader.find('[data-control="fader"]');
var db = context.jamClient.FTUEGetChatInputVolume(); var db = context.jamClient.FTUEGetChatInputVolume();
var faderPct = db + 80; var faderPct = db + 80;
console.log("SET HANDLE POSITION", $fader, db)
context.JK.FaderHelpers.setHandlePosition($fader, faderPct); context.JK.FaderHelpers.setHandlePosition($fader, faderPct);
} }
function renderNoVolume() { function renderNoVolume() {
var $fader = $voiceChatFader.find('[control="fader"]'); var $fader = $voiceChatFader.find('[data-control="fader"]');
context.JK.FaderHelpers.setHandlePosition($fader, 50); context.JK.FaderHelpers.setHandlePosition($fader, 50);
context.JK.VuHelpers.updateVU($voiceChatVuLeft, 0); context.JK.VuHelpers.updateVU($voiceChatVuLeft, 0);
context.JK.VuHelpers.updateVU($voiceChatVuRight, 0); context.JK.VuHelpers.updateVU($voiceChatVuRight, 0);
@ -384,7 +385,7 @@
renderVolumes(); renderVolumes();
uniqueCallbackName = 'voiceChatHelperChatInputVUCallback' + caller; uniqueCallbackName = 'voiceChatHelperChatInputVUCallback' + caller;
context.JK[uniqueCallbackName] = function(dbValue) { context.JK[uniqueCallbackName] = function(dbValue, leftClip, rightClip) {
context.JK.ftueVUCallback(dbValue, $voiceChatVuLeft); context.JK.ftueVUCallback(dbValue, $voiceChatVuLeft);
context.JK.ftueVUCallback(dbValue, $voiceChatVuRight); context.JK.ftueVUCallback(dbValue, $voiceChatVuRight);
} }

View File

@ -217,13 +217,13 @@
function renderVolumes() { function renderVolumes() {
// input // input
var $inputFader = $audioInputFader.find('[control="fader"]'); var $inputFader = $audioInputFader.find('[data-control="fader"]');
var db = context.jamClient.FTUEGetInputVolume(); var db = context.jamClient.FTUEGetInputVolume();
var faderPct = db + 80; var faderPct = db + 80;
context.JK.FaderHelpers.setHandlePosition($inputFader, faderPct); context.JK.FaderHelpers.setHandlePosition($inputFader, faderPct);
// output // output
var $outputFader = $audioOutputFader.find('[control="fader"]'); var $outputFader = $audioOutputFader.find('[data-control="fader"]');
var db = context.jamClient.FTUEGetOutputVolume(); var db = context.jamClient.FTUEGetOutputVolume();
var faderPct = db + 80; var faderPct = db + 80;
context.JK.FaderHelpers.setHandlePosition($outputFader, faderPct); context.JK.FaderHelpers.setHandlePosition($outputFader, faderPct);

View File

@ -1,6 +1,6 @@
@import 'client/common'; @import 'client/common';
$session-screen-divider: 1415px; $session-screen-divider: 1190px;
@mixin session-small { @mixin session-small {
@media (max-width: #{$session-screen-divider - 1px}) { @media (max-width: #{$session-screen-divider - 1px}) {
@content; @content;
@ -14,25 +14,43 @@ $session-screen-divider: 1415px;
#session-screen2 { #session-screen2 {
.session-container {
overflow-x: hidden;
}
.session-track { .session-track {
@include session-small { @include session-small {
max-width: 120px; max-width: 120px;
} }
&.jam-track { &.metronome, &.jam-track, &.recorded-track, &.backing-track {
@include session-small { @include session-small {
height:auto; height:auto;
} }
.track-controls { .track-icon-pan {
@include session-small { @include session-small {
margin-top:0; margin-right:0;
} }
} }
.track-buttons {
@include session-small {
margin:12px 0 0;
}
}
table.vu { table.vu {
@include session-small { @include session-small {
margin-top:5px; margin-top:5px;
} }
} }
.track-controls {
@include session-small {
margin-right:8px;
}
}
.track-icon-pan { .track-icon-pan {
@include session-small { @include session-small {
margin-right:2px; margin-right:2px;
@ -40,21 +58,11 @@ $session-screen-divider: 1415px;
} }
.track-instrument { .track-instrument {
@include session-small { @include session-small {
margin: 8px 0 0 6px; margin: -4px 12px 0 0;
}
}
.track-buttons {
@include session-small {
margin-top:12px;
}
}
.track-controls {
@include session-small {
margin-right:8px;
} }
} }
} }
&.jam-track-category { &.jam-track-category, &.recorded-category {
.track-controls { .track-controls {
@include session-small { @include session-small {
margin-top:5px; margin-top:5px;
@ -111,22 +119,26 @@ $session-screen-divider: 1415px;
width: 100%; width: 100%;
} }
.session-my-tracks, .session-other-tracks, .session-media-tracks, .session-notifications { .session-my-tracks, .session-other-tracks, .session-media-tracks {
@include border_box_sizing; @include border_box_sizing;
float: left; float: left;
width: 25%; width: 33%;
border-right: 1px solid #4c4c4c; border-right: 1px solid #4c4c4c;
padding: 10px; padding: 10px;
height: 100%; height: 100%;
margin-bottom: 15px; margin-bottom: 15px;
color:$ColorTextTypical; color:$ColorTextTypical;
overflow:hidden; overflow:hidden;
position:relative; position:relative;
} }
.session-media-tracks {
width:34%;
}
.session-notifications { .session-notifications {
border-right-width: 0; border-right-width: 0;
display:none; //temp
} }
.in-session-controls { .in-session-controls {
@ -155,6 +167,15 @@ $session-screen-divider: 1415px;
margin-right: 3px; margin-right: 3px;
} }
} }
.button-grey {
margin:0 5px;
padding: 3px 7px;
&.session-leave {
margin-right:10px;
}
}
} }
.session-tracks-scroller { .session-tracks-scroller {
@ -169,7 +190,7 @@ $session-screen-divider: 1415px;
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
text-align:center; text-align:left;
&.media-options-showing { &.media-options-showing {
top:180px; top:180px;
@ -325,6 +346,11 @@ $session-screen-divider: 1415px;
} }
} }
} }
.close-window {
text-align:center;
clear:both;
}
} }

View File

@ -1,7 +1,5 @@
@import "client/common"; @import "client/common";
.session-track { .session-track {
display:inline-block; display:inline-block;
@ -132,7 +130,7 @@
} }
.track-icon-pan { .track-icon-pan {
float:right; float:right;
margin-right:20px; margin-right:15px;
} }
.track-icon-mute{ .track-icon-mute{
float:right; float:right;
@ -143,8 +141,8 @@
.track-instrument { .track-instrument {
float:left; float:left;
margin-left:0; margin-left:0;
margin-right: 8px; margin-right: 10px;
margin-top: -3px; margin-top: -4px;
} }
.track-controls { .track-controls {
margin-left:0; margin-left:0;
@ -165,10 +163,9 @@
} }
.track-instrument { .track-instrument {
float: left; float: left;
margin: -2px 7px 0 0; margin: -4px 10px 0 0;
} }
} }
&.recorded-category, &.jam-track-category { &.recorded-category, &.jam-track-category {
height:auto !important; height:auto !important;
} }
@ -188,7 +185,7 @@
.react-holder { .react-holder {
&.SessionTrackVolumeHover, &.SessionSelfVolumeHover { &.SessionTrackVolumeHover, &.SessionSelfVolumeHover {
height:331px; height:343px;
width:235px; width:235px;
.session-track { .session-track {
@ -304,6 +301,8 @@
.mixer-holder { .mixer-holder {
padding-bottom:0;
.session-track { .session-track {
margin-top:0; margin-top:0;
} }
@ -320,12 +319,14 @@
} }
&.SessionTrackVolumeHover { &.SessionTrackVolumeHover {
.session-track {
margin-bottom:0;
}
} }
&.SessionSelfVolumeHover { &.SessionSelfVolumeHover {
width:470px ! important; width:470px ! important;
height:360px ! important; height:380px ! important;
} }
&.SessionTrackPanHover { &.SessionTrackPanHover {

View File

@ -300,12 +300,12 @@
var findBandScreen = new JK.FindBandScreen(JK.app); var findBandScreen = new JK.FindBandScreen(JK.app);
findBandScreen.initialize(); findBandScreen.initialize();
var sessionScreen = new JK.SessionScreen(JK.app); //var sessionScreen = new JK.SessionScreen(JK.app);
sessionScreen.initialize(localRecordingsDialog, recordingFinishedDialog, JK.FriendSelectorDialogInstance); //sessionScreen.initialize(localRecordingsDialog, recordingFinishedDialog, JK.FriendSelectorDialogInstance);
AppActions.appInit.trigger(JK.app) AppActions.appInit.trigger(JK.app)
var sessionSettingsDialog = new JK.SessionSettingsDialog(JK.app, sessionScreen); var sessionSettingsDialog = new JK.SessionSettingsDialog(JK.app);
sessionSettingsDialog.initialize(); sessionSettingsDialog.initialize();
var adjustGearSpeed = new JK.AdjustGearSpeedDialog(JK.app); var adjustGearSpeed = new JK.AdjustGearSpeedDialog(JK.app);

View File

@ -13,7 +13,7 @@
describe("with defaults", function() { describe("with defaults", function() {
it("should add vertical fader to selector", function() { it("should add vertical fader to selector", function() {
JK.FaderHelpers.renderFader('#fader', {faderId:'a'}); JK.FaderHelpers.renderFader('#fader', {faderId:'a'});
$fader = $('#fader div[control="fader"]'); $fader = $('#fader div[data-control="fader"]');
orientation = $fader.attr('orientation'); orientation = $fader.attr('orientation');
expect($fader.length).toEqual(1); expect($fader.length).toEqual(1);
expect(orientation).toEqual('vertical'); expect(orientation).toEqual('vertical');
@ -23,7 +23,7 @@
describe("horizontal", function() { describe("horizontal", function() {
it("should add horizontal fader to selector", function() { it("should add horizontal fader to selector", function() {
JK.FaderHelpers.renderFader('#fader', {faderId:'a',faderType: "horizontal"}); JK.FaderHelpers.renderFader('#fader', {faderId:'a',faderType: "horizontal"});
$fader = $('#fader div[control="fader"]'); $fader = $('#fader div[data-control="fader"]');
orientation = $fader.attr('orientation'); orientation = $fader.attr('orientation');
expect($fader.length).toEqual(1); expect($fader.length).toEqual(1);
expect(orientation).toEqual('horizontal'); expect(orientation).toEqual('horizontal');