예제 #1
0
        public static SteinbergFrequency ToSteinbergFrequency(this FabfilterProQ eq)
        {
            var frequency = new SteinbergFrequency();

            // Frequency only support lowcut on the 1st band and highcut on the 8th band
            bool hasLowCutBand  = eq.Bands.Any(band => band.Shape == ProQShape.LowCut);
            bool hasHighCutBand = eq.Bands.Any(band => band.Shape == ProQShape.HighCut);

            // get remaining bands that are not lowcut or highcut and sort by frequency
            var band2To7 = eq.Bands.Where(b => b.Enabled)
                           .Where(b => b.Shape != ProQShape.LowCut)
                           .Where(b => b.Shape != ProQShape.HighCut)
                           .OrderBy(s => s.Frequency);

            if (hasLowCutBand)
            {
                int bandNumber = 1;
                var lowCutBand = eq.Bands.Where(band => band.Shape == ProQShape.LowCut)
                                 .OrderBy(s => s.Frequency).ElementAt(0);

                SetBand(lowCutBand, bandNumber, frequency);
            }

            if (hasHighCutBand)
            {
                int bandNumber  = 8;
                var highCutBand = eq.Bands.Where(band => band.Shape == ProQShape.HighCut)
                                  .OrderByDescending(s => s.Frequency).ElementAt(0);

                SetBand(highCutBand, bandNumber, frequency);
            }

            // rest of the bands (2-7)
            int startIndex = hasLowCutBand ? 2 : 1;
            int endIndex   = hasHighCutBand ? 7 : 8;
            int index      = 0;

            for (int bandNumber = startIndex; bandNumber <= endIndex; bandNumber++, index++)
            {
                var band = band2To7.ElementAtOrDefault(index);
                SetBand(band, bandNumber, frequency);
            }

            return(frequency);
        }
        public static SteinbergFrequency ToSteinbergFrequency(this AbletonEq8 eq)
        {
            var frequency = new SteinbergFrequency();

            foreach (var band in eq.Bands)
            {
                if (band.Parameter.Equals("ParameterA"))
                {
                    int bandNumber = band.Number + 1; // zero indexed
                    frequency.Parameters[String.Format("equalizerAbandon{0}", bandNumber)].Number = band.IsOn ? 1.00 : 0.00;
                    frequency.Parameters[String.Format("equalizerAgain{0}", bandNumber)].Number   = band.Gain;
                    frequency.Parameters[String.Format("equalizerAfreq{0}", bandNumber)].Number   = band.Freq;
                    frequency.Parameters[String.Format("equalizerAq{0}", bandNumber)].Number      = band.Q;

                    switch (band.Mode)
                    {
                    case AbletonEq8.BandMode.LowCut48:
                        frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.Cut48;
                        break;

                    case AbletonEq8.BandMode.LowCut12:
                        frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.Cut12;
                        break;

                    case AbletonEq8.BandMode.LeftShelf:
                        if (bandNumber == 1 || bandNumber == 8)
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.LowShelf;
                        }
                        else
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode2To7.LowShelf;
                        }
                        break;

                    case AbletonEq8.BandMode.Bell:
                        if (bandNumber == 1 || bandNumber == 8)
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.Peak;
                        }
                        else
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode2To7.Peak;
                        }
                        break;

                    case AbletonEq8.BandMode.Notch:
                        if (bandNumber == 1 || bandNumber == 8)
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.Notch;
                        }
                        else
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode2To7.Notch;
                        }
                        break;

                    case AbletonEq8.BandMode.RightShelf:
                        if (bandNumber == 1 || bandNumber == 8)
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.HighShelf;
                        }
                        else
                        {
                            frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode2To7.HighShelf;
                        }
                        break;

                    case AbletonEq8.BandMode.HighCut12:
                        frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.Cut12;
                        break;

                    case AbletonEq8.BandMode.HighCut48:
                        frequency.Parameters[String.Format("equalizerAtype{0}", bandNumber)].Number = SteinbergFrequency.BandMode1And8.Cut48;
                        break;
                    }

                    Log.Debug(band.ToString());
                }
            }

            return(frequency);
        }
예제 #3
0
        /// <summary>
        /// Initialize a VstPreset using a byte array and guid
        /// </summary>
        /// <param name="presetBytes">preset bytes</param>
        /// <param name="guid">plugin guid</param>
        /// <param name="pluginName">optional plugin name (only used for error messages)</param>
        /// <returns>a VstPreset object</returns>
        public static T GetVstPreset <T>(byte[] presetBytes, string guid, string pluginName = null) where T : VstPreset
        {
            VstPreset preset = null;

            switch (guid)
            {
            case VstPreset.VstIDs.SteinbergCompressor:
                preset = new SteinbergCompressor();
                break;

            case VstPreset.VstIDs.SteinbergFrequency:
                preset = new SteinbergFrequency();
                break;

            case VstPreset.VstIDs.SteinbergREVerence:
                preset = new SteinbergREVerence();
                break;

            case VstPreset.VstIDs.FabFilterProQ:
            case VstPreset.VstIDs.FabFilterProQx64:
                preset        = new FabfilterProQ();
                preset.Vst3ID = guid;
                break;

            case VstPreset.VstIDs.FabFilterProQ2:
            case VstPreset.VstIDs.FabFilterProQ2x64:
                preset        = new FabfilterProQ2();
                preset.Vst3ID = guid;
                break;

            case VstPreset.VstIDs.NIKontakt5:
                preset = new NIKontakt5();
                break;

            case VstPreset.VstIDs.NIKontakt6:
                preset = new NIKontakt6();
                break;

            case VstPreset.VstIDs.NIKontakt6_64out:
                preset = new NIKontakt6_64out();
                break;

            case VstPreset.VstIDs.EastWestPlay:
                preset = new EastWestPlay();
                break;

            default:
                preset        = new SteinbergVstPreset();
                preset.Vst3ID = guid;
                break;
            }

            preset.Parameters.Clear();
            preset.CompDataStartPos  = 0;
            preset.CompDataChunkSize = presetBytes.Length;
            preset.ContDataStartPos  = presetBytes.Length;
            preset.ContDataChunkSize = 0;
            preset.InfoXmlStartPos   = presetBytes.Length;

            try
            {
                preset.ReadData(new BinaryFile(presetBytes, BinaryFile.ByteOrder.LittleEndian, Encoding.ASCII), (UInt32)presetBytes.Length, false);

                if (preset.Vst3ID == VstPreset.VstIDs.SteinbergREVerence)
                {
                    // init wave paths and images from the parameters
                    var reverence = preset as SteinbergREVerence;
                    reverence.InitFromParameters();
                }

                else if (preset.Vst3ID == VstPreset.VstIDs.FabFilterProQ ||
                         preset.Vst3ID == VstPreset.VstIDs.FabFilterProQx64)
                {
                    // init variables from the parameters or FXP object
                    var fabFilterProQ = preset as FabfilterProQ;
                    fabFilterProQ.InitFromParameters();
                }

                else if (preset.Vst3ID == VstPreset.VstIDs.FabFilterProQ2 ||
                         preset.Vst3ID == VstPreset.VstIDs.FabFilterProQ2x64)
                {
                    // init variables from the parameters or FXP object
                    var fabFilterProQ2 = preset as FabfilterProQ2;
                    fabFilterProQ2.InitFromParameters();
                }

                else if (preset.Vst3ID == VstPreset.VstIDs.FabFilterProQ3)
                {
                    // init variables from the parameters or FXP object
                    var fabFilterProQ3 = preset as FabfilterProQ3;
                    fabFilterProQ3.InitFromParameters();
                }
            }
            catch (System.Exception e)
            {
                Log.Error("Failed initializing VstPreset using guid: {0}{1}. (Hex dump: {2}) {3}", guid, pluginName != null ? " and name " + pluginName : "", StringUtils.ToHexEditorString(presetBytes), e.Message);
            }

            return(preset as T);
        }
예제 #4
0
        private static void SetBand(ProQBand band, int bandNumber, SteinbergFrequency frequency)
        {
            if (band != null)
            {
                frequency.Parameters[String.Format("equalizerAbandon{0}", bandNumber)].Number = band.Enabled ? 1.00 : 0.00;

                string channel = ""; // empty for main channel (channel 1). 'Ch2' for secondary channel

                // due to the way fabfilter have only one stereo placement per band (frequency has two) we need to modify both channels in frequency
                // we could have in theory instead updated both channels per band in frequency
                if (band.StereoPlacement != ProQStereoPlacement.Stereo)
                {
                    switch (band.StereoPlacement)
                    {
                    case ProQStereoPlacement.LeftOrMid:
                        frequency.Parameters[String.Format("equalizerAon{0}", bandNumber)].Number    = 1.0;
                        frequency.Parameters[String.Format("equalizerAon{0}Ch2", bandNumber)].Number = 0.0;

                        if (band.ChannelMode == ProQChannelMode.LeftRight)
                        {
                            frequency.Parameters[String.Format("equalizerAeditchannel{0}", bandNumber)].Number = SteinbergFrequency.ChannelMode.LeftRightModeLeft;
                        }
                        else
                        {
                            frequency.Parameters[String.Format("equalizerAeditchannel{0}", bandNumber)].Number = SteinbergFrequency.ChannelMode.MidSideModeMid;
                        }
                        break;

                    case ProQStereoPlacement.RightOrSide:
                        frequency.Parameters[String.Format("equalizerAon{0}", bandNumber)].Number    = 0.0;
                        frequency.Parameters[String.Format("equalizerAon{0}Ch2", bandNumber)].Number = 1.0;
                        channel = "Ch2";

                        if (band.ChannelMode == ProQChannelMode.LeftRight)
                        {
                            frequency.Parameters[String.Format("equalizerAeditchannel{0}", bandNumber)].Number = SteinbergFrequency.ChannelMode.LeftRightModeRight;
                        }
                        else
                        {
                            frequency.Parameters[String.Format("equalizerAeditchannel{0}", bandNumber)].Number = SteinbergFrequency.ChannelMode.MidSideModeSide;
                        }
                        break;

                    case ProQStereoPlacement.Stereo:
                        // don't change - this is the default
                        break;
                    }
                }

                frequency.Parameters[String.Format("equalizerAgain{0}{1}", bandNumber, channel)].Number = band.Gain;
                frequency.Parameters[String.Format("equalizerAfreq{0}{1}", bandNumber, channel)].Number = band.Frequency;
                frequency.Parameters[String.Format("equalizerAq{0}{1}", bandNumber, channel)].Number    = band.Q;

                switch (band.Shape)
                {
                case ProQShape.Bell:
                    if (bandNumber == 1 || bandNumber == 8)
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Peak;
                    }
                    else
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode2To7.Peak;
                    }
                    break;

                case ProQShape.LowShelf:
                    if (bandNumber == 1 || bandNumber == 8)
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.LowShelf;
                    }
                    else
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode2To7.LowShelf;
                    }
                    break;

                case ProQShape.LowCut:
                    switch (band.LPHPSlope)
                    {
                    case ProQLPHPSlope.Slope6dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut6;
                        break;

                    case ProQLPHPSlope.Slope12dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut12;
                        break;

                    case ProQLPHPSlope.Slope24dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut24;
                        break;

                    case ProQLPHPSlope.Slope48dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut48;
                        break;
                    }
                    break;

                case ProQShape.HighShelf:
                    if (bandNumber == 1 || bandNumber == 8)
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.HighShelf;
                    }
                    else
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode2To7.HighShelf;
                    }
                    break;

                case ProQShape.HighCut:
                    switch (band.LPHPSlope)
                    {
                    case ProQLPHPSlope.Slope6dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut6;
                        break;

                    case ProQLPHPSlope.Slope12dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut12;
                        break;

                    case ProQLPHPSlope.Slope24dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut24;
                        break;

                    case ProQLPHPSlope.Slope48dB_oct:
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Cut48;
                        break;
                    }
                    break;

                case ProQShape.Notch:
                    if (bandNumber == 1 || bandNumber == 8)
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode1And8.Notch;
                    }
                    else
                    {
                        frequency.Parameters[String.Format("equalizerAtype{0}{1}", bandNumber, channel)].Number = SteinbergFrequency.BandMode2To7.Notch;
                    }
                    break;
                }

                Log.Debug(band.ToString());
            }
            else
            {
                // disable band
                frequency.Parameters[String.Format("equalizerAbandon{0}", bandNumber)].Number = 0.00;
            }
        }
예제 #5
0
        /// <summary>
        /// Initialize a VstPreset using a file
        /// </summary>
        /// <param name="file">filename</param>
        /// <returns>a VstPreset object</returns>
        public static T GetVstPreset <T>(string file) where T : VstPreset
        {
            VstPreset vstPreset = new SteinbergVstPreset(file);

            VstPreset preset = null;

            switch (vstPreset.Vst3ID)
            {
            case VstPreset.VstIDs.SteinbergCompressor:
                preset            = new SteinbergCompressor();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;
                break;

            case VstPreset.VstIDs.SteinbergFrequency:
                preset            = new SteinbergFrequency();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;
                break;

            case VstPreset.VstIDs.SteinbergREVerence:
                preset            = new SteinbergREVerence();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;

                // init wave paths and images from the parameters
                var reverence = preset as SteinbergREVerence;
                reverence.InitFromParameters();
                break;

            case VstPreset.VstIDs.FabFilterProQ:
            case VstPreset.VstIDs.FabFilterProQx64:
                preset            = new FabfilterProQ();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;

                // init variables from the parameters or FXP object
                var fabFilterProQ = preset as FabfilterProQ;
                fabFilterProQ.InitFromParameters();
                break;

            case VstPreset.VstIDs.FabFilterProQ2:
            case VstPreset.VstIDs.FabFilterProQ2x64:
                preset            = new FabfilterProQ2();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;

                // init variables from the parameters or FXP object
                var fabFilterProQ2 = preset as FabfilterProQ2;
                fabFilterProQ2.InitFromParameters();

                break;

            case VstPreset.VstIDs.FabFilterProQ3:
                preset            = new FabfilterProQ3();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;

                // init variables from the parameters or FXP object
                var fabFilterProQ3 = preset as FabfilterProQ3;
                fabFilterProQ3.InitFromParameters();

                break;

            case VstPreset.VstIDs.WavesSSLChannelStereo:
                VstPreset.Parameter sslChannelXml = null;
                vstPreset.Parameters.TryGetValue("XmlContent", out sslChannelXml);
                if (sslChannelXml != null && sslChannelXml.String != null)
                {
                    List <WavesSSLChannel> channelPresetList = WavesPreset.ParseXml <WavesSSLChannel>(sslChannelXml.String);

                    // a single vstpreset likely (?) only contain one waves ssl preset, use the first
                    preset            = channelPresetList.FirstOrDefault();
                    preset.Parameters = vstPreset.Parameters;
                    preset.FXP        = vstPreset.FXP;
                }
                break;

            case VstPreset.VstIDs.WavesSSLCompStereo:
                VstPreset.Parameter sslCompXml = null;
                vstPreset.Parameters.TryGetValue("XmlContent", out sslCompXml);
                if (sslCompXml != null && sslCompXml.String != null)
                {
                    List <WavesSSLComp> channelPresetList = WavesPreset.ParseXml <WavesSSLComp>(sslCompXml.String);

                    // a single vstpreset likely (?) only contain one waves ssl preset, use the first
                    preset            = channelPresetList.FirstOrDefault();
                    preset.Parameters = vstPreset.Parameters;
                    preset.FXP        = vstPreset.FXP;
                }
                break;

            case VstPreset.VstIDs.NIKontakt5:
                preset            = new NIKontakt5();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;
                break;

            case VstPreset.VstIDs.EastWestPlay:
                preset            = new EastWestPlay();
                preset.Parameters = vstPreset.Parameters;
                preset.FXP        = vstPreset.FXP;
                break;

            default:
                preset = vstPreset;
                break;
            }

            preset.Vst3ID = vstPreset.Vst3ID;

            return(preset as T);
        }