/// <summary> /// Draws the current selected position. /// </summary> private void DrawCurrentPosition() { var position = AudioStreamHelper.GetPosition(BassPlayer.RawLoopTrack); BeginInvoke((MethodInvoker) delegate { var oldBitmap = picWaveForm.Image; var bitmap = new Bitmap(picWaveForm.Width, picWaveForm.Height); if (position >= ZoomStart && position <= ZoomEnd) { var positionPercent = (position - ZoomStart) / (double)ZoomLength; var x = Convert.ToInt32(Math.Round(positionPercent * picWaveForm.Width, 0)); using (var pen = new Pen(Color.Gray)) using (var graphics = Graphics.FromImage(bitmap)) { graphics.Clear(Color.Black); graphics.DrawLine(pen, x, 0, x, picWaveForm.Height - 1); } } bitmap.MakeTransparent(Color.Black); picWaveForm.Image = bitmap; oldBitmap?.Dispose(); }); }
/// <summary> /// Mutes the track FX. /// </summary> public void StopTrackFxSend() { if (CurrentTrack == null || LastTrackFxTrigger == null || LastTrackFxTriggerTrack == null) { return; } // DebugHelper.WriteLine("Start StopTrackFXSend"); _trackSendMixer.SetVolume(0); // DebugHelper.WriteLine("Calculate TrackFXSend Length"); var position = AudioStreamHelper.GetPosition(LastTrackFxTriggerTrack); var positionSeconds = LastTrackFxTriggerTrack.SamplesToSeconds(position); var length = positionSeconds - LastTrackFxTrigger.Start; if (length <= 0 || position >= LastTrackFxTriggerTrack.FadeOutStart) { length = LastTrackFxTriggerTrack.SamplesToSeconds(LastTrackFxTriggerTrack.FadeOutStart) - LastTrackFxTrigger.Start; } LastTrackFxTrigger.Length = length; // DebugHelper.WriteLine("End StopTrackFXSend"); }
public void StopRecordingManualExtendedMix(bool powerDownAfterFade) { if (CurrentTrack == null) { return; } if (PreviousTrack == null) { return; } if (!IsManualMixMode) { return; } if (PreviousManaulExtendedFadeType == ExtendedFadeType.PowerDown) { return; } CreateLastExtendedMixAttributes(); var attributes = LastExtendedMixAttributes; attributes.FadeEnd = AudioStreamHelper.GetPosition(PreviousTrack); attributes.FadeLength = GetAdjustedPositionSeconds(CurrentTrack); attributes.FadeEndLoop = PreviousTrack.CurrentEndLoop; attributes.FadeEndVolume = Convert.ToSingle(AudioStreamHelper.GetVolume(PreviousTrack) / 100); attributes.PowerDownAfterFade = powerDownAfterFade; if (IsManualMixMode) { RaiseOnEndFadeIn(); } }
private void ApplySyncIfOneExistsForCurrentPosition(AudioStream audioStream) { var position = AudioStreamHelper.GetPosition(audioStream); var sync = GetAudioSync(audioStream, position); if (sync != null && sync.SyncType != SyncType.AudioStreamEvent) { OnSync(sync.Id, audioStream.ChannelId, int.MinValue, IntPtr.Zero); } }
/// <summary> /// Gets the current automated track FX. /// </summary> /// <returns>The current automated track FX.</returns> private SampleTrigger GetCurrentSampleTrigger(AutomationAttributes attributes = null) { if (CurrentTrack == null) { return(null); } if (attributes == null) { attributes = AutomationAttributesHelper.GetAutomationAttributes(CurrentTrack.Description); } var position = AudioStreamHelper.GetPosition(CurrentTrack); return(GetCurrentSampleTriggers(attributes) .OrderBy(t => Math.Abs(t.StartSample - position)) .FirstOrDefault()); }
private void StopRecordingSampleTrigger() { if (CurrentTrack == null || LastSampleTrigger == null || LastSampleTriggerTrack == null) { return; } var position = AudioStreamHelper.GetPosition(LastSampleTriggerTrack); var positionSeconds = LastSampleTriggerTrack.SamplesToSeconds(position); var length = positionSeconds - LastSampleTrigger.Start; if (length <= 0 || position >= LastSampleTriggerTrack.FadeOutStart) { length = LastSampleTriggerTrack.SamplesToSeconds(LastSampleTriggerTrack.FadeOutStart) - LastSampleTrigger.Start; } LastSampleTrigger.Length = length; }
/// <summary> /// Silences the track FX. /// </summary> public void StartTrackFxSend() { _trackSendMixer.SetVolume(50M); if (CurrentTrack == null) { return; } LastTrackFxTriggerTrack = CurrentTrack; var position = AudioStreamHelper.GetPosition(LastTrackFxTriggerTrack); LastTrackFxTrigger = new TrackFXTrigger { Start = LastTrackFxTriggerTrack.SamplesToSeconds(position), DelayNotes = TrackSendFxDelayNotes }; _trackSendMixer.SetPluginBpm(); }
/// <summary> /// Gets the current automated track FX. /// </summary> /// <returns>The current automated track FX.</returns> private TrackFXTrigger GetPrevTrackFxTrigger(AutomationAttributes attributes = null) { if (CurrentTrack == null) { return(null); } if (attributes == null) { attributes = AutomationAttributesHelper.GetAutomationAttributes(CurrentTrack.Description); } var position = AudioStreamHelper.GetPosition(CurrentTrack); return(attributes .TrackFXTriggers .Where(ta => ta.StartSample <= position) .OrderBy(ta => Math.Abs(ta.StartSample - position)) .FirstOrDefault()); }
private void StartRecordingSampleTrigger(Sample sample) { if (CurrentTrack == null) { return; } if (sample == null) { return; } LastSampleTriggerTrack = CurrentTrack; LastSampleTriggerNextTrackDescription = NextTrack == null ? "" : NextTrack.Description; LastSampleTriggerPrevTrackDescription = PreviousTrack == null ? "" : PreviousTrack.Description; var position = AudioStreamHelper.GetPosition(LastSampleTriggerTrack); LastSampleTrigger = new SampleTrigger { Start = LastSampleTriggerTrack.SamplesToSeconds(position), DelayNotes = SamplerDelayNotes, SampleId = sample.SampleId }; }
public void ForceFadeNow(ForceFadeType fadeType) { if (PlayState != PlayState.Playing) { return; } if (NextTrack == null || CurrentTrack == null) { return; } if (fadeType == ForceFadeType.SkipToEnd) { AudioStreamHelper.SetPosition(CurrentTrack, CurrentTrack.FadeOutStart - CurrentTrack.SecondsToSamples(0.01M)); } else { CurrentForceFadeType = fadeType; IsForceFadeNowMode = true; var length = 0D; switch (fadeType) { case ForceFadeType.Cut: length = GetCutFadeLength(CurrentTrack); break; case ForceFadeType.PowerDown: length = GetPowerDownFadeLength(CurrentTrack); CurrentTrack.PowerDownOnEnd = true; break; case ForceFadeType.QuickFade: length = GetCutFadeLength(CurrentTrack); break; case ForceFadeType.SkipToEnd: break; default: throw new ArgumentOutOfRangeException(nameof(fadeType), fadeType, null); } if (CurrentTrack.FadeOutLengthSeconds < length) { length = CurrentTrack.FadeOutLengthSeconds; } CurrentTrack.EndLoopCount = 0; BassMix.BASS_Mixer_ChannelRemoveSync(CurrentTrack.ChannelId, CurrentTrack.FadeOutStartSyncId); CurrentTrack.FadeOutStartSyncId = int.MinValue; BassMix.BASS_Mixer_ChannelRemoveSync(CurrentTrack.ChannelId, CurrentTrack.FadeOutEndSyncId); CurrentTrack.FadeOutEndSyncId = int.MinValue; var position = AudioStreamHelper.GetPosition(CurrentTrack); CurrentTrack.FadeOutStart = position + CurrentTrack.SecondsToSamples(0.05M); SetTrackSync(CurrentTrack, CurrentTrack.FadeOutStart, SyncType.StartFadeOut); CurrentTrack.FadeOutEnd = CurrentTrack.FadeOutStart + CurrentTrack.SecondsToSamples(length); SetTrackSync(CurrentTrack, CurrentTrack.FadeOutEnd, SyncType.EndFadeOut); } }