From 1ce41c5a54ee05bde6549931dd614f6c01dfbf51 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 21 Apr 2015 16:24:10 -0500 Subject: [PATCH 1/3] * VRFS-2605 - refining jamtrack offset values and manifest for audiomixer, and fixnig bug with jamtrack monitoring applied to playcontrols.js by accident --- ruby/lib/jam_ruby/models/mix.rb | 42 +++++++++++-------- .../assets/javascripts/playbackControls.js | 2 +- web/app/assets/javascripts/session.js | 7 ++++ 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/ruby/lib/jam_ruby/models/mix.rb b/ruby/lib/jam_ruby/models/mix.rb index 2036d6081..9dfeff6d8 100644 --- a/ruby/lib/jam_ruby/models/mix.rb +++ b/ruby/lib/jam_ruby/models/mix.rb @@ -139,6 +139,8 @@ module JamRuby jam_track_offset = 0 jam_track_seek = 0 + was_jamtrack_played = false + if recording.timeline recording_timeline_data = JSON.parse(recording.timeline) @@ -148,27 +150,31 @@ module JamRuby jam_track_play_start_time = recording_timeline_data["jam_track_play_start_time"] jam_track_recording_start_play_offset = recording_timeline_data["jam_track_recording_start_play_offset"] - # how long did the JamTrack play? not needed because we limit on the input tracks, which represents how long the recording is, too - jam_track_play_time = recording_timeline_data["jam_track_play_time"] + if jam_track_play_start_time != 0 + was_jamtrack_played = true - if jam_track_recording_start_play_offset < 0 && jam_track_isplaying - # we don't know how to handle this ! alert ops - AdminMailer.alerts({subject: "negative jam_track_recording_start_play_offset mix.id=#{self.id}"}) - jam_track_recording_start_play_offset = 0 - end + # how long did the JamTrack play? not needed because we limit on the input tracks, which represents how long the recording is, too + jam_track_play_time = recording_timeline_data["jam_track_play_time"] - offset = jam_track_play_start_time - recording_start_time + if jam_track_recording_start_play_offset < 0 && jam_track_isplaying + # we don't know how to handle this ! alert ops + AdminMailer.alerts({subject: "negative jam_track_recording_start_play_offset mix.id=#{self.id}"}) + jam_track_recording_start_play_offset = 0 + end - if offset >= 0 - # jamtrack started after recording, so buffer with silence as necessary - jam_track_offset = offset - jam_track_seek = jam_track_seek + jam_track_recording_start_play_offset - else - # jamtrack started before recording, so we can seek into it to make up for the missing parts - jam_track_seek = -offset + offset = jam_track_play_start_time - recording_start_time - # also, ignore jam_track_recording_start_play_offset - it simply matches the offset in this case + if offset >= 0 + # jamtrack started after recording, so buffer with silence as necessary + jam_track_offset = offset + jam_track_seek = jam_track_seek + jam_track_recording_start_play_offset + else + # jamtrack started before recording, so we can seek into it to make up for the missing parts + jam_track_seek = -offset + # also, ignore jam_track_recording_start_play_offset - it simply matches the offset in this case + + end end end @@ -195,9 +201,9 @@ module JamRuby mix_params << { "level" => 1.0, "balance" => 0 } end - if recording.is_jamtrack_recording? + if was_jamtrack_played 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" => jam_track_offset, "seek" => jam_track_seek } + manifest["files"] << { "filename" => recorded_jam_track_track.jam_track_track.sign_url(one_day, sample_rate=44), "codec" => "vorbis", "offset" => jam_track_offset, "seek" => jam_track_seek } # let's look for level info from the client level = 1.0 # default value - means no effect if recorded_jam_track_track.timeline diff --git a/web/app/assets/javascripts/playbackControls.js b/web/app/assets/javascripts/playbackControls.js index 59a27f022..db088672e 100644 --- a/web/app/assets/javascripts/playbackControls.js +++ b/web/app/assets/javascripts/playbackControls.js @@ -202,7 +202,7 @@ positionMs = 0; } - if(playbackMonitorMode = PLAYBACK_MONITOR_MODE.JAMTRACK) { + if(playbackMonitorMode == PLAYBACK_MONITOR_MODE.JAMTRACK) { if(isPlaying) { $jamTrackGetReady.attr('data-current-time', positionMs) diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index be5fc2738..71982a191 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -535,6 +535,7 @@ var metronomeMasterMixers = getMetronomeMasterMixers(); if (metronomeMixer == null && metronomeMasterMixers.length > 0) { + logger.debug("monitoring metronome") playbackControls.startMonitor(context.JK.PLAYBACK_MONITOR_MODE.METRONOME) } else if (metronomeMixer != null && metronomeMasterMixers.length == 0) { @@ -548,9 +549,11 @@ // if we have a recording open, then don't go into JamTrack monitor mode even if a JamTrack is open if (jamTrack == null && (currentSession && currentSession.jam_track != null && currentSession.claimed_recording == null)) { + logger.debug("monitoring jamtrack") playbackControls.startMonitor(context.JK.PLAYBACK_MONITOR_MODE.JAMTRACK); } else if (jamTrack && (currentSession == null || (currentSession.jam_track == null && currentSession.claimed_recording == null))) { + logger.debug("stop monitoring jamtrack") playbackControls.stopMonitor(); } jamTrack = currentSession == null ? null : currentSession.jam_track; @@ -559,9 +562,11 @@ function checkBackingTrackTransition(currentSession) { // handle backing tracks if (backing_track_path == null && (currentSession && currentSession.backing_track_path != null)) { + logger.debug("monitoring backing track") playbackControls.startMonitor(); } else if (backing_track_path && (currentSession == null || currentSession.backing_track_path == null)) { + logger.debug("stop monitoring backing track") playbackControls.stopMonitor(); } backing_track_path = currentSession == null ? null : currentSession.backing_track_path; @@ -573,9 +578,11 @@ if (claimedRecording == null && (currentSession && currentSession.claimed_recording != null)) { // this is a 'started with a claimed_recording' transition. // we need to start a timer to watch for the state of the play session + logger.debug("monitoring recording") playbackControls.startMonitor(); } else if (claimedRecording && (currentSession == null || currentSession.claimed_recording == null)) { + logger.debug("stop monitoring recording") playbackControls.stopMonitor(); } claimedRecording = currentSession == null ? null : currentSession.claimed_recording; From 3181a67bdab1994beffa4e13c22114f8b100852a Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 21 Apr 2015 16:30:40 -0500 Subject: [PATCH 2/3] * VRFS-2605 - prevent close of jamtrack or backing track while recordig --- web/app/assets/javascripts/session.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 71982a191..2b454c8bb 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -2889,6 +2889,12 @@ } function closeBackingTrack() { + + if (sessionModel.recordingModel.isRecording()) { + logger.debug("can't close backing track while recording") + return false; + } + rest.closeBackingTrack({id: sessionModel.id()}) .done(function() { //sessionModel.refreshCurrentSession(true); @@ -2909,9 +2915,13 @@ } function closeJamTrack() { - logger.debug("closing recording"); + if (sessionModel.recordingModel.isRecording()) { + logger.debug("can't close jamtrack while recording") + return false; + } + if(downloadJamTrack) { logger.debug("closing DownloadJamTrack widget") downloadJamTrack.root.remove(); From 67c9f5d89106b334a14ab3eb6e131405f8f4495f Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 21 Apr 2015 16:34:57 -0500 Subject: [PATCH 3/3] * VRFS-2605 - automatically stop recording if jamtrack is playing --- web/app/assets/javascripts/session.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index 2b454c8bb..bbd4ee70f 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -2889,7 +2889,7 @@ } function closeBackingTrack() { - + if (sessionModel.recordingModel.isRecording()) { logger.debug("can't close backing track while recording") return false; @@ -2991,6 +2991,11 @@ function onPause(e, data) { logger.debug("calling jamClient.SessionStopPlay. endReached:", data.endReached); + // if a JamTrack is open, and the user hits 'pause', we need to automatically stop the recording + if(sessionModel.jamTracks() && sessionModel.recordingModel.isRecording()) { + startStopRecording(); + } + if(!data.endReached) { context.jamClient.SessionStopPlay(); }