private void MyWaveFormCallback(int framesDone, int framesTotal, TimeSpan elapsedTime, bool finished) { if (finished) { _WF.SyncPlayback(_currentTrack.Channel); // and do pre-calculate the next track position // in this example we will only use the end-position long startPos = 0L; long endPos = 0L; if (_WF.GetCuePoints(ref startPos, ref endPos, -24.0, -12.0, true)) { _currentTrack.NextTrackPos = endPos; // if there is already a sync set, remove it first if (_currentTrack.NextTrackSync != 0) { BassMix.BASS_Mixer_ChannelRemoveSync(_currentTrack.Channel, _currentTrack.NextTrackSync); } // set the next track sync automatically _currentTrack.NextTrackSync = BassMix.BASS_Mixer_ChannelSetSync(_currentTrack.Channel, BASSSync.BASS_SYNC_POS | BASSSync.BASS_SYNC_MIXTIME, _currentTrack.NextTrackPos, _currentTrack.TrackSync, new IntPtr(1)); _WF.AddMarker("Next", _currentTrack.NextTrackPos); } } // will be called during rendering... DrawWave(); }
/// <summary> /// Clears the automation sync positions. /// </summary> /// <param name="track">The track.</param> private void ClearAutomationSyncPositions(AudioStream track) { foreach (var trigger in AutomationAttributesHelper.GetAutomationAttributes(track.Description).TrackFXTriggers) { if (trigger.StartSyncId != int.MinValue) { BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.StartSyncId); trigger.StartSyncId = int.MinValue; } if (trigger.EndSyncId == int.MinValue) { continue; } BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.EndSyncId); trigger.EndSyncId = int.MinValue; } foreach (var trigger in GetCurrentSampleTriggers()) { if (trigger.StartSyncId != int.MinValue) { BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.StartSyncId); trigger.StartSyncId = int.MinValue; } if (trigger.EndSyncId == int.MinValue) { continue; } BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.EndSyncId); trigger.EndSyncId = int.MinValue; } }
private static void RemoveSyncFromStream(AudioStream audioStream, AudioSync sync) { if (sync.Id == int.MinValue) { return; } BassMix.BASS_Mixer_ChannelRemoveSync(audioStream.ChannelId, sync.Id); sync.Id = int.MinValue; }
private void pictureBoxWaveForm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (_WF == null) { return; } bool doubleClick = e.Clicks > 1; bool lowerHalf = (e.Y > pictureBoxWaveForm.Height / 2); if (lowerHalf && doubleClick) { ToggleZoom(); } else if (!lowerHalf && e.Button == MouseButtons.Left) { // left button will set the position long pos = _WF.GetBytePositionFromX(e.X, pictureBoxWaveForm.Width, _zoomStart, _zoomEnd); SetEnvelopePos(_currentTrack.Channel, pos); } else if (!lowerHalf) { _currentTrack.NextTrackPos = _WF.GetBytePositionFromX(e.X, pictureBoxWaveForm.Width, _zoomStart, _zoomEnd); // if there is already a sync set, remove it first if (_currentTrack.NextTrackSync != 0) { BassMix.BASS_Mixer_ChannelRemoveSync(_currentTrack.Channel, _currentTrack.NextTrackSync); } // right button will set a next track position sync _currentTrack.NextTrackSync = BassMix.BASS_Mixer_ChannelSetSync(_currentTrack.Channel, BASSSync.BASS_SYNC_POS | BASSSync.BASS_SYNC_MIXTIME, _currentTrack.NextTrackPos, _currentTrack.TrackSync, new IntPtr(1)); _WF.AddMarker("Next", _currentTrack.NextTrackPos); DrawWave(); } }
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); } }