public void SetDSP(int streamFX , int stream) { StreamFX = streamFX; StreamReverse = BassFx.BASS_FX_ReverseCreate(stream, 2f, BASSFlag.BASS_FX_FREESOURCE); if (_beforePLM != null) _beforePLM.Notification -= new EventHandler(BeforePLMNotification); _beforePLM = new DSP_PeakLevelMeter(StreamFX, 2000); _beforePLM.CalcRMS = true; _beforePLM.Notification += new EventHandler(BeforePLMNotification); if (_afterPLM != null) _afterPLM.Notification -= new EventHandler(AfterPLMNotification); _afterPLM = new DSP_PeakLevelMeter(StreamFX, -2000); _afterPLM.CalcRMS = true; _afterPLM.Notification += new EventHandler(AfterPLMNotification); _gain = new DSP_Gain(StreamFX, 0); _mono = new DSP_Mono(); _mono.ChannelHandle = StreamFX; _mono.DSPPriority = 0; _mono.Invert = MonoInvert; if (MonoChecked) _mono.Start(); else _mono.Stop(); _stereoEnhancer = new DSP_StereoEnhancer(StreamFX, 0); _stereoEnhancer.SetBypass(!StereoEnhancerEnabled); _delay = new DSP_IIRDelay(StreamFX, 0, 2f); _delay.SetBypass(!DelayEnabled); foreach (Band band in TempoBands) { switch (band.Label) { case "Tempo": Bass.BASS_ChannelSetAttribute(StreamFX, BASSAttribute.BASS_ATTRIB_TEMPO, band.Value); break; case "TempoPitch": Bass.BASS_ChannelSetAttribute(StreamFX, BASSAttribute.BASS_ATTRIB_TEMPO_PITCH, band.Value); break; case "TempoFreq": Bass.BASS_ChannelSetAttribute(StreamFX, BASSAttribute.BASS_ATTRIB_TEMPO_FREQ, band.Value); break; } } foreach (Band band in DSPDelayBands) { switch (band.Label) { case "Samples": _delay.Delay = (int)band.Value; break; case "WetDry": _delay.WetDry = band.Value; break; case "Feedback": _delay.Feedback = band.Value; break; } } foreach (Band band in DSPStereoEnhancerBands) { switch (band.Label) { case "WetDry": _stereoEnhancer.WetDry = band.Value; break; case "WideCoef": _stereoEnhancer.WideCoeff = band.Value; break; } } TempoEnableFunc(TempoEnabled); }
private void effectPropertyChanged(object sender, PropertyChangedEventArgs e) { switch(e.PropertyName) { /* DELAY */ case "HasDelay": if (Effects.HasDelay) { /* initalise delay if nessessary */ if (delay == null) { delay = new DSP_IIRDelay(splayer.ActiveStreamHandle, 1, 10); } delay.Start(); } else { delay.Stop(); } break; case "DelaySecs": delay.DelaySeconds = Effects.DelaySecs; delay.Start(); break; /* ECHO */ case "HasEcho": if (Effects.HasEcho) { echoHandle = Bass.BASS_ChannelSetFX(splayer.ActiveStreamHandle, BASSFXType.BASS_FX_DX8_ECHO, 1); } else { Bass.BASS_ChannelRemoveFX(splayer.ActiveStreamHandle, echoHandle); } break; case "EchoFeedback": echo.fFeedback = Effects.EchoFeedback; Bass.BASS_FXSetParameters(echoHandle, echo); break; case "EchoLeftDelay": echo.fLeftDelay = Effects.EchoLeftDelay; Bass.BASS_FXSetParameters(echoHandle, echo); break; case "EchoRightDelay": echo.fRightDelay = Effects.EchoRightDelay; Bass.BASS_FXSetParameters(echoHandle, echo); break; /* DECIMATION */ case "HasDeci": if (Effects.HasDeci) { bitcrushHandle = Bass.BASS_ChannelSetDSP(splayer.ActiveStreamHandle, bitcrush, IntPtr.Zero, 1); deciHandle = Bass.BASS_ChannelSetFX(splayer.ActiveStreamHandle, BASSFXType.BASS_FX_DX8_DISTORTION, 2); } else { Bass.BASS_ChannelRemoveDSP(splayer.ActiveStreamHandle, bitcrushHandle); Bass.BASS_ChannelRemoveFX(splayer.ActiveStreamHandle, deciHandle); } break; case "Bitcrush": bitcrushHandle = Bass.BASS_ChannelSetDSP(splayer.ActiveStreamHandle, bitcrush, IntPtr.Zero, 1); break; case "Decimation": decimate.fEdge = Effects.Decimation; Bass.BASS_FXSetParameters(deciHandle, decimate); break; /* PITCH */ case "HasPitch": if (!Effects.HasPitch) { /* reset to default values */ Bass.BASS_ChannelSetAttribute(splayer.ActiveStreamHandle, BASSAttribute.BASS_ATTRIB_TEMPO, 1); Bass.BASS_ChannelSetAttribute(splayer.ActiveStreamHandle, BASSAttribute.BASS_ATTRIB_TEMPO_PITCH, 0); } else { Bass.BASS_ChannelSetAttribute(splayer.ActiveStreamHandle, BASSAttribute.BASS_ATTRIB_TEMPO, (float)Effects.TempoShift); Bass.BASS_ChannelSetAttribute(splayer.ActiveStreamHandle, BASSAttribute.BASS_ATTRIB_TEMPO, Effects.PitchShift); } break; case "TempoShift": if (!Bass.BASS_ChannelSetAttribute(splayer.ActiveStreamHandle, BASSAttribute.BASS_ATTRIB_TEMPO, (float)Effects.TempoShift)) { BASSError err = Bass.BASS_ErrorGetCode(); } break; case "PitchShift": if (!Bass.BASS_ChannelSetAttribute(splayer.ActiveStreamHandle, BASSAttribute.BASS_ATTRIB_TEMPO_PITCH, Effects.PitchShift)) { BASSError err = Bass.BASS_ErrorGetCode(); } break; default: /* not important property, do nothing */ break; } }