mixer change and help instructions
This commit is contained in:
parent
bdd44985fa
commit
9b9460be71
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
co-writing music, or just hopping into open jams with other musicians for fun.
|
||||
|
||||
Check out this <a href="https://www.youtube.com/watch?v=DBo--aj_P1w" style="color:#fc0">Getting Started YouTube Video</a> for help setting up
|
||||
Check out this <a href="https://jamkazam.freshdesk.com/support/solutions/66000073843" style="color:#fc0">Getting Started Guide</a> for help setting up.
|
||||
</p>
|
||||
|
||||
<p><b style="color: white;">Learn & Play Along With Your Favorite Music</b><br/>
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
|
|
@ -21,7 +21,8 @@ MixerActions = @MixerActions
|
|||
|
||||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
MixerActions.mute([@props.mixers['master'].mixer, @props.mixers['personal'].mixer], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
# MixerActions.mute([@props.mixers['master'].mixer, @props.mixers['personal'].mixer], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -76,7 +77,7 @@ MixerActions = @MixerActions
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:@mixers()}
|
||||
{mixers:@mixers(), trackType: 'SessionBackingTracks', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.top-parent')})
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ context = window
|
|||
|
||||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
MixerActions.mute([@props.mixers.mixer], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
# MixerActions.mute([@props.mixers.mixer], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ MixerActions = @MixerActions
|
|||
|
||||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
MixerActions.mute([@props.mixers['master'].mixer, @props.mixers['personal'].mixer], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
# MixerActions.mute([@props.mixers['master'].mixer, @props.mixers['personal'].mixer], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -76,7 +77,7 @@ MixerActions = @MixerActions
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:@mixers()}
|
||||
{mixers:@mixers(), trackType: 'SessionJamTracks', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.top-parent')})
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ MixerActions = @MixerActions
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:@props.mixers}
|
||||
{mixers:@props.mixers, trackType: 'SessionJamTrackCategory', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.top-parent')})
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,11 @@ logger = context.JK.logger
|
|||
|
||||
@SessionMasterMyTracks = React.createClass({
|
||||
|
||||
mixins: [@SessionMyTracksMixin, Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged"), Reflux.listenTo(@AppStore,"onAppInit")]
|
||||
mixins: [Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged")]
|
||||
|
||||
|
||||
onInputsChanged: (update) ->
|
||||
this.setState(update)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -13,7 +17,7 @@ logger = context.JK.logger
|
|||
|
||||
if this.state.tracks.length > 0
|
||||
for track in this.state.tracks
|
||||
track.mode = MIX_MODES.MASTER
|
||||
track.mode = @props.mode
|
||||
tracks.push(`<SessionMyTrack key={track.track.client_track_id} {...track} />`)
|
||||
|
||||
if @state.chat
|
||||
|
|
@ -24,7 +28,7 @@ logger = context.JK.logger
|
|||
logger.debug("no 'my inputs' for master mix")
|
||||
|
||||
`<div className="session-my-tracks">
|
||||
<h2>my live tracks</h2>
|
||||
<h2>audio tracks</h2>
|
||||
<div className="session-tracks-scroller">
|
||||
{content}
|
||||
{tracks}
|
||||
|
|
@ -32,8 +36,6 @@ logger = context.JK.logger
|
|||
</div>`
|
||||
|
||||
getInitialState:() ->
|
||||
{tracks:[], session: null}
|
||||
{tracks:[], session: null, chat:null}
|
||||
|
||||
onAppInit: (app) ->
|
||||
@app = app
|
||||
})
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ ChannelGroupIds = context.JK.ChannelGroupIds
|
|||
|
||||
render: () ->
|
||||
|
||||
content = null
|
||||
scrollerClassData = {'session-tracks-scroller': true}
|
||||
mediaOptions = `<div className="media-options">
|
||||
<div className="open-media-file-header">
|
||||
|
|
@ -248,6 +249,8 @@ ChannelGroupIds = context.JK.ChannelGroupIds
|
|||
Close {mediaType}
|
||||
</a>`
|
||||
|
||||
content = null
|
||||
|
||||
|
||||
if this.state.mediaSummary.backingTrackOpen
|
||||
|
||||
|
|
@ -257,7 +260,7 @@ ChannelGroupIds = context.JK.ChannelGroupIds
|
|||
|
||||
else if this.state.mediaSummary.recordingOpen
|
||||
|
||||
mediaTracks.push(`<SessionRecordedCategory key="RecordedCategory" recordingName={this.state.recordingName} mixers={this.state.mediaCategoryMixer} mode={@props.mode} />`)
|
||||
mediaTracks.push(`<SessionRecordedCategory key="RecordedCategory" recordingName={this.state.recordingName} mixers={this.state.mediaCategoryMixer} mode={this.props.mode} />`)
|
||||
for recordedTrack in @state.recordedTracks
|
||||
recordedTrack.mode = @props.mode
|
||||
mediaTracks.push(`<SessionRecordedTrack key={recordedTrack.track.id} {...recordedTrack} />`)
|
||||
|
|
@ -274,7 +277,7 @@ ChannelGroupIds = context.JK.ChannelGroupIds
|
|||
# The Category mixer
|
||||
# The Metronome
|
||||
# All the JamTracks
|
||||
mediaTracks.push(`<SessionJamTrackCategory key="JamTrackCategory" jamTrackName={this.state.jamTrackName} mixers={this.state.mediaCategoryMixer} mode={@props.mode} />`)
|
||||
mediaTracks.push(`<SessionJamTrackCategory key="JamTrackCategory" jamTrackName={this.state.jamTrackName} mixers={this.state.mediaCategoryMixer} mode={this.props.mode} />`)
|
||||
|
||||
if @state.metronome? # && @state.jamTrackMixdown.id == null
|
||||
@state.metronome.mode = @props.mode
|
||||
|
|
@ -299,9 +302,10 @@ ChannelGroupIds = context.JK.ChannelGroupIds
|
|||
scrollerClasses = classNames(scrollerClassData)
|
||||
|
||||
`<div className="session-media-tracks">
|
||||
<h2>recorded audio</h2>
|
||||
<h2>recorded audio <span className="session-tracks-help">?</span></h2>
|
||||
{contents}
|
||||
<div className={scrollerClasses}>
|
||||
{content}
|
||||
{mediaTracks}
|
||||
</div>
|
||||
</div>`
|
||||
|
|
@ -326,6 +330,9 @@ ChannelGroupIds = context.JK.ChannelGroupIds
|
|||
componentDidMount: () ->
|
||||
context.JK.HandleBackingTrackSelectedCallback2 = @handleBackingTrackSelectedCallback
|
||||
|
||||
$root = $(@getDOMNode())
|
||||
context.JK.helpBubble($root.find(".session-tracks-help"), "session-media-tracks-instructions", {}, {offsetParent:$root.closest('.top-parent'), positions: ['right', 'bottom'], width:450})
|
||||
|
||||
|
||||
componentDidUpdate: () ->
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ MIX_MODES = context.JK.MIX_MODES
|
|||
|
||||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
MixerActions.mute([@mixer()], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
# MixerActions.mute([@mixer()], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -78,7 +79,7 @@ MIX_MODES = context.JK.MIX_MODES
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:@mixers()}
|
||||
{mixers:@mixers(), trackType: 'SessionMetronome', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$topParent})
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ MixerActions = @MixerActions
|
|||
|
||||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
MixerActions.mute([mixers.mixer, mixers.oppositeMixer], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
# MixerActions.mute([mixers.mixer, mixers.oppositeMixer], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -63,7 +64,7 @@ MixerActions = @MixerActions
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:@mixers()}
|
||||
{mixers:@mixers(), trackType: 'SessionMyChat', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.top-parent')})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ ConfigureTracksActions = @ConfigureTracksActions
|
|||
else
|
||||
clientStats = null
|
||||
{stats: clientStats}
|
||||
|
||||
|
||||
handleMute: (e) ->
|
||||
e.preventDefault()
|
||||
|
||||
|
|
@ -27,7 +27,8 @@ ConfigureTracksActions = @ConfigureTracksActions
|
|||
|
||||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
MixerActions.mute([this.props.mixers.mixer, this.props.mixers.oppositeMixer], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
# MixerActions.mute([this.props.mixers.mixer, this.props.mixers.oppositeMixer], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -103,7 +104,7 @@ ConfigureTracksActions = @ConfigureTracksActions
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:this.props.mixers}
|
||||
{mixers:this.props.mixers, trackType: 'SessionMyTrack', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.top-parent')})
|
||||
|
||||
|
|
|
|||
|
|
@ -11,19 +11,21 @@ SessionActions = context.SessionActions
|
|||
|
||||
SessionActions.leaveSession.trigger({location: '/client#/account/audio'})
|
||||
|
||||
|
||||
render: () ->
|
||||
|
||||
content = null
|
||||
videoTutorialLink = null
|
||||
tracks = []
|
||||
|
||||
if @state.session?.preppingVstEnable
|
||||
if @state.mySession?.preppingVstEnable
|
||||
delayVstEnable = `<div className="enable-vst-incoming">Enabling VSTs ... <div className="spinner-small"></div></div>`
|
||||
else
|
||||
videoTutorialLink = `<SessionVideoTutorialLink />`
|
||||
|
||||
if @state.tracks.length > 0
|
||||
for track in @state.tracks
|
||||
track = $.extend({}, track)
|
||||
track.mode = @props.mode
|
||||
tracks.push(`<SessionMyTrack key={track.track.client_track_id} {...track} />`)
|
||||
|
||||
|
|
@ -31,7 +33,7 @@ SessionActions = context.SessionActions
|
|||
@state.chat.mode = @props.mode
|
||||
tracks.push(`<SessionMyChat key="chat" {...this.state.chat} />`)
|
||||
|
||||
else if @state.session? && @state.session.inSession()
|
||||
else if @state.mySession? && @state.mySession.inSession()
|
||||
content = `<div className="session-mytracks-notracks">
|
||||
<p className="notice">
|
||||
You have not set up any inputs for your instrument or vocals.
|
||||
|
|
@ -41,7 +43,7 @@ SessionActions = context.SessionActions
|
|||
</div>`
|
||||
|
||||
`<div className="session-my-tracks">
|
||||
<h2>my live tracks</h2>
|
||||
<h2>audio inputs <span className="session-tracks-help">?</span></h2>
|
||||
<div className="my-tracks-header">
|
||||
<SessionTrackSettingsBtn />
|
||||
{videoTutorialLink}
|
||||
|
|
@ -54,7 +56,11 @@ SessionActions = context.SessionActions
|
|||
</div>`
|
||||
|
||||
getInitialState:() ->
|
||||
{tracks:[], session: null, chat:null}
|
||||
{tracks:[], mySession: null, chat:null}
|
||||
|
||||
componentDidMount:() ->
|
||||
$root = $(@getDOMNode())
|
||||
context.JK.helpBubble($root.find(".session-tracks-help"), "session-audio-inputs-instructions", {}, {offsetParent:$root.closest('.top-parent'), positions: ['right', 'bottom'], width:450})
|
||||
|
||||
onAppInit: (app) ->
|
||||
@app = app
|
||||
|
|
|
|||
|
|
@ -25,5 +25,5 @@ context = window
|
|||
context.JK.popExternalLinks($root)
|
||||
|
||||
if @props.detail?
|
||||
context.JK.hoverBubble($root, @props.detail, {offsetParent:$root.closest('.top-parent'), positions: ['left', 'bottom']})
|
||||
context.JK.hoverBubble($root, @props.detail, {offsetParent:$root.closest('.screen'), positions: ['left', 'bottom']})
|
||||
})
|
||||
|
|
@ -28,7 +28,8 @@ MixerActions = @MixerActions
|
|||
|
||||
mixers = if this.props.tracks.length > 0 then this.props.tracks[0].mixers else {}
|
||||
|
||||
MixerActions.mute([mixers.mixer], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
#MixerActions.mute([mixers.mixer], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -108,7 +109,7 @@ MixerActions = @MixerActions
|
|||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
mixers = if this.props.tracks.length > 0 then this.props.tracks[0].mixers else {}
|
||||
{mixers:mixers}
|
||||
{mixers:mixers, trackType: 'SessionOtherTrack', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.screen')})
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
$ = jQuery
|
||||
context = window
|
||||
MixerActions = context.MixerActions
|
||||
|
||||
@SessionOtherTracks = React.createClass({
|
||||
|
||||
mixins: [Reflux.listenTo(@SessionOtherTracksStore,"onInputsChanged"), Reflux.listenTo(@AppStore,"onAppInit")]
|
||||
mixins: [@SessionMyTracksMixin, Reflux.listenTo(@SessionOtherTracksStore,"onOtherInputsChanged"), Reflux.listenTo(@SessionMyTracksStore,"onInputsChanged"), Reflux.listenTo(@AppStore,"onAppInit")]
|
||||
|
||||
onInputsChanged: (sessionMixers) ->
|
||||
onOtherInputsChanged: (sessionMixers) ->
|
||||
session = sessionMixers.session
|
||||
mixers = sessionMixers.mixers
|
||||
noAudioUsers = mixers.noAudioUsers
|
||||
|
|
@ -95,16 +96,26 @@ MixerActions = context.MixerActions
|
|||
content = null
|
||||
participants = []
|
||||
|
||||
noOthers = `<div className="when-empty">No other musicians are in your session.</div>`
|
||||
if @state.tracks.length > 0
|
||||
for track in @state.tracks
|
||||
track = $.extend({}, track)
|
||||
track.mode = @props.mode
|
||||
participants.push(`<SessionMyTrack key={track.track.client_track_id} {...track} />`)
|
||||
|
||||
if @state.chat
|
||||
chat= $.extend({}, @state.chat)
|
||||
chat.mode = @props.mode
|
||||
participants.push(`<SessionMyChat key="chat" {...chat} />`)
|
||||
|
||||
if this.state.participants.length > 0
|
||||
for participant in this.state.participants
|
||||
participant.mode = @props.mode
|
||||
participants.push(`<SessionOtherTrack key={participant.client_id} {...participant} />`)
|
||||
else if this.state.session? && this.state.session.inSession()
|
||||
content = noOthers
|
||||
content = null
|
||||
|
||||
`<div className="session-other-tracks">
|
||||
<h2>other live tracks</h2>
|
||||
<h2>personal mix <span className="session-tracks-help">?</span></h2>
|
||||
<SessionInviteMusiciansBtn />
|
||||
<div className="session-tracks-scroller">
|
||||
{content}
|
||||
|
|
@ -114,7 +125,12 @@ MixerActions = context.MixerActions
|
|||
</div>`
|
||||
|
||||
getInitialState:() ->
|
||||
{participants:[], session: null}
|
||||
{participants:[], session: null, mySession: null, tracks:[], chat:null}
|
||||
|
||||
componentDidMount:() ->
|
||||
$root = $(@getDOMNode())
|
||||
context.JK.helpBubble($root.find(".session-tracks-help"), "session-personal-mix-instructions", {}, {offsetParent:$root.closest('.top-parent'), positions: ['right', 'bottom'], width:450})
|
||||
|
||||
|
||||
onAppInit: (app) ->
|
||||
@app = app
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ MixerActions = @MixerActions
|
|||
|
||||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
MixerActions.mute([this.props.mixers.mixer, this.props.mixers.oppositeMixer], muting)
|
||||
# this button is annoying. the hover shows mute and it's good to use instead
|
||||
# MixerActions.mute([this.props.mixers.mixer, this.props.mixers.oppositeMixer], muting)
|
||||
|
||||
render: () ->
|
||||
|
||||
|
|
@ -69,7 +70,7 @@ MixerActions = @MixerActions
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:@props.mixers}
|
||||
{mixers:@props.mixers, trackType: 'SessionRecordedCategory', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.top-parent')})
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ MixerActions = @MixerActions
|
|||
$mute,
|
||||
'SessionTrackVolumeHover',
|
||||
() =>
|
||||
{mixers:@mixers()}
|
||||
{mixers:@mixers(), trackType: 'SessionRecordedTrack', mode: @props.mode}
|
||||
,
|
||||
{width:235, positions:['right', 'left'], offsetParent:$root.closest('.top-parent')})
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ SessionActions = @SessionActions
|
|||
<SessionRecordBtn />
|
||||
{videoBtn}
|
||||
{filesBtn}
|
||||
<SessionMixerBtn />
|
||||
<SessionResyncBtn />
|
||||
<SessionLeaveBtn />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -21,13 +21,13 @@ ptrCount = 0
|
|||
onInputsChanged: (sessionMixers) ->
|
||||
|
||||
mixers = sessionMixers.mixers
|
||||
newMixers = mixers.refreshMixer(@state.mixers)
|
||||
if mixers?
|
||||
newMixers = mixers.refreshMixer(@state.mixers)
|
||||
|
||||
newMixers = {} unless newMixers?
|
||||
sessionController = sessionMixers.session.sessionController()
|
||||
logger.debug("session controller", sessionController)
|
||||
newMixers = {} unless newMixers?
|
||||
sessionController = sessionMixers.session.sessionController()
|
||||
|
||||
this.setState({mixers: newMixers, sessionController: sessionController})
|
||||
this.setState({mixers: newMixers, sessionController: sessionController})
|
||||
|
||||
getInitialState: () ->
|
||||
{mixers: this.props.mixers, ptr: "STVH#{ptrCount++}", sessionController: window.SessionStore.helper.sessionController()}
|
||||
|
|
@ -38,10 +38,10 @@ ptrCount = 0
|
|||
muting = $(e.currentTarget).is('.enabled')
|
||||
|
||||
# if it's a chat, my input, or media track, or jam track, or media track group, then do both mixers at the same time
|
||||
if @state.mixers.mixer.group_id == ChannelGroupIds.AudioInputMusicGroup || @state.mixers.mixer.group_id == ChannelGroupIds.AudioInputChatGroup || @state.mixers.mixer.group_id == ChannelGroupIds.MediaTrackGroup || @state.mixers.mixer.group_id == ChannelGroupIds.JamTrackGroup || ((@state.mixers.mixer.group_id == ChannelGroupIds.MonitorCatGroup || @state.mixers.mixer.group_id == ChannelGroupIds.MasterCatGroup) && @state.mixers.mixer.name == CategoryGroupIds.MediaTrack)
|
||||
MixerActions.mute([this.state.mixers.mixer, this.state.mixers.oppositeMixer], muting)
|
||||
else
|
||||
MixerActions.mute(this.state.mixers.mixer, muting)
|
||||
#if @state.mixers.mixer.group_id == ChannelGroupIds.AudioInputMusicGroup || @state.mixers.mixer.group_id == ChannelGroupIds.AudioInputChatGroup || @state.mixers.mixer.group_id == ChannelGroupIds.MediaTrackGroup || @state.mixers.mixer.group_id == ChannelGroupIds.JamTrackGroup || ((@state.mixers.mixer.group_id == ChannelGroupIds.MonitorCatGroup || @state.mixers.mixer.group_id == ChannelGroupIds.MasterCatGroup) && @state.mixers.mixer.name == CategoryGroupIds.MediaTrack)
|
||||
# MixerActions.mute([this.state.mixers.mixer, this.state.mixers.oppositeMixer], muting)
|
||||
#else
|
||||
# MixerActions.mute(this.state.mixers.mixer, muting)
|
||||
|
||||
|
||||
handleMuteCheckbox: (e) ->
|
||||
|
|
@ -76,6 +76,49 @@ ptrCount = 0
|
|||
'muted' : muteMixer?.mute
|
||||
})
|
||||
|
||||
textualHelp = null
|
||||
|
||||
if (@props.trackType == 'SessionMyTrack' || @props.trackType == 'SessionMyChat') && @props.mode == context.JK.MIX_MODES.MASTER
|
||||
textualHelp = ` <div className="textual-help">
|
||||
<p>Use the gain knobs on your
|
||||
audio interface or this slider to
|
||||
adjust your input level up/down.</p>
|
||||
|
||||
<p>Play or sing, and watch where the
|
||||
meter lights peak.</p>
|
||||
|
||||
<p>These lights should reach the top of
|
||||
the green lights, and maybe one light
|
||||
into the orange/red zone.</p>
|
||||
</div>`
|
||||
else if @props.trackType == 'SessionOtherTrack' || @props.trackType == 'SessionMyTrack'
|
||||
textualHelp = `<div className="textual-help">
|
||||
<p>Use this slider to adjust this audio
|
||||
track's volume up or down to get
|
||||
your mix where you like.</p>
|
||||
|
||||
<p>This only affects what you hear, not
|
||||
what others hear in your session.</p>
|
||||
|
||||
<p>Your personal mix is what will be
|
||||
used for recordings and broadcasts
|
||||
you personally control in sessions.</p>
|
||||
</div>`
|
||||
else
|
||||
textualHelp = `<div className="textual-help">
|
||||
<p>Use this slider to adjust this audio
|
||||
track's volume up or down to get
|
||||
your mix where you like.</p>
|
||||
|
||||
<p>This only affects what you hear, not
|
||||
what others hear in your session.</p>
|
||||
|
||||
<p>Your personal mix is what will be
|
||||
used for recordings and broadcasts
|
||||
you personally control in sessions.</p>
|
||||
</div>`
|
||||
|
||||
|
||||
`<div className="track-volume-hover">
|
||||
<div className="session-track track">
|
||||
<div className="track-vu-left">
|
||||
|
|
@ -95,11 +138,7 @@ ptrCount = 0
|
|||
<label htmlFor="mute">Mute</label>
|
||||
</div>
|
||||
|
||||
<div className="textual-help">
|
||||
<p>Use this slider to control the volume of this track in your personal mix.</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>
|
||||
</div>
|
||||
{textualHelp}
|
||||
|
||||
<div className="close-window">
|
||||
<a onClick={this.closeHover}>close</a>
|
||||
|
|
|
|||
|
|
@ -523,7 +523,7 @@ MIX_MODES = context.JK.MIX_MODES;
|
|||
|
||||
# supply the master mixer of a media track, and this function will harvest out the rest
|
||||
mediaMixers:(masterMixer, isOpener) ->
|
||||
personalMixer = if isOpener then @getMixerByResourceId(masterMixer.rid, MIX_MODES.PERSONAL) else null
|
||||
personalMixer = if isOpener then @getMixerByResourceId(masterMixer.rid, MIX_MODES.PERSONAL) else masterMixer
|
||||
personalVuMixer = if isOpener then personalMixer else masterMixer
|
||||
{
|
||||
isOpener: isOpener
|
||||
|
|
@ -569,6 +569,7 @@ MIX_MODES = context.JK.MIX_MODES;
|
|||
null
|
||||
|
||||
getMixer: (mixerId, mode) ->
|
||||
beforeMode = mode
|
||||
mode = @mixMode unless mode?
|
||||
@allMixers[(if mode then 'M' else 'P') + mixerId]
|
||||
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ MIDI_TRACK = context.JK.MIDI_TRACK
|
|||
else
|
||||
logger.warn("SessionMyTracks: unable to find participant")
|
||||
|
||||
this.setState(tracks: tracks, session:session, chat: chat)
|
||||
this.setState(tracks: tracks, mySession:session, chat: chat)
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -218,11 +218,13 @@
|
|||
var networkTest = $wizardSteps.filter($('.network-test'))
|
||||
wizard = new context.JK.Wizard(app);
|
||||
|
||||
stepUnderstandGear.initialize($wizardSteps.filter($('[layout-wizard-step=0]')), self);
|
||||
stepSelectGear.initialize($wizardSteps.filter($('[layout-wizard-step=1]')), self);
|
||||
stepConfigureTracks.initialize($wizardSteps.filter($('[layout-wizard-step=2]')), self);
|
||||
stepConfigureVoiceChat.initialize($wizardSteps.filter($('[layout-wizard-step=3]')), self);
|
||||
stepDirectMonitoring.initialize($wizardSteps.filter($('[layout-wizard-step=4]')), self);
|
||||
|
||||
var operatingSystem = context.JK.GetOSAsString();
|
||||
stepUnderstandGear.initialize($wizardSteps.filter($('[layout-wizard-step=0]')), self, operatingSystem);
|
||||
stepSelectGear.initialize($wizardSteps.filter($('[layout-wizard-step=1]')), self, operatingSystem);
|
||||
stepConfigureTracks.initialize($wizardSteps.filter($('[layout-wizard-step=2]')), self, operatingSystem);
|
||||
stepConfigureVoiceChat.initialize($wizardSteps.filter($('[layout-wizard-step=3]')), self, operatingSystem);
|
||||
stepDirectMonitoring.initialize($wizardSteps.filter($('[layout-wizard-step=4]')), self, operatingSystem);
|
||||
stepSuccess.initialize($wizardSteps.filter($('.success')), self);
|
||||
|
||||
var dynamicStepCount = 5
|
||||
|
|
|
|||
|
|
@ -18,10 +18,16 @@
|
|||
var wizard = null;
|
||||
var firstTime = true;
|
||||
var helpTimeout = null;
|
||||
var operatingSystem = null;
|
||||
|
||||
|
||||
function handleHelp() {
|
||||
return "https://www.youtube.com/watch?v=SjMeMZpKNR4"
|
||||
if (operatingSystem == "Win32") {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123618-setup-wizard-windows-step-3-configuring-your-audio-input-tracks"
|
||||
}
|
||||
else {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123593-setup-wizard-mac-step-3-configuring-your-audio-input-tracks"
|
||||
}
|
||||
}
|
||||
|
||||
function handleNext() {
|
||||
|
|
@ -62,10 +68,12 @@
|
|||
}, 2000)
|
||||
}
|
||||
}
|
||||
function initialize(_$step, _wizard) {
|
||||
function initialize(_$step, _wizard, _operatingSystem) {
|
||||
$step = _$step;
|
||||
wizard = _wizard;
|
||||
operatingSystem = _operatingSystem;
|
||||
$watchVideoBtn = $step.find('.watch-video')
|
||||
$watchVideoBtn.attr('href', handleHelp())
|
||||
|
||||
configureTracksHelper.initialize($step);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,9 +22,15 @@
|
|||
var $watchVideoBtn = null;
|
||||
var firstTime = true;
|
||||
var helpTimeout = null;
|
||||
var operatingSystem = null;
|
||||
|
||||
function handleHelp() {
|
||||
return "https://www.youtube.com/watch?v=f7niycdWm7Y";
|
||||
if (operatingSystem == "Win32") {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123633-setup-wizard-windows-step-4-setting-up-a-chat-mic"
|
||||
}
|
||||
else {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123594-setup-wizard-mac-step-4-setting-up-a-chat-mic"
|
||||
}
|
||||
}
|
||||
|
||||
function newSession() {
|
||||
|
|
@ -66,12 +72,14 @@
|
|||
}
|
||||
}
|
||||
|
||||
function initialize(_$step) {
|
||||
function initialize(_$step, _wizard, _operatingSystem) {
|
||||
$step = _$step;
|
||||
|
||||
operatingSystem = _operatingSystem;
|
||||
voiceChatHelper.initialize($step, 'configure_voice_gear_wizard', true, {vuType: "vertical", lightCount: 8, lightWidth: 3, lightHeight: 10}, 101);
|
||||
|
||||
$watchVideoBtn = $step.find('.watch-video')
|
||||
$watchVideoBtn.attr('href', handleHelp())
|
||||
}
|
||||
|
||||
this.handleHelp = handleHelp;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
var $watchVideoBtn = null;
|
||||
var firstTime = true;
|
||||
var helpTimeout = null;
|
||||
|
||||
var operatingSystem = null;
|
||||
function checkIfPlaying() {
|
||||
var currentPositionMs = context.jamClient.SessionCurrrentPlayPosMs();
|
||||
var atEnd = currentPositionMs == 0 || trackDurationMs == currentPositionMs;
|
||||
|
|
@ -62,7 +62,12 @@
|
|||
}
|
||||
|
||||
function handleHelp() {
|
||||
return "https://www.youtube.com/watch?v=-nC-D3JBHnk";
|
||||
if (operatingSystem == "Win32") {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123634-setup-wizard-windows-step-5-turning-off-direct-monitoring"
|
||||
}
|
||||
else {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123595-setup-wizard-mac-step-5-turning-off-direct-monitoring"
|
||||
}
|
||||
}
|
||||
|
||||
function handleNext() {
|
||||
|
|
@ -126,7 +131,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
function initialize(_$step) {
|
||||
function initialize(_$step, _wizard, _operatingSystem) {
|
||||
$step = _$step;
|
||||
|
||||
$directMonitoringBtn = $step.find('.test-direct-monitoring');
|
||||
|
|
@ -134,6 +139,8 @@
|
|||
$adjustSettingsDirectMonitor = $step.find('.adjust-settings-direct-monitor');
|
||||
$adjustSettingsDirectMonitor.on('click', onAdjustGearRequested)
|
||||
$watchVideoBtn = $step.find('.watch-video')
|
||||
operatingSystem = _operatingSystem
|
||||
$watchVideoBtn.attr('href', handleHelp())
|
||||
}
|
||||
|
||||
this.handleHelp = handleHelp;
|
||||
|
|
|
|||
|
|
@ -1095,8 +1095,14 @@
|
|||
initializeNextButtonState();
|
||||
}
|
||||
|
||||
|
||||
function handleHelp() {
|
||||
return "https://www.youtube.com/channel/UC38nc9MMZgExJAd7ca3rkUA/videos"
|
||||
if (operatingSystem == "Win32") {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123617-setup-wizard-windows-step-2-setting-up-your-audio-interface"
|
||||
}
|
||||
else {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123592-setup-wizard-mac-step-2-setting-up-your-audio-interface"
|
||||
}
|
||||
}
|
||||
|
||||
function handleNext() {
|
||||
|
|
@ -1303,7 +1309,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
function initialize(_$step, _wizard) {
|
||||
function initialize(_$step, _wizard, _operatingSystem) {
|
||||
$step = _$step;
|
||||
wizard = _wizard;
|
||||
|
||||
|
|
@ -1330,7 +1336,10 @@
|
|||
$resyncStatusText = $step.find('.resynctext');
|
||||
$latencyScoreBox = $step.find('.latency-score-section')
|
||||
|
||||
operatingSystem = context.JK.GetOSAsString();
|
||||
operatingSystem = _operatingSystem;
|
||||
|
||||
$watchVideoBtn.attr('href', handleHelp())
|
||||
|
||||
frameBuffers.initialize($knobs);
|
||||
$(frameBuffers)
|
||||
.on(frameBuffers.FRAMESIZE_CHANGED, onFramesizeChanged)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,12 @@
|
|||
var operatingSystem;
|
||||
|
||||
function handleHelp() {
|
||||
return "https://www.youtube.com/watch?v=Z1GxCljtdCY";
|
||||
if (operatingSystem == "Win32") {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123616-setup-wizard-windows-step-1-starting-the-setup-wizard"
|
||||
}
|
||||
else {
|
||||
return "https://jamkazam.freshdesk.com/support/solutions/articles/66000123577-setup-wizard-mac-step-1-starting-the-setup-wizard"
|
||||
}
|
||||
}
|
||||
|
||||
function beforeShow() {
|
||||
|
|
@ -18,13 +23,13 @@
|
|||
if (operatingSystem == "Win32") {
|
||||
$watchVideo.attr('href', 'https://www.youtube.com/watch?v=Z1GxCljtdCY');
|
||||
}
|
||||
$watchVideo.attr('href', videoUrl);
|
||||
$watchVideo.attr('href', handleHelp());
|
||||
}
|
||||
|
||||
function initialize(_$step) {
|
||||
function initialize(_$step, _wizard, _operatingSystem) {
|
||||
$step = _$step;
|
||||
|
||||
operatingSystem = context.JK.GetOSAsString();
|
||||
operatingSystem = _operatingSystem;
|
||||
}
|
||||
|
||||
this.handleHelp = handleHelp;
|
||||
|
|
|
|||
|
|
@ -74,6 +74,10 @@ html {
|
|||
}
|
||||
}
|
||||
|
||||
.session-help {
|
||||
padding:5px;
|
||||
}
|
||||
|
||||
.big-dark-help {
|
||||
font-size:20px;
|
||||
color: $ColorTextTypical;
|
||||
|
|
|
|||
|
|
@ -210,6 +210,15 @@ $session-screen-divider: 1190px;
|
|||
color: $ColorTextTypical;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
.session-tracks-help {
|
||||
font-size:14px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
color:$ColorLink;
|
||||
top: -2px;
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
.my-tracks-header {
|
||||
|
|
@ -304,10 +313,12 @@ $session-screen-divider: 1190px;
|
|||
}
|
||||
|
||||
.when-empty {
|
||||
margin-top: 25px;
|
||||
margin-left: 22px;
|
||||
//margin-top: 25px;
|
||||
//margin-left: 22px;
|
||||
margin:5px 0 10px 0;
|
||||
color: $ColorTextTypical;
|
||||
overflow: hidden;
|
||||
font-size:12px;
|
||||
}
|
||||
|
||||
.session-track-settings {
|
||||
|
|
|
|||
|
|
@ -71,6 +71,43 @@ script type="text/template" id="template-help-recording-count"
|
|||
script type="text/template" id="template-help-session-count"
|
||||
| The number of sessions that this {{data.entity_type}} has played in.
|
||||
|
||||
script type="text/template" id="template-help-session-audio-inputs-instructions"
|
||||
.session-audio-inputs-instructions.big-dark-help.session-help
|
||||
p
|
||||
| In this Audio Inputs section, set the input level on each of your audio tracks to a healthy level.
|
||||
br
|
||||
p
|
||||
| To do this, hover your mouse over the volume icon on one of your audio tracks. You'll see a slider with meter lights on the sides. Use the gain knobs on your audio interface or the slider in the JamKazam app to adjust your input level up or down. Play and/or sing, and watch where the meter lights peak. These lights should reach the top of the green lights, and maybe one light into the orange/red zone.
|
||||
br
|
||||
p
|
||||
| If your input is set too high, you'll get clipping and distortion. If your input is set too low, your audio may be too soft, or you'll get too much white noise mixed with your audio signal.
|
||||
|
||||
script type="text/template" id="template-help-session-personal-mix-instructions"
|
||||
.session-personal-mix-instructions.big-dark-help.session-help
|
||||
p
|
||||
| In this Personal Mix section, adjust the volume of each audio track in your session to get the mix where you like it.
|
||||
br
|
||||
p
|
||||
| To do this, hover your mouse over the volume icon on any of the audio tracks. You'll see a slider with meter lights on the sides. Pull the slider in the JamKazam app up to make the track louder in the mix, or pull the slider down to make the track softer in the mix. Don't worry, as these changes only affect what you hear - they don't change what others in your sessions hear.
|
||||
br
|
||||
p
|
||||
| Also, please note that your personal mix is the mix that will be used for any recordings that you personally make in the session and also for any broadcast that you personally send from your computer to YouTube, Facebook, etc. If another musician in your session makes a recording or broadcasts your session, that musician's personal mix is the mix that will be used.
|
||||
|
||||
|
||||
script type="text/template" id="template-help-session-media-tracks-instructions"
|
||||
.session-media-tracks-instructions.big-dark-help.session-help
|
||||
p
|
||||
| In this Recorded Audio section, you can open recordings you've made in JamKazam sessions, JamTracks (multi-track recordings of popular songs) you've purchased from JamKazam, or audio files (i.e. simple backing tracks). You can also start a metronome that everyone in the session will hear.
|
||||
br
|
||||
p
|
||||
| For any of these features, you can adjust the associated volume of audio in your session to get the mix where you like it.
|
||||
br
|
||||
p
|
||||
| To do this, hover your mouse over the volume icon on any of the audio tracks. You'll see a slider with meter lights on the sides. Pull the slider in the JamKazam app up to make the track louder in your personal mix, or pull the slider down to make the track softer in your mix. Don't worry, as these changes only affect what you hear - they don't change what others in your sessions hear.
|
||||
br
|
||||
p
|
||||
| Also, please note that your personal mix is the mix that will be used for any recordings that you personally make in the session and also for any broadcast that you personally send from your computer to YouTube, Facebook, etc. If another musician in your session makes a recording or broadcasts your session, that musician's personal mix is the mix that will be used.
|
||||
|
||||
script type="text/template" id="template-help-musician-score-count"
|
||||
.help-musician-score-count
|
||||
p
|
||||
|
|
|
|||
|
|
@ -373,8 +373,8 @@
|
|||
var singlePlayerProfileGuardDialog = new JK.SinglePlayerProfileGuardDialog(JK.app);
|
||||
singlePlayerProfileGuardDialog.initialize();
|
||||
|
||||
var sessionMasterMixDialog = new JK.SessionMasterMixDialog(JK.app);
|
||||
sessionMasterMixDialog.initialize();
|
||||
//var sessionMasterMixDialog = new JK.SessionMasterMixDialog(JK.app);
|
||||
//sessionMasterMixDialog.initialize();
|
||||
|
||||
var signinDialog = new JK.SigninDialog(JK.app);
|
||||
signinDialog.initialize();
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
It will take a few minutes, but it will educate you and save you time and trouble.
|
||||
|
||||
.center.video-button-holder
|
||||
%a.button-orange.watch-video{href:"#", rel:'external'} WATCH VIDEO
|
||||
%a.button-orange.watch-video{href:"#", rel:'external'} INSTRUCTIONS
|
||||
|
||||
.wizard-step{ 'layout-wizard-step' => "1", 'dialog-title' => "Select & Test Audio Gear", 'dialog-purpose' => "SelectAudioGear" }
|
||||
.ftuesteps
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
%li Configure interface settings.
|
||||
%li View test results.
|
||||
.center
|
||||
%a.button-orange.watch-video{href:'https://jamkazam.desk.com/customer/en/portal/articles/2400685-using-the-setup-wizard-%E2%80%93-step-2-%E2%80%93-select-and-test-audio-gear', rel:'external'}
|
||||
%a.button-orange.watch-video{rel:'external'}
|
||||
INSTRUCTIONS
|
||||
.wizard-step-column
|
||||
%h2 Audio Input Device
|
||||
|
|
@ -68,7 +68,7 @@
|
|||
%li Edit the first audio track using the "update" link to set it up as an instrumental or vocal track as you like.
|
||||
%li If desired, add other audio or MIDI tracks for other instruments or vocals.
|
||||
.center
|
||||
%a.button-orange.watch-video{href:'https://jamkazam.desk.com/customer/en/portal/articles/2400702-using-the-setup-wizard-%E2%80%93-step-3-%E2%80%93-configure-tracks', rel:'external'} INSTRUCTIONS
|
||||
%a.button-orange.watch-video{rel:'external'} INSTRUCTIONS
|
||||
.wizard-step-column
|
||||
= react_component 'ConfigureTracks', {}
|
||||
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
%p If you have set up a mic in step 2 for your instrument or voice, click Next to move forward.
|
||||
%p Otherwise, follow the instructions to set up a voice chat mic.
|
||||
.center
|
||||
%a.button-orange.watch-video{href:'https://jamkazam.desk.com/customer/en/portal/articles/2400826-using-the-setup-wizard-%E2%80%93-step-4-%E2%80%93-configure-voice-chat', rel:'external'} INSTRUCTIONS
|
||||
%a.button-orange.watch-video{rel:'external'} INSTRUCTIONS
|
||||
.wizard-step-column
|
||||
%h2.sub-header Select Voice Chat Option
|
||||
%form.voice
|
||||
|
|
@ -123,7 +123,7 @@
|
|||
= "If audio is poor try "
|
||||
%a.adjust-settings-direct-monitor{'href'=>'#'}tweaking your settings
|
||||
.center
|
||||
%a.button-orange.watch-video{href:'https://jamkazam.desk.com/customer/en/portal/articles/2400827-using-the-setup-wizard-%E2%80%93-step-5-%E2%80%93-turn-off-direct-monitoring', rel:'external'} INSTRUCTIONS
|
||||
%a.button-orange.watch-video{rel:'external'} INSTRUCTIONS
|
||||
.wizard-step-column
|
||||
.help-content
|
||||
When you have fully turned off the direct monitoring control (if any) on your audio interface,
|
||||
|
|
|
|||
|
|
@ -5,5 +5,5 @@
|
|||
.dialog-inner
|
||||
p.notice
|
||||
| The master mix is the audio mix used for both recordings and live broadcasts of session audio. Changes to the master mix are global, so there is only one master mix for the session. The master mix does not include controls for the metronome because the metronome is not recorded or broadcast. Any user in the session may use the volume and pan controls below to make adjustments to the master mix for everyone in the session.
|
||||
= react_component 'SessionMasterMix', {}
|
||||
//= react_component 'SessionMasterMix', {}
|
||||
a.button-orange.close-button layout-action="close" CLOSE
|
||||
|
|
|
|||
Loading…
Reference in New Issue