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); }
/// <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); }
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; } }
/// <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); }