mixer change and help instructions

This commit is contained in:
Seth Call 2020-09-27 11:24:22 -05:00
parent bdd44985fa
commit 9b9460be71
33 changed files with 254 additions and 85 deletions

View File

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

View File

@ -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')})

View File

@ -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: () ->

View File

@ -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')})

View File

@ -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')})

View File

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

View File

@ -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: () ->

View File

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

View File

@ -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')})
})

View File

@ -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')})

View File

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

View File

@ -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']})
})

View File

@ -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')})

View File

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

View File

@ -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')})

View File

@ -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')})

View File

@ -30,7 +30,6 @@ SessionActions = @SessionActions
<SessionRecordBtn />
{videoBtn}
{filesBtn}
<SessionMixerBtn />
<SessionResyncBtn />
<SessionLeaveBtn />
</div>

View File

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

View File

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

View File

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

View File

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

View File

@ -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);
}

View File

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

View File

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

View File

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

View File

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

View File

@ -74,6 +74,10 @@ html {
}
}
.session-help {
padding:5px;
}
.big-dark-help {
font-size:20px;
color: $ColorTextTypical;

View File

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

View File

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

View File

@ -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();

View File

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

View File

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