VRFS-4107 - more tweaks to jamclass student page

This commit is contained in:
Seth Call 2016-05-22 08:29:59 -05:00
parent f9cecdd0f0
commit 2c6e3cac92
19 changed files with 294 additions and 183 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -137,7 +137,8 @@
VIDEO_WINDOW_OPENED :49, //video window opened
VIDEO_WINDOW_CLOSED :50,
VST_CHANGED: 51, // VST state changed
LAST_ALERT : 52
SAMPLERATE_CONFIGURATION_BAD: 52,
LAST_ALERT : 53
}
// recreate eThresholdType enum from MixerDialog.h
context.JK.ALERT_TYPES = {
@ -202,7 +203,8 @@
49: {"title": "", "message": ""}, // VIDEO_WINDOW_OPENED
50: {"title": "", "message": ""}, // VIDEO_WINDOW_CLOSED
51: {"title": "", "message": ""}, // VST_CHANGED
52: {"title": "", "message": ""} // LAST_ALERT
52: {"title": "", "message": ""}, // SAMPLERATE_CONFIGURATION_BAD
53: {"title": "", "message": ""} // LAST_ALERT
};
// add the alert's name to the ALERT_TYPES structure

View File

@ -101,6 +101,29 @@
helpBubble.clearJamTrackGuide = clearJamTrackGuideTimeout;
helpBubble.ftueStep2Instructions = function ($element, $offsetParent) {
context.JK.prodBubble($element, 'ftue-step-2-instructions', {}, bigHelpDarkOptions({positions:['top'], width:180, duration:10000, offsetParent: $offsetParent}))
}
// is also instructions bubble
helpBubble.ftueStep3ConfigTracks = function ($element, $offsetParent) {
context.JK.prodBubble($element, 'ftue-step-3-config-tracks', {}, bigHelpDarkOptions({positions:['top'], duration:10000, offsetParent: $offsetParent}))
}
helpBubble.ftueStep4Instructions = function ($element, $offsetParent) {
context.JK.prodBubble($element, 'ftue-step-4-instructions', {}, bigHelpDarkOptions({positions:['top'], width:180, duration:5000, offsetParent: $offsetParent}))
}
helpBubble.ftueStep5Instructions = function ($element, $offsetParent) {
context.JK.prodBubble($element, 'ftue-step-5-instructions', {}, bigHelpDarkOptions({positions:['top'], width:180, duration:5000, offsetParent: $offsetParent}))
}
helpBubble.ftueStep2SampleRate = function ($element, $offsetParent) {
context.JK.prodBubble($element, 'ftue-step-2-sample-rate', {}, bigHelpDarkOptions({positions:['top'], duration:10000, width:180, offsetParent: $offsetParent}))
}
helpBubble.jamtrackGuideTile = function ($element, $offsetParent) {
jamTrackGuide(function() {
context.JK.prodBubble($element, 'jamtrack-guide-tile', {}, bigHelpOptions({positions:['top'], offsetParent: $offsetParent}))

View File

@ -16,8 +16,8 @@ ConfigureTracksStore = @ConfigureTracksStore
inputOneOptions = []
inputTwoOptions = []
defaultSelectionOne = `<option key="" value="">Select an input port for this track (required)</option>`
defaultSelectionTwo = `<option key="" value="">Select an input port for this track (optional)</option>`
defaultSelectionOne = `<option key="" value="">None</option>`
defaultSelectionTwo = `<option key="" value="">None</option>`
inputOneOptions.push(defaultSelectionOne)
inputTwoOptions.push(defaultSelectionTwo)
@ -101,10 +101,10 @@ ConfigureTracksStore = @ConfigureTracksStore
<div className="audio-input-ports">
<h3>Audio Input Ports</h3>
<p>Select one or two inputs ports to assign to this track. Note that if you assign a single input port, the app will automatically duplicate this port into a stereo track.</p>
<select className="input-one" name="input-one" onChange={this.inputChanged} value={inputOneValue}>
<select className="input-one input-selectors" name="input-one" onChange={this.inputChanged} value={inputOneValue}>
{inputOneOptions}
</select>
<select className="input-two" name="input-two" onChange={this.inputChanged} value={inputTwoValue}>
<select className="input-two input-selectors" name="input-two" onChange={this.inputChanged} value={inputTwoValue}>
{inputTwoOptions}
</select>
</div>
@ -261,6 +261,7 @@ ConfigureTracksStore = @ConfigureTracksStore
if audioInput2 == ''
audioInput2 = null
logger.debug("ConfigureLiveTracksDialog: ", audioInput1, audioInput2)
if audioInput1? && audioInput1 == audioInput2
e.preventDefault()
# TODO: tell user they can't do this
@ -349,6 +350,12 @@ ConfigureTracksStore = @ConfigureTracksStore
unless $manageAudioPlugins.data('initialized')
$manageAudioPlugins.manageVsts().on(context.JK.EVENTS.VST_OPERATION_SELECTED, @vstOperation).data('initialized', true)
if true # easyDropdown support
context.JK.dropdown($root.find('select'))
$root.find('select.input-selectors').unbind('change').change(@inputChanged)
$root.find('select.instrument-pick').unbind('change').change(@instrumentSelected)
$root.find('select.vsts').unbind('change').change(@vstsChanged)
trackTypeChanged: (event) ->
if @ignoreICheck

View File

@ -332,8 +332,7 @@ rest = context.JK.Rest()
<li>Windows 7 or a later version
</li>
<li>Mac OS X 10.7 or a later version<br/>
<a className="how-do-i" href="https://support.apple.com/en-us/HT201948" target="_blank">how do I know
which version I'm running and if it's 64-bit on Mac?</a>
<a className="how-do-i" href="https://support.apple.com/en-us/HT201948" target="_blank">how do I know which version I'm running?</a>
</li>
</ul>
</li>
@ -349,7 +348,7 @@ rest = context.JK.Rest()
audio interface is a hardware product that connects to your computer and processes audio better than your
computer alone. If you already own/use an audio interface, you can use the one you have. And if you don't,
please <a href="https://jamkazam.desk.com/customer/en/portal/topics/564807-gear-recommendations/articles"
target="_blank">refer to this set of help articles that recommend the best gear based on your instruments and/or vocals</a>. You can pick up a perfectly good interface very inexpensively, typically for less than $50. And you can
target="_blank">refer to this set of help articles</a> that recommend the best gear based on your instruments and/or vocals. You can pick up a perfectly good interface very inexpensively, typically for less than $50. And you can
use your new interface not just for JamClass, but also to make home recordings of your performances, and also to play in online JamKazam sessions with other musicians. So
it's a great thing to have for any musician.
</p>

View File

@ -38,13 +38,11 @@ rest = context.JK.Rest()
<p>If you're ready to sign up for TestDrive, just scroll back up to the top of this page, and sign up. Once
you've done this, there are three more things to do:</p>
<ol>
<li>Search for the 4 instructors who look best for you, and sign up for a TestDrive lesson with each of
them.
</li>
<li>Search for the instructor(s) who look best for you, and book your lesson with him or her.</li>
<li>Plug in your credit card info to pay for your TestDrive</li>
<li>Work with a JamKazam staff person, who will give you all the 1:1 help you need to get set up for online
lessons.
</li>
<li>Plug in your credit card info to pay for your TestDrive</li>
</ol>
<p>While you're getting this done, if you want to learn more about all the nifty features you can access in
JamClass and in JamKazam in general, you can check out our online <a href="" target="_blank"
@ -78,7 +76,7 @@ rest = context.JK.Rest()
Following are some of the top features of JamClass by JamKazam.</p>
<div className="testimonials jam-class">
<h3>JamClass Kudos</h3>
<h3>Testimonials</h3>
<div className="testimonial">
<img src="/assets/landing/Julie Bonk - Jam Class - Speech Bubble.png"
@ -344,8 +342,7 @@ rest = context.JK.Rest()
<li>Windows 7 or a later version
</li>
<li>Mac OS X 10.7 or a later version<br/>
<a className="how-do-i" href="https://support.apple.com/en-us/HT201948" target="_blank">how do I know
which version I'm running and if it's 64-bit on Mac?</a>
<a className="how-do-i" href="https://support.apple.com/en-us/HT201948" target="_blank">how do I know which version I'm running?</a>
</li>
</ul>
</li>
@ -361,7 +358,7 @@ rest = context.JK.Rest()
audio interface is a hardware product that connects to your computer and processes audio better than your
computer alone. If you already own/use an audio interface, you can use the one you have. And if you don't,
please <a href="https://jamkazam.desk.com/customer/en/portal/topics/564807-gear-recommendations/articles"
target="_blank">refer to this set of help articles that recommend the best gear based on your instruments and/or vocals</a>. You can pick up a perfectly good interface very inexpensively, typically for less than $50. And you can
target="_blank">refer to this set of help articles</a> that recommend the best gear based on your instruments and/or vocals. You can pick up a perfectly good interface very inexpensively, typically for less than $50. And you can
use your new interface not just for JamClass, but also to make home recordings of your performances, and also to play in online JamKazam sessions with other musicians. So
it's a great thing to have for any musician.
</p>
@ -372,15 +369,6 @@ rest = context.JK.Rest()
roll online! Just email us at support@jamkazam.com, and tell us you need help getting set up for JamClass. We
do this all the time.
</p>
<p>
Here is a video that shows more about how JamClass works from a student's perspective:
<div className="video-wrapper">
<div className="video-container">
<iframe src="//www.youtube.com/embed/07zJC7C2ICA" frameborder="0" allowfullscreen="allowfullscreen"/>
</div>
</div>
</p>
</div>
<div className="row awesome jam-class">
<h2 className="awesome">We Have Fabulous Teachers, Check Them Out!</h2>

View File

@ -256,8 +256,7 @@ rest = context.JK.Rest()
<li>Windows 7 or a later version
</li>
<li>Mac OS X 10.7 or a later version<br/>
<a className="how-do-i" href="https://support.apple.com/en-us/HT201948" target="_blank">how do I know
which version I'm running and if it's 64-bit on Mac?</a>
<a className="how-do-i" href="https://support.apple.com/en-us/HT201948" target="_blank">how do I know which version I'm running?</a>
</li>
</ul>
</li>
@ -273,7 +272,7 @@ rest = context.JK.Rest()
audio interface is a hardware product that connects to your computer and processes audio better than your
computer alone. If you already own/use an audio interface, you can use the one you have. And if you don't,
please <a href="https://jamkazam.desk.com/customer/en/portal/topics/564807-gear-recommendations/articles"
target="_blank">refer to this set of help articles that recommend the best gear based on your instruments and/or vocals</a>. You can pick up a perfectly good interface very inexpensively, typically for less than $50. And you can
target="_blank">refer to this set of help articles</a> that recommend the best gear based on your instruments and/or vocals. You can pick up a perfectly good interface very inexpensively, typically for less than $50. And you can
use your new interface not just for JamClass, but also to make home recordings of your performances, and also to play in online JamKazam sessions with other musicians. So
it's a great thing to have for any musician.
</p>

View File

@ -13,8 +13,12 @@
var configureTracksHelper = new context.JK.ConfigureTracksHelper(app);
var $step = null;
var $watchVideoBtn = null;
var successfullyAssignedOnce = false;
var wizard = null;
var firstTime = true;
var helpTimeout = null;
function handleHelp() {
return "https://jamkazam.desk.com/customer/en/portal/articles/2400702-using-the-setup-wizard-%E2%80%93-step-3-%E2%80%93-configure-tracks"
@ -28,6 +32,9 @@
successfullyAssignedOnce = true;
}
*/
if (helpTimeout) {
clearTimeout(helpTimeout);
}
return context.ConfigureTracksStore.editingTrackValid()
}
@ -40,11 +47,25 @@
window.ConfigureTracksActions.reset(false);
//configureTracksHelper.reset(forceInputsToUnassigned, wizard.getChosenInputs())
prodInstructions();
}
function prodInstructions() {
if (firstTime && !helpTimeout) {
helpTimeout = setTimeout(function() {
helpTimeout = null
firstTime = false;
context.JK.HelpBubbleHelper.ftueStep3ConfigTracks($watchVideoBtn)
}, 2000)
}
}
function initialize(_$step, _wizard) {
$step = _$step;
wizard = _wizard;
$watchVideoBtn = $step.find('.watch-video')
configureTracksHelper.initialize($step);
}

View File

@ -19,9 +19,12 @@
var voiceChatHelper = new context.JK.VoiceChatHelper(app);
var firstTimeShown = false;
var $watchVideoBtn = null;
var firstTime = true;
var helpTimeout = null;
function handleHelp() {
return "https://jamkazam.desk.com/customer/portal/articles/1599963-first-time-setup---step-4---configure-voice-chat";
return "https://jamkazam.desk.com/customer/en/portal/articles/2400826-using-the-setup-wizard-%E2%80%93-step-4-%E2%80%93-configure-voice-chat";
}
function newSession() {
@ -34,6 +37,8 @@
voiceChatHelper.reset(forceDisabledChat);
voiceChatHelper.beforeShow();
firstTimeShown = false;
prodInstructions()
}
function beforeHide() {
@ -41,14 +46,32 @@
}
function handleNext() {
if (helpTimeout) {
clearTimeout(helpTimeout);
}
return true;
}
function prodInstructions() {
if (firstTime && !helpTimeout) {
helpTimeout = setTimeout(function() {
helpTimeout = null
firstTime = false;
context.JK.HelpBubbleHelper.ftueStep5Instructions($watchVideoBtn)
}, 2000)
}
}
function initialize(_$step) {
$step = _$step;
voiceChatHelper.initialize($step, 'configure_voice_gear_wizard', true, {vuType: "vertical", lightCount: 8, lightWidth: 3, lightHeight: 10}, 101);
$watchVideoBtn = $step.find('.watch-video')
}
this.handleHelp = handleHelp;

View File

@ -13,6 +13,9 @@
var isPlaying = false;
var playCheckInterval = null;
var trackDurationMs = null;
var $watchVideoBtn = null;
var firstTime = true;
var helpTimeout = null;
function checkIfPlaying() {
var currentPositionMs = context.jamClient.SessionCurrrentPlayPosMs();
@ -59,11 +62,13 @@
}
function handleHelp() {
return "https://jamkazam.desk.com/customer/portal/articles/1599967-first-time-setup---step-5---turn-off-direct-monitoring";
return "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";
}
function handleNext() {
if (helpTimeout) {
clearTimeout(helpTimeout);
}
}
function newSession() {
@ -76,6 +81,7 @@
if(!context.jamClient.SessionAddPlayTrack("skin:jktest-audio.wav")) {
context.JK.alertSupportedNeeded('Unable to open test sound');
}
prodInstructions()
}
function beforeHide() {
@ -108,6 +114,18 @@
})
}
function prodInstructions() {
if (firstTime && !helpTimeout) {
helpTimeout = setTimeout(function() {
helpTimeout = null
firstTime = false;
context.JK.HelpBubbleHelper.ftueStep4Instructions($watchVideoBtn)
}, 2000)
}
}
function initialize(_$step) {
$step = _$step;
@ -115,6 +133,7 @@
$directMonitoringBtn.on('click', togglePlay);
$adjustSettingsDirectMonitor = $step.find('.adjust-settings-direct-monitor');
$adjustSettingsDirectMonitor.on('click', onAdjustGearRequested)
$watchVideoBtn = $step.find('.watch-video')
}
this.handleHelp = handleHelp;

View File

@ -27,9 +27,11 @@
// the goal of lastFailureAnalytics and trackedPass are to send only a single AudioTest 'Pass' or 'Failed' event, per FTUE wizard open/close
var lastFailureAnalytics = {};
var trackedPass = false;
var firstTime = true;
var helpTimeout = null;
var passedOnce = false;
var $watchVideoInput = null;
var $watchVideoOutput = null;
var $watchVideoBtn = null;
var $audioInput = null;
var $audioOutput = null;
var $inputChannels = null;
@ -185,6 +187,21 @@
// ensure 1, or preferably 2, input channels are selected
var $assignedInputs = $inputChannels.find('input[type="checkbox"]:checked');
var $unassignedInputs = $inputChannels.find('input[type="checkbox"]:not(:checked)');
logger.debug("marking all unassigned inputs length=(" + $allInputs.length + ")")
var maxTries = 20;
for(var i = 0; i < maxTries; i++) {
$unassignedInputs = $inputChannels.find('input[type="checkbox"]:not(:checked)');
if($unassignedInputs.length == 0) {
break;
}
$unassignedInputs.eq(0).iCheck('check').attr('checked', 'checked');
}
/**
if ($assignedInputs.length == 0) {
if ($allInputs.length >= 2) {
logger.debug("selecting 2 inputs")
@ -197,7 +214,9 @@
logger.debug("selecting 1 inputs")
$unassignedInputs.eq(0).iCheck('check').attr('checked', 'checked');
}
}
logger.debug("selecting 1 inputs")
$unassignedInputs.eq(0).iCheck('check').attr('checked', 'checked');
}*/
var $allOutputs = $outputChannels.find('input[type="checkbox"]');
@ -248,6 +267,9 @@
return newAssignment;
}
function setUIToBackendState() {
}
function reassignInputChannels() {
assertFTUEProfile();
var $assignedInputs = $inputChannels.find('input[type="checkbox"]:checked');
@ -309,6 +331,7 @@
}, 1);
}
function outputChannelChanged() {
if (iCheckIgnore) return;
var $checkbox = $(this);
@ -342,8 +365,12 @@
var $inputChannel = $(context._.template($templateAudioPort.html(), inputChannel, { variable: 'data' }));
var $checkbox = $inputChannel.find('input');
if (gearUtils.isChannelAssigned(inputChannel)) {
logger.debug("channel is assigned", inputChannel)
$checkbox.attr('checked', 'checked');
}
else {
logger.debug("channel is not assigned", inputChannel)
}
context.JK.checkbox($checkbox);
$checkbox.on('ifChanged', inputChannelChanged);
$inputChannels.append($inputChannel);
@ -487,49 +514,7 @@
iCheckIgnore = false;
}
function initializeWatchVideo() {
$watchVideoInput.unbind('click').click(function () {
var audioDevice = findDevice(selectedAudioInput());
if (!audioDevice) {
context.JK.Banner.showAlert('You must first choose an Audio Input Device so that we can determine which video to show you.');
}
else {
var videoURL = AUDIO_DEVICE_BEHAVIOR[audioDevice.type].videoURL;
if (videoURL) {
$(this).attr('href', videoURL);
return true;
}
else {
context.JK.Banner.showAlert('No help video for this type of device (' + audioDevice.displayType + ')');
}
}
return false;
});
$watchVideoOutput.unbind('click').click(function () {
var audioDevice = findDevice(selectedAudioOutput());
if (!audioDevice) {
throw "this button should be hidden";
}
else {
var videoURL = AUDIO_DEVICE_BEHAVIOR[audioDevice.type].videoURL;
if (videoURL) {
$(this).attr('href', videoURL);
return true;
}
else {
context.JK.Banner.showAlert('No help video for this type of device (' + audioDevice.displayType + ')');
}
}
return false;
});
}
function invalidateScore() {
gearTest.invalidateScore();
@ -829,18 +814,6 @@
jamClient.FTUESetOutputLatency(frameBuffers.selectedBufferOut());
jamClient.FTUESetFrameSize(frameBuffers.selectedFramesize());
// prod user to watch video if the previous type and new type changed
if(!shownInputProdOnce && isInputAudioTypeDifferentFromLastTime()) {
context.JK.prodBubble($watchVideoInput, 'ftue-watch-video', {}, {positions:['top', 'right']});
shownInputProdOnce = true;
}
// prod user to watch video if the previous type and new type changed
if(!shownOutputProdOnce && isOutputAudioTypeDifferentFromLastTime()) {
context.JK.prodBubble($watchVideoOutput, 'ftue-watch-video', {}, {positions:['top', 'right']});
shownOutputProdOnce = true;
}
// further, check if we have both inputs and outputs defined; if so, show ? to allow launch of adjust gear settings dialog
if(modUtils.getGear('show_frame_options')) {
$adjustSettingsLink.show();
@ -907,13 +880,8 @@
// deal with watch video
if(isInputOutputDifferentTypes()) {
// if we have two types of devices, you need two different videos
$watchVideoOutput.show().find('.video-type').show();
$watchVideoInput.addClass('audio-output-showing').find('.video-type').show();
}
else {
$watchVideoOutput.hide();
$watchVideoInput.removeClass('audio-output-showing').find('.video-type').hide();
}
// handle framesize/buffers
@ -1109,12 +1077,7 @@
}
function handleHelp() {
if(operatingSystem == "Win32") {
return "https://jamkazam.desk.com/customer/portal/articles/1599818-first-time-setup---step-2---select-and-test-audio-gear---windows-";
}
else {
return "https://jamkazam.desk.com/customer/portal/articles/1599845-first-time-setup---step-2---select-and-test-audio-gear---mac";
}
return "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"
}
function handleNext() {
@ -1158,11 +1121,59 @@
savedProfile = true;
}
}
if (!passedOnce) {
passedOnce = true;
autoAssignToSingleInput();
}
// keep the shared state between step 2 and step 3 up-to-date
wizard.setChosenInputs(context._.map($assignedInputs, function(input) { return $(input).attr('data-id') }));
if (helpTimeout) {
clearTimeout(helpTimeout);
}
$sampleRate.btOff()
return true;
}
function autoAssignToSingleInput() {
var $allInputs = $inputChannels.find('input[type="checkbox"]')
if ($allInputs.length == 0) {
logger.debug("no inputs; bailing autoAssignToSingleInput")
return;
}
var $unassignedInputs = $inputChannels.find('input[type="checkbox"]:not(:checked)')
$allInputs.eq(0).iCheck('check').attr('checked', 'checked')
var firstInputDomNode = $allInputs.get(0)
var maxTries = 20;
for(var i = 0; i < maxTries; i++) {
var $assignedInputs = $inputChannels.find('input[type="checkbox"]:checked')
if ($assignedInputs.length == 1) {
break;
}
else {
$assignedInputs.each(function(index, item) {
var $node = $(item)
if ($node.get(0) == firstInputDomNode) {
logger.debug("skipping firstInputDomNode")
}
else {
// the goal of this loop is to just uncheck one. once it's done that, it breaks the loop, so that assigned can be fetched again
$node.iCheck('uncheck').removeAttr('checked')
return false;
}
})
}
}
}
function onFocus() {
if(validDevice && !loopbackShowing && !adjustGearSettingsShowing && !gearTest.isScoring() && getSelectedInputs().length > 0 && getSelectedOutputs().length == 2 ) {
//scheduleRescanSystem(function() { attemptScore(true); }, 3000, false)
@ -1178,7 +1189,6 @@
resetState();
initializeFormElements();
initializeNextButtonState();
initializeWatchVideo();
initializeASIOButtons();
initializeResync();
}
@ -1192,6 +1202,7 @@
$(window).on('focus', onFocus);
context.JK.onBackendEvent(ALERT_NAMES.USB_CONNECTED, 'select-gear', onUsbDeviceConnected);
context.JK.onBackendEvent(ALERT_NAMES.USB_DISCONNECTED, 'select-gear', onUsbDeviceDisconnected);
context.JK.onBackendEvent(ALERT_NAMES.SAMPLERATE_CONFIGURATION_BAD, 'select-gear', onSampleRateBad)
initializeNextButtonState();
context.JK.onBackendEvent(ALERT_NAMES.AUDIO_DEVICE_NOT_PRESENT, 'gear_test', gearTest.onInvalidAudioDevice);
@ -1200,6 +1211,24 @@
scheduleRescanSystem(null, 3000, true);
initialScan = true;
}
else {
initializeChannels();
}
prodInstructions();
}
function prodInstructions() {
if (firstTime && !helpTimeout) {
helpTimeout = setTimeout(function() {
helpTimeout = null
firstTime = false;
context.JK.HelpBubbleHelper.ftueStep2Instructions($watchVideoBtn)
}, 2000)
}
}
function beforeHide() {
@ -1207,6 +1236,7 @@
logger.debug("unregistering focus watch")
context.JK.offBackendEvent(ALERT_NAMES.USB_CONNECTED, 'select-gear', onUsbDeviceConnected);
context.JK.offBackendEvent(ALERT_NAMES.USB_DISCONNECTED, 'select-gear', onUsbDeviceDisconnected);
context.JK.offBackendEvent(ALERT_NAMES.SAMPLERATE_CONFIGURATION_BAD, 'select-gear', onSampleRateBad)
$(window).off('focus', onFocus);
context.JK.offBackendEvent(ALERT_NAMES.AUDIO_DEVICE_NOT_PRESENT, 'gear_test', gearTest.onInvalidAudioDevice);
}
@ -1223,6 +1253,10 @@
updateDeviceList();
}
function onSampleRateBad() {
context.JK.HelpBubbleHelper.ftueStep2SampleRate($sampleRate, $sampleRate.closest('.dialog'))
}
function updateDeviceList() {
if(gearTest.isScoring()) {
queueUpdateDeviceList = true;
@ -1254,8 +1288,7 @@
$step = _$step;
wizard = _wizard;
$watchVideoInput = $step.find('.watch-video.audio-input');
$watchVideoOutput = $step.find('.watch-video.audio-output');
$watchVideoBtn = $step.find('.watch-video');
$audioInput = $step.find('.select-audio-input-device');
$audioOutput = $step.find('.select-audio-output-device');
$templateDeviceNotValid = $('#device-not-valid');

View File

@ -9,7 +9,7 @@
var operatingSystem;
function handleHelp() {
return "https://jamkazam.desk.com/customer/portal/articles/1599817-first-time-setup---step-1";
return "https://jamkazam.desk.com/customer/en/portal/articles/2400684-using-the-setup-wizard-%E2%80%93-step-1-%E2%80%93-understanding-your-gear";
}
function beforeShow() {

View File

@ -68,7 +68,7 @@ html {
}
a {
color:$latencyBadgeFair;
color:black !important;
}
}
@ -146,6 +146,12 @@ html {
}
.ftue-step-2-instructions, .ftue-step-4-instructions, .ftue-step-5-instructions {
width:180px;
}
.ftue-step-2-sample-rate {
width:180px;
}
.help-hover-recorded-tracks, .help-hover-stream-mix, .help-hover-recorded-backing-tracks {

View File

@ -110,7 +110,7 @@
width: 25%;
}
.watch-video.audio-input {
.watch-video.audio-input, .watch-video {
margin-top: 29px;
&.audio-output-showing {
@ -292,7 +292,7 @@
}
.watch-video {
margin-top: 114px;
margin-top: 54px;
}
.ftue-box.chat-inputs {
@ -658,11 +658,16 @@
.wizard-step.success {
.wizard-step-content .wizard-step-column {
&:nth-of-type(1) {
width: 50%;
width: 100%;
padding:2% 20%;
height: 350px;
}
&:nth-of-type(2) {
width: 50%;
width: 0%;
}
.congrats-sig {
text-align:right;
}
ul {

View File

@ -61,7 +61,7 @@
margin-bottom:40px;
padding:10px;
select {
select, .easydropdown-wrapper {
width: 90%;
@include border_box_sizing;
margin-bottom:10px;
@ -79,7 +79,7 @@
float:left;
margin-bottom:26px;
padding:10px;
select {
select, .easydropdown-wrapper {
width:90%;
}
}
@ -93,7 +93,7 @@
position:relative;
width:50%;
select {
select, .easydropdown-wrapper {
width:80%;
margin-bottom:10px;
}
@ -108,7 +108,7 @@
float:left;
margin-bottom:26px;
padding:10px;
select {
select, .easydropdown-wrapper {
width:80%;
}
}
@ -123,7 +123,7 @@
width:50%;
clear:both;
select {
select, .easydropdown-wrapper {
width:80%;
margin-bottom:10px;
}
@ -154,7 +154,7 @@
padding:10px;
position:relative;
select {
select, .easydropdown-wrapper {
width:90%;
margin-bottom:20px;
}

View File

@ -717,6 +717,11 @@ body.web.individual_jamtrack {
&.student {
top:541px;
.cta-button {
width:70%;
margin-left:15%;
}
}
}
@ -796,6 +801,7 @@ body.web.individual_jamtrack {
padding: 10px;
display: block;
width: 100%;
border-radius:8px;
border: 1px outset buttonface;
font-family: Raleway, Arial, Helvetica, sans-serif;
@ -903,21 +909,7 @@ body.web.individual_jamtrack {
}
}
.cta-button {
font-size: 24px;
color: white;
background-color: $cta-color;
text-align: center;
padding: 10px;
display: block;
width: 100%;
border: 1px outset buttonface;
font-family: Raleway, Arial, Helvetica, sans-serif;
@include layout-small {
font-size:30pt;
}
}
.privacy-policy {
text-decoration: underline;

View File

@ -37,19 +37,19 @@ script type="text/template" id="template-help-high-latency-notice"
p
| If you are unable to get your audio gear latency below 20 milliseconds, you can click NEXT to proceed through setup with a high-latency audio profile. This will allow you to play with JamTracks and backing tracks, but not play with others.&nbsp;
p
a href="https://jamkazam.desk.com/customer/portal/articles/1520627-my-audio-gear-won-t-pass-latency-or-i-o-tests" rel="external" Click here
a 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" Click here
| &nbsp;for more troubleshooting tips to speed up your audio gear setup.
| {% } else if(data.additional == 'macosx-builtin') { %}
p.gear-specific-latency-notice Tip: Insert your headphones on a Mac to bring your latency down, and click the RESYNC button to try again.
p
| If you are unable to get your audio gear latency below 20 milliseconds, you can click NEXT to proceed through setup with a high-latency audio profile. This will allow you to play with JamTracks and backing tracks, but not play with others.&nbsp;
p
a href="https://jamkazam.desk.com/customer/portal/articles/1520627-my-audio-gear-won-t-pass-latency-or-i-o-tests" rel="external" Click here
a 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" Click here
| &nbsp;for more troubleshooting tips to speed up your audio gear setup.
| {% } else { %}
p.general-info
| Your computer and interface are processing audio too slowly to play online in real-time sessions with other musicians over the Internet. You may click NEXT to proceed through setup to play alone in sessions with JamTracks or backing tracks, or if you want to improve your speed score to play online,&nbsp;
a href="https://jamkazam.desk.com/customer/portal/articles/1520627-my-audio-gear-won-t-pass-latency-or-i-o-tests" rel="external" click here
a 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" click here
| &nbsp;for a troubleshooting article.
| {% } %}
@ -440,4 +440,28 @@ script type="text/template" id="template-help-side-didnt-find-teacher"
input.phonenumber type="text" placeholder="Callback number"
.textarea-wrapper
textarea.note placeholder="Write a note here explaining what you need in your teacher..."
a.post-help.button-orange SEND NOTE
a.post-help.button-orange SEND NOTE
script type="text/template" id="template-help-ftue-step-3-config-tracks"
.ftue-step-3-config-tracks.big-dark-help
p Please click here for detailed instructions to successfully complete this setup step. These instructions will help you avoid wasted time and frustration.
script type="text/template" id="template-help-ftue-step-2-instructions"
.ftue-step-2-instructions.big-dark-help
p Please click here for detailed instructions to successfully complete this setup step. These instructions will help you avoid wasted time and frustration.
script type="text/template" id="template-help-ftue-step-2-sample-rate"
.ftue-step-2-sample-rate.big-dark-help
p
| Your sample rate settings are currently in conflict.&nbsp;
a href="https://jamkazam.desk.com/customer/en/portal/articles/2407165-i-need-to-make-sure-my-audio-sample-rates-match" rel="external" Click here
| &nbsp;for instructions to correct this.
script type="text/template" id="template-help-ftue-step-4-instructions"
.ftue-step-4-instructions.big-dark-help
p Please click here for detailed instructions to successfully complete this setup step.
script type="text/template" id="template-help-ftue-step-5-instructions"
.ftue-step-5-instructions.big-dark-help
p Please click here for detailed instructions to successfully complete this setup step.

View File

@ -8,10 +8,7 @@
.clearall
.help-text
Please click the Watch Video button below to see a video explaining the different kinds of gear setups you can use with JamKazam.
We strongly advise that you watch the instructional videos that are made available at each step of this first-time setup process.
It will take a few minutes, but it will save you a
%strong lot
of time and trouble.
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
@ -31,14 +28,8 @@
%li Configure interface settings.
%li View test results.
.center
%a.button-orange.watch-video.audio-input{href:'#', rel:'external'}
WATCH VIDEO
%br
%span.video-type (FOR INPUT DEVICE)
%a.button-orange.watch-video.audio-output{href:'#', rel:'external'}
WATCH VIDEO
%br
%span.video-type (FOR OUTPUT DEVICE)
%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'}
INSTRUCTIONS
.wizard-step-column
%h2 Audio Input Device
%select.w100.select-audio-input-device
@ -85,15 +76,15 @@
.wizard-step{ 'layout-wizard-step' => "3", 'dialog-title' => "Configure Voice Chat", 'dialog-purpose' => "ConfigureVoiceChat" }
.ftuesteps
.clearall
.help-text In this step, you may set up a microphone to use for voice chat. Please watch the video for best instructions.
.help-text In this step, you may set up a microphone to use for voice chat if needed.
.wizard-step-content
.wizard-step-column
%h2 Instructions
.ftue-box.instructions
%p Determine if you need to set up a voice chat input.
%p If you do, then assign the audio input to use to capture voice chat.
%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://www.youtube.com/watch?v=f7niycdWm7Y', rel:'external'} WATCH VIDEO
%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
.wizard-step-column
%h2.sub-header Select Voice Chat Option
%form.voice
@ -104,7 +95,7 @@
.voicechat-option.use-chat-input
%input{type:"radio", name: "voicechat"}
%h3 Use Chat Microphone
%p I am not using a microphone for acoustic instruments or vocals, so use the input selected to the right for voice chat during my sessions
%p I am not using a microphone for acoustic instruments or vocals, so use the input selected below for voice chat during my sessions
.clearall
// .wizard-step-column
%h2.sub-header.voice-chat-header Voice Chat Input
@ -120,20 +111,20 @@
.wizard-step{ 'layout-wizard-step' => "4", 'dialog-title' => "Turn Off Direct Monitoring", 'dialog-purpose' => "DirectMonitoring" }
.ftuesteps
.clearall
.help-text In this step, you will ensure that any direct monitoring control on your audio interface is turned off. Please watch the video for best instructions.
.help-text In this step, you will ensure that any direct monitoring feature on your audio interface is turned off.
.wizard-step-content
.wizard-step-column
%h2 Instructions
.ftue-box.instructions
%p Find the Direct Monitoring control on your audio interface.
%ul
%li If a button, push it into its off position.
%li If a knob, turn it so that 100% of audio is from your computer, and 0% is from the direct monitor.
%li Find the Direct Monitoring control on your audio interface.
%li If a button or switch, set it to off position.
%li If a knob, turn it so 100% of audio is from your computer, and 0% is from inputs.
%li
= "If audio is poor try "
%a.adjust-settings-direct-monitor{'href'=>'#'}tweaking your settings
.center
%a.button-orange.watch-video{href:'https://www.youtube.com/watch?v=-nC-D3JBHnk', rel:'external'} WATCH VIDEO
%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
.wizard-step-column
.help-content
When you have fully turned off the direct monitoring control (if any) on your audio interface,
@ -151,7 +142,7 @@
%span.direct-monitoring-btn Play
-step=4
-if (Rails.application.config.video_available && Rails.application.config.video_available!="none")
-if (false && Rails.application.config.video_available && Rails.application.config.video_available!="none")
.wizard-step.video-gear{ 'layout-wizard-step' => "#{step+=1}", 'dialog-title' => "Set Up Video Gear", 'dialog-purpose' => "SelectVideoGear" }
.ftuesteps
.clearall
@ -167,31 +158,10 @@
.clearall
.wizard-step-content
.wizard-step-column
%p Congratulations! You are now ready to create, join, and play in online sessions with other JamKazam musicians!
%p Please feel free to watch any of the videos to the right for information on how to connect and play with other musicians, and how to get the most out of JamKazam. When you're ready to go, click the Close button.
%p Have fun and thanks for joining us!
%p — Team JamKazam
%p Congratulations! You are now ready to create, join, and play in online sessions with other JamKazam musicians. Have fun and thanks for joining us!
%p.congrats-sig — Team JamKazam
.wizard-step-column
%h2 Tutorial Videos
%ul
%li
%a{href: 'https://www.youtube.com/watch?v=EZZuGcDUoWk', rel: 'external'} Creating a Session
%li
%a{href: 'https://www.youtube.com/watch?v=xWponSJo-GU', rel: 'external'} Finding a Session
%li
%a{href: 'https://www.youtube.com/watch?v=zJ68hA8-fLA', rel: 'external'} Playing in a Session
%li
%a{href: '#'} Connecting with Other Musicians
%li
%a{href: '#'} Making and Sharing Recordings
%li
%a{href: '#'} Broadcasting Your Sessions
%h2 Other Valuable Resource Links
%ul
%li
%a{href: 'https://jamkazam.desk.com/', rel: 'external'} JamKazam Support Center
%li
%a{href: 'http://forums.jamkazam.com', rel: 'external'} JamKazam Community Forum
.wizard-buttons
%script{type: 'text/template', id: 'template-ftuesteps'}
@ -207,7 +177,7 @@
%a.ftue-stepnumber{'data-step-number' => 4} 5
.ftue-step-title Turn Off Direct Monitoring
-step = 4
-if (Rails.application.config.video_available && Rails.application.config.video_available!="none")
-if (false && Rails.application.config.video_available && Rails.application.config.video_available!="none")
%a.ftue-stepnumber{'data-step-number' => step+=1}=step+1
.ftue-step-title Select Video Gear
-if (Rails.application.config.network_test_required)

View File

@ -16,8 +16,8 @@
br
| Our TestDrive program lets you:
ul
li Take a full lesson from 4 different teachers for just $49.99 each, or
li Take a full lesson from 2 different teachers for just $29.99 each, or
li Take a full lesson from 4 different teachers for just $12.49 each, or
li Take a full lesson from 2 different teachers for just $14.99 each, or
li Take a full lesson from 1 teacher for just $14.99
p.bump Then continue your lessons with the best teacher for you!
p.bump Join 40,000+ other musicians in the JamKazam community. Sign up for TestDrive today, and you'll be eligible for any of the three special offers above!