public MixItemViewModel( IMessenger messenger, IMixItem mixItem, PlayPauseTrackCommand playPauseCommand, IMix mix, MixViewModel mixViewModel) : base(messenger) { this.mix = mix; this.mixViewModel = mixViewModel; if (messenger == null) throw new ArgumentNullException("messenger"); if (mixItem == null) throw new ArgumentNullException("mixItem"); if (playPauseCommand == null) throw new ArgumentNullException("playPauseCommand"); if (mix == null) throw new ArgumentNullException("mix"); if (mixViewModel == null) throw new ArgumentNullException("mixViewModel"); MixItem = mixItem; PlayPauseCommand = playPauseCommand; messenger.Register<TransitionChangedEvent>(this, OnTransitionChanged); messenger.Register<PlaybackSpeedAdjustedEvent>(this, OnPlaybackSpeedAdjusted); messenger.Register<TrackUpdatedEvent>(this, OnTrackUpdated); messenger.Register<MixLockedEvent>(this, _ => RaisePropertyChanged(() => IsPitchFaderEnabled)); messenger.Register<MixUnlockedEvent>(this, _ => RaisePropertyChanged(() => IsPitchFaderEnabled)); // Required for play/pause status messenger.Register<PlayerPlayingEvent>(this, _ => RaisePropertyChanged(() => Track)); messenger.Register<PlayerStoppedEvent>(this, _ => RaisePropertyChanged(() => Track)); messenger.Register<ConfigSavedEvent>(this, _ => RaisePropertyChanged(() => ActualKey)); }
public IEnumerable<Tuple<Track, Transition>> GetRecommendations(IMixItem mixItem) { if (mixItem == null) throw new ArgumentNullException("mixItem"); return tracks .Values .Except(new[] {mixItem.Track}) // don't recommend itself! .Select(t => Tuple.Create(t, GetTransition(mixItem, t))) .Where(t => t.Item2 != null); }
static JsonMixItem ToJsonItem(IMixItem item) { return new JsonMixItem { Id = item.Track.Id, Artist = item.Track.Artist, OriginalBpm = item.Track.OriginalBpm, Duration = item.Track.Duration, Filename = item.Track.Filename, Genre = item.Track.Genre, OriginalKey = item.Track.OriginalKey, Label = item.Track.Label, Title = item.Track.Title, Year = item.Track.Year, PlaybackSpeed = item.PlaybackSpeed.Speed }; }
public AutoMixingContext( IEnumerable<IMixItem> tracksToMix, IMixItem preceedingTrack = null, IMixItem followingTrack = null) { if (tracksToMix == null) throw new ArgumentNullException("tracksToMix"); if (preceedingTrack != null && preceedingTrack.IsUnknownKeyOrBpm) throw new ArgumentException("Boundary track cannot have an unknown key or BPM. Please specify null as the starting track instead and try again.", "preceedingTrack"); if (followingTrack != null && followingTrack.IsUnknownKeyOrBpm) throw new ArgumentException("Boundary track cannot have an unknown key or BPM. Please specify null as the starting track instead and try again.", "followingTrack"); if (!tracksToMix.Any()) throw new ArgumentException("Must provide at least one track to mix.", "tracksToMix"); PreceedingTrack = preceedingTrack; TracksToMix = tracksToMix; FollowingTrack = followingTrack; }
public MixItemViewModel CreateFor(IMix mix, IMixItem item, MixViewModel mixViewModel) { return new MixItemViewModel(messenger, item, playPauseCommand, mix, mixViewModel); }
public TransitionChangedEvent(IMixItem mixItem) { if (mixItem == null) throw new ArgumentNullException("mixItem"); MixItem = mixItem; }
public TrackAddedToMixEvent(IMixItem item, int insertIndex) { if (item == null) throw new ArgumentNullException("item"); Item = item; InsertIndex = insertIndex; }
public PlaybackSpeedAdjustedEvent(IMixItem item) { if (item == null) throw new ArgumentNullException("item"); MixItem = item; }
Transition GetTransition(IMixItem mixItem, Track track) { return transitionDetector.GetTransitionBetween(mixItem.PlaybackSpeed, track.GetDefaultPlaybackSpeed()); }
void IgnoreIfUnknownKeyOrBpm(ref IMixItem track) { if (track != null && track.IsUnknownKeyOrBpm) track = null; }
public TrackRemovedFromMixEvent(IMixItem item, int index) { if (item == null) throw new ArgumentNullException("item"); Item = item; Index = index; }