This commit is contained in:
Seth Call 2015-02-25 16:13:04 -06:00
parent dbaeb8d996
commit ca9e3706c7
5 changed files with 95 additions and 7 deletions

View File

@ -141,12 +141,35 @@ module JamRuby
recording.recorded_tracks.each do |recorded_track|
manifest["files"] << { "filename" => recorded_track.sign_url(one_day), "codec" => "vorbis", "offset" => 0 }
mix_params << { "level" => 100, "balance" => 0 }
mix_params << { "level" => 1.0, "balance" => 0 }
end
recording.recorded_backing_tracks.each do |recorded_backing_track|
manifest["files"] << { "filename" => recorded_backing_track.sign_url(one_day), "codec" => "vorbis", "offset" => 0 }
mix_params << { "level" => 100, "balance" => 0 }
mix_params << { "level" => 1.0, "balance" => 0 }
end
recording.recorded_jam_track_tracks.each do |recorded_jam_track_track|
manifest["files"] << { "filename" => recorded_jam_track_track.jam_track_track.sign_url(one_day), "codec" => "vorbis", "offset" => 0 }
# let's look for level info from the client
level = 1.0 # default value - means no effect
if recorded_jam_track_track.timeline
timeline_data = JSON.parse(recorded_jam_track_track.timeline)
# always take the 1st entry for now
first = timeline_data[0]
if first["mute"]
# mute equates to no noise
level = 0.0
else
# otherwise grab the left channel...
level = first["vol_l"]
end
end
mix_params << { "level" => level, "balance" => 0 }
end
manifest["timeline"] << { "timestamp" => 0, "mix" => mix_params }

View File

@ -20,7 +20,8 @@
e.stopPropagation();
var $fader = $(this);
var sessionModel = window.JK.CurrentSessionModel || null;
var mediaControlsDisabled = $fader.data('media-controls-disabled');
if(mediaControlsDisabled) {
var mediaTrackOpener = $fader.data('media-track-opener');
@ -28,11 +29,16 @@
return false;
}
if(sessionModel && sessionModel.areControlsLockedForJamTrackRecording() && $control.closest('.session-track').data('track_data').type == 'jam_track') {
window.JK.prodBubble($fader, 'jamtrack-controls-disabled', {}, {positions:['top'], offsetParent: $fader.closest('.screen')})
return false;
}
if($fader.data('showHelpAboutMediaMixers')) {
if(window.JK.CurrentSessionModel) {
if(!window.JK.CurrentSessionModel.hasShownAudioMediaMixerHelp()) {
if(sessionModel) {
if(!sessionModel.hasShownAudioMediaMixerHelp()) {
window.JK.prodBubble($fader, 'volume-media-mixers', {}, {positions:['top'], offsetParent: $fader.closest('.screen')})
window.JK.CurrentSessionModel.markShownAudioMediaMixerHelp()
sessionModel.markShownAudioMediaMixerHelp()
}
}
}
@ -138,10 +144,16 @@
var mediaControlsDisabled = $draggingFaderHandle.data('media-controls-disabled');
var mediaTrackOpener = $draggingFaderHandle.data('media-track-opener');
var sessionModel = window.JK.CurrentSessionModel || null;
if(mediaControlsDisabled) {
return false;
}
if(sessionModel && sessionModel.areControlsLockedForJamTrackRecording() && $draggingFaderHandle.closest('.session-track').data('track_data').type == 'jam_track') {
return false;
}
return true;
}

View File

@ -249,6 +249,7 @@
$(sessionModel.recordingModel)
.on('startingRecording', function(e, data) {
displayStartingRecording();
lockControlsforJamTrackRecording();
})
.on('startedRecording', function(e, data) {
if(data.reason) {
@ -294,13 +295,16 @@
{
displayStartedRecording();
displayWhoCreated(data.clientId);
lockControlsforJamTrackRecording();
}
})
.on('stoppingRecording', function(e, data) {
displayStoppingRecording(data);
unlockControlsforJamTrackRecording();
})
.on('stoppedRecording', function(e, data) {
unlockControlsforJamTrackRecording();
if(sessionModel.selfOpenedJamTracks()) {
var timeline = context.jamClient.getJamTrackTimeline();
@ -1776,6 +1780,7 @@
}
var template = $('#template-session-track').html();
var newTrack = $(context.JK.fillTemplate(template, trackData));
newTrack.data('track_data', trackData)
var audioOverlay = $('.disabled-track-overlay', newTrack);
var $trackIconMute = newTrack.find('.track-icon-mute')
$trackIconMute.muteSelector().on(EVENTS.MUTE_SELECTED, trackMuteSelected)
@ -1818,6 +1823,7 @@
var template = $('#template-session-track').html();
var newTrack = $(context.JK.fillTemplate(template, trackData));
newTrack.data('track_data', trackData);
$otherAudioContainer.append(newTrack);
if(trackData.preMasteredClass) {
context.JK.helpBubble($('.track-instrument', newTrack), 'pre-processed-track', {}, {offsetParent: newTrack.closest('.content-body')});
@ -2059,6 +2065,11 @@
return false;
}
if(sessionModel.areControlsLockedForJamTrackRecording() && $control.closest('.session-track').data('track_data').type == 'jam_track') {
context.JK.prodBubble($control, 'jamtrack-controls-disabled', {}, {positions:['bottom'], offsetParent: $control.closest('.screen')})
return false;
}
if($control.data('showHelpAboutMediaMixers')) {
if(!sessionModel.hasShownAudioMediaMixerHelp()) {
context.JK.prodBubble($control, 'volume-media-mixers', {}, {positions:['bottom'], offsetParent: $control.closest('.screen')})
@ -2066,6 +2077,8 @@
}
}
$.each(mixerIds, function(i,v) {
var mixerId = v;
// behavior: if this is the user's track in personal mode, then we mute the track globally
@ -2297,6 +2310,14 @@
$('#recording-status').text("Make a Recording");
}
function lockControlsforJamTrackRecording() {
sessionModel.lockControlsforJamTrackRecording();
}
function unlockControlsforJamTrackRecording() {
sessionModel.unlockControlsforJamTrackRecording();
}
function displayWhoCreated(clientId) {
if(app.clientId != clientId) { // don't show to creator
sessionModel.findUserBy({clientId: clientId})
@ -2657,6 +2678,18 @@
}
function startStopRecording() {
// check first if a jamtrack is loaded, and playing; if so, tell user to stop the play
if(sessionModel.jamTracks() && context.jamClient.isSessionTrackPlaying()) {
app.notify(
{ title: "Can't Recording a Play JamTrack",
text: "Stop the JamTrack before trying to recording." },
null,
true);
return;
}
if(sessionModel.recordingModel.isRecording()) {
sessionModel.recordingModel.stopRecording();
}

View File

@ -37,6 +37,7 @@
var previousBackingTracks = [];
var openBackingTrack = null;
var shownAudioMediaMixerHelp = false;
var controlsLockedForJamTrackRecording = false;
var mixerMode = MIX_MODES.PERSONAL;
@ -157,6 +158,18 @@
return inSession;
}
function lockControlsforJamTrackRecording() {
controlsLockedForJamTrackRecording = true;
}
function unlockControlsforJamTrackRecording() {
controlsLockedForJamTrackRecording = false;
}
function areControlsLockedForJamTrackRecording() {
return controlsLockedForJamTrackRecording;
}
function onMixerModeChanged(newMixerMode)
{
mixerMode = newMixerMode;
@ -357,6 +370,7 @@
previousBackingTracks = []
openBackingTrack = null
shownAudioMediaMixerHelp = false
controlsLockedForJamTrackRecording = false;
}
// you should only update currentSession with this function
@ -836,6 +850,9 @@
this.isPersonalMixMode = isPersonalMixMode;
this.getMixMode = getMixMode;
this.selfOpenedJamTracks = selfOpenedJamTracks;
this.areControlsLockedForJamTrackRecording = areControlsLockedForJamTrackRecording;
this.lockControlsforJamTrackRecording = lockControlsforJamTrackRecording;
this.unlockControlsforJamTrackRecording = unlockControlsforJamTrackRecording;
// ALERT HANDLERS
this.onBackendMixerChanged = onBackendMixerChanged;

View File

@ -199,6 +199,9 @@ script type="text/template" id="template-help-media-controls-disabled"
| Only the person who opened the recording can control the volume levels.
| {% } %}
script type="text/template" id="template-help-jamtrack-controls-disabled"
| During a recording, volume and mute controls for JamTracks are disabled. So, get the session volume levels right before starting the recording.
script type="text/template" id="template-help-volume-media-mixers"
| Audio files only expose master mix controls, so any change here will also affect everyone in the session.