Merge branch 'develop' into feature/musician_profile_enhancements

This commit is contained in:
Brian Smith 2015-02-25 21:55:57 -05:00
commit 0c599ca023
4 changed files with 87 additions and 25 deletions

View File

@ -0,0 +1,15 @@
ALTER TABLE recordings ADD COLUMN jam_track_id VARCHAR(64) REFERENCES jam_tracks(id);
ALTER TABLE recordings ADD COLUMN jam_track_initiator_id VARCHAR(64) REFERENCES users(id);
CREATE TABLE recorded_jam_track_tracks (
id BIGINT PRIMARY KEY,
user_id VARCHAR(64) REFERENCES users(id) ON DELETE CASCADE,
jam_track_track_id VARCHAR(64),
recording_id VARCHAR(64) NOT NULL,
discard BOOLEAN,
timeline JSON,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE recorded_jam_tracks ALTER COLUMN id SET DEFAULT nextval('tracks_next_tracker_seq');

View File

@ -0,0 +1,21 @@
module JamRuby
# BackingTrack analog to JamRuby::RecordedTrack
class RecordedJamTrackTrack < ActiveRecord::Base
belongs_to :user, :class_name => "JamRuby::User", :inverse_of => :recorded_jam_track_tracks
belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :recorded_jam_track_tracks
belongs_to :jam_track_track, :class_name => "JamRuby::JamTrackTrack", :inverse_of => :recorded_jam_track_tracks
validates :user, presence: true
validates :jam_track_track, presence:true
def self.create_from_jam_track_track(jam_track_track, recording)
recorded_backing_track = self.new
recorded_backing_track.recording = recording
recorded_backing_track.jam_track_track = jam_track_track
recorded_backing_track.save
recorded_backing_track
end
end
end

View File

@ -1,10 +1,4 @@
Jasmine Javascript Unit Tests
=============================
1. Ensure you have the jasmine Gem installed;
$ bundle
2. Start the jasmine server (defaults to :8888)
$ rake jasmine
Open browser to localhost:8888
Open browser to localhost:3000/teaspoon

View File

@ -890,8 +890,11 @@
var mediaType = mixer.media_type;
var groupId = mixer.group_id;
// mediaType == null is for backwards compat with older clients. Can be removed soon
if(mediaType == null || mediaType == "" || mediaType == 'RecordingTrack') {
if(mediaType == 'MetronomeTrack' || groupId==ChannelGroupIds.MetronomeGroup) {
// Metronomes come across with a blank media type, so check group_id:
metronomeTrackMixers.push(mixer);
}
else if(mediaType == null || mediaType == "" || mediaType == 'RecordingTrack') {
// additional check; if we can match an id in backing tracks or recorded backing track,
// we need to remove it from the recorded track set, but move it to the backing track set
@ -922,9 +925,6 @@
} else if(mediaType == 'PeerMediaTrack' || mediaType == 'BackingTrack') {
// BackingTrack
backingTrackMixers.push(mixer);
} else if(mediaType == 'MetronomeTrack' || groupId==ChannelGroupIds.MetronomeGroup) {
// Metronomes come across with a blank media type, so check group_id:
metronomeTrackMixers.push(mixer);
} else if(mediaType == 'JamTrack') {
jamTrackMixers.push(mixer);
mixer.group_id == ChannelGroupIds.MediaTrackGroup;
@ -1027,7 +1027,12 @@
if(isOpener) {
var oppositeMixer = getMixerByResourceId(mixer.rid, MIX_MODES.PERSONAL);
var mixerId = mixer.id + "," + oppositeMixer.uniqueId
}
else {
var mixerId = mixer.id;
}
var shortFilename = context.JK.getNameOfFile(backingTrack.filename);
if(!sessionModel.isPlayingRecording()) {
@ -1067,7 +1072,7 @@
trackData.gainPercent = gainPercent;
trackData.muteClass = muteClass;
trackData.mixerId = mixer.id + "," + oppositeMixer.uniqueId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.mixerId = mixerId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.vuMixerId = mixer.id; // the master mixer controls the VUs for recordings (no personal controls in either master or personal mode)
trackData.muteMixerId = mixer.id; // the master mixer controls the mute for recordings (no personal controls in either master or personal mode)
trackData.mediaTrackOpener = isOpener;
@ -1132,7 +1137,12 @@
if(isOpener) {
var oppositeMixer = getMixerByResourceId(mixer.rid, MIX_MODES.PERSONAL);
var mixerId = mixer.id + "," + oppositeMixer.uniqueId
}
else {
var mixerId = mixer.id;
}
// Default trackData to participant + no Mixer state.
var trackData = {
trackId: oneOfTheTracks.id,
@ -1156,7 +1166,7 @@
}
trackData.gainPercent = gainPercent;
trackData.muteClass = muteClass;
trackData.mixerId = mixer.id + "," + oppositeMixer.uniqueId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.mixerId = mixerId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.vuMixerId = mixer.id; // the master mixer controls the VUs for recordings (no personal controls in either master or personal mode)
trackData.muteMixerId = mixer.id; // the master mixer controls the mute for recordings (no personal controls in either master or personal mode)
trackData.mediaTrackOpener = isOpener;
@ -1235,8 +1245,13 @@
if(isOpener) {
var oppositeMixer = getMixerByResourceId(mixer.rid, MIX_MODES.PERSONAL);
var mixerId = mixer.id + "," + oppositeMixer.uniqueId
}
else {
var mixerId = mixer.id;
}
// Default trackData to participant + no Mixer state.
var trackData = {
trackId: "MS" + oneOfTheTracks.id,
@ -1261,7 +1276,7 @@
}
trackData.gainPercent = gainPercent;
trackData.muteClass = muteClass;
trackData.mixerId = mixer.id + "," + oppositeMixer.uniqueId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.mixerId = mixerId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.vuMixerId = mixer.id; // the master mixer controls the VUs for recordings (no personal controls in either master or personal mode)
trackData.muteMixerId = mixer.id; // the master mixer controls the mute for recordings (no personal controls in either master or personal mode)
trackData.mediaTrackOpener = isOpener;
@ -1338,6 +1353,10 @@
if(isOpener) {
var oppositeMixer = getMixerByResourceId(mixer.rid, MIX_MODES.PERSONAL);
var mixerId = mixer.id + "," + oppositeMixer.uniqueId
}
else {
var mixerId = mixer.id;
}
// Default trackData to participant + no Mixer state.
@ -1363,7 +1382,7 @@
}
trackData.gainPercent = gainPercent;
trackData.muteClass = muteClass;
trackData.mixerId = mixer.id + "," + oppositeMixer.uniqueId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.mixerId = mixerId; // the master mixer controls the volume control for recordings (no personal controls in either master or personal mode)
trackData.vuMixerId = mixer.id; // the master mixer controls the VUs for recordings (no personal controls in either master or personal mode)
trackData.muteMixerId = mixer.id; // the master mixer controls the mute for recordings (no personal controls in either master or personal mode)
trackData.mediaControlsDisabled = !isOpener;
@ -1961,11 +1980,22 @@
rest.openBackingTrack({id: context.JK.CurrentSessionModel.id(), backing_track_path: result.file})
.done(function(response) {
var openResult = context.jamClient.SessionOpenBackingTrackFile(result.file, false);
//context.JK.CurrentSessionModel.refreshCurrentSession(true);
sessionModel.setBackingTrack(result.file);
if(openResult) {
sessionModel.setBackingTrack(result.file);
}
else {
app.notify({
"title": "Couldn't Open Backing Track",
"text": "Is the file a valid audio file?",
"icon_url": "/assets/content/icon_alert_big.png"
});
closeBackingTrack();
}
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, "Unable to Open BackingTrack For Playback");
app.notifyServerError(jqXHR, "Unable to Open Backing Track For Playback");
})
}
else {
@ -2110,7 +2140,11 @@
context.trackVolumeObject.name = mixer.name;
context.trackVolumeObject.record = mixer.record;
context.trackVolumeObject.volL = mixer.volume_left;
context.trackVolumeObject.volR = mixer.volume_right;
// today we treat all tracks as mono, but this is required to make a stereo track happy
//context.trackVolumeObject.volR = mixer.volume_right;
context.trackVolumeObject.volR = mixer.volume_left;
context.trackVolumeObject.loop = mixer.loop;
// trackVolumeObject doesn't have a place for range min/max
currentMixerRangeMin = mixer.range_low;
@ -2424,8 +2458,6 @@
rest.openMetronome({id: sessionModel.id()})
.done(function() {
context.jamClient.SessionOpenMetronome(120, "Click", 1, 0)
context.JK.CurrentSessionModel.refreshCurrentSession(true)
context.JK.CurrentSessionModel.refreshCurrentSession(true)
})
.fail(function(jqXHR) {
logger.debug(jqXHR, jqXHR)
@ -2487,8 +2519,8 @@
})
.fail(function(jqXHR) {
app.notify({
"title": "Couldn't Close BackingTrack",
"text": "Couldn't inform the server to close BackingTrack. msg=" + jqXHR.responseText,
"title": "Couldn't Close Backing Track",
"text": "Couldn't inform the server to close Backing Track. msg=" + jqXHR.responseText,
"icon_url": "/assets/content/icon_alert_big.png"
});
});