Beispiel #1
0
        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;
            }
        }