public void Read(string[] description) { ApplyDefault(); for (int x = 0; x < description.Length; x++) { int index = description[x].IndexOf('='); if (index >= 0 && index < description[x].Length) { string paramName = description[x].Substring(0, index).Trim().ToLower(); string paramValue = description[x].Substring(index + 1).Trim(); switch (paramName) { case "delaytime": DelayTime = float.Parse(paramValue); break; case "frequency": Frequency = float.Parse(paramValue); break; case "depth": Depth = float.Parse(paramValue); break; case "type": Generator = GetGenerator(Generator.GetWaveformFromString(paramValue.ToLower())); break; } } } CheckValidParameters(); }
public void QuickSetup(int sampleRate, LfoDescriptor lfoInfo) { generator = lfoInfo.Generator; delayTime = (int)(sampleRate * lfoInfo.DelayTime); frequency = lfoInfo.Frequency; increment = generator.Period * frequency / sampleRate; depth = lfoInfo.Depth; Reset(); }
public int Read(BinaryReader reader) { DelayTime = reader.ReadSingle(); Frequency = reader.ReadSingle(); Depth = reader.ReadSingle(); Generator = GetGenerator((WaveformEnum)reader.ReadInt16()); CheckValidParameters(); return SIZE; }
private static WaveformEnum GetWaveform(Generator gen) { if (gen == Generator.DefaultSaw) return WaveformEnum.Saw; else if (gen == Generator.DefaultSine) return WaveformEnum.Sine; else if (gen == Generator.DefaultSquare) return WaveformEnum.Square; else if (gen == Generator.DefaultTriangle) return WaveformEnum.Triangle; else throw new Exception("Invalid lfo waveform."); }
private void LoadGen(Sf2Region region, AssetManager assets) { SampleDataAsset sda = assets.SampleAssetList[region.Generators[(int)GeneratorEnum.SampleID]]; gen = new SampleGenerator(); gen.EndPhase = sda.End + region.Generators[(int)GeneratorEnum.EndAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.EndAddressCoarseOffset]; gen.Frequency = sda.SampleRate; gen.KeyTrack = region.Generators[(int)GeneratorEnum.ScaleTuning]; gen.LoopEndPhase = sda.LoopEnd + region.Generators[(int)GeneratorEnum.EndLoopAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.EndLoopAddressCoarseOffset]; switch (region.Generators[(int)GeneratorEnum.SampleModes] & 0x3) { case 0x0: case 0x2: gen.LoopMode = LoopModeEnum.NoLoop; break; case 0x1: gen.LoopMode = LoopModeEnum.Continuous; break; case 0x3: gen.LoopMode = LoopModeEnum.LoopUntilNoteOff; break; } gen.LoopStartPhase = sda.LoopStart + region.Generators[(int)GeneratorEnum.StartLoopAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.StartLoopAddressCoarseOffset]; gen.Offset = 0; gen.Period = 1.0; if (region.Generators[(int)GeneratorEnum.OverridingRootKey] > -1) { gen.RootKey = region.Generators[(int)GeneratorEnum.OverridingRootKey]; } else { gen.RootKey = sda.RootKey; } gen.StartPhase = sda.Start + region.Generators[(int)GeneratorEnum.StartAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.StartAddressCoarseOffset]; gen.Tune = (short)(sda.Tune + region.Generators[(int)GeneratorEnum.FineTune] + 100 * region.Generators[(int)GeneratorEnum.CoarseTune]); gen.VelocityTrack = 0; ((SampleGenerator)gen).Samples = sda.SampleData; }
public override void Load(DescriptorList description, AssetManager assets) { gen = description.GenDescriptions[0].ToGenerator(assets); env = description.EnvelopeDescriptions[0]; lfo = description.LfoDescriptions[0]; }
private void LoadGen(Sf2Region region, AssetManager assets) { SampleDataAsset sda = assets.SampleAssetList[region.Generators[(int)GeneratorEnum.SampleID]]; gen = new SampleGenerator(); gen.EndPhase = sda.End + region.Generators[(int)GeneratorEnum.EndAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.EndAddressCoarseOffset]; gen.Frequency = sda.SampleRate; gen.KeyTrack = region.Generators[(int)GeneratorEnum.ScaleTuning]; gen.LoopEndPhase = sda.LoopEnd + region.Generators[(int)GeneratorEnum.EndLoopAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.EndLoopAddressCoarseOffset]; switch (region.Generators[(int)GeneratorEnum.SampleModes] & 0x3) { case 0x0: case 0x2: gen.LoopMode = LoopModeEnum.NoLoop; break; case 0x1: gen.LoopMode = LoopModeEnum.Continuous; break; case 0x3: gen.LoopMode = LoopModeEnum.LoopUntilNoteOff; break; } gen.LoopStartPhase = sda.LoopStart + region.Generators[(int)GeneratorEnum.StartLoopAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.StartLoopAddressCoarseOffset]; gen.Offset = 0; gen.Period = 1.0; if (region.Generators[(int)GeneratorEnum.OverridingRootKey] > -1) gen.RootKey = region.Generators[(int)GeneratorEnum.OverridingRootKey]; else gen.RootKey = sda.RootKey; gen.StartPhase = sda.Start + region.Generators[(int)GeneratorEnum.StartAddressOffset] + 32768 * region.Generators[(int)GeneratorEnum.StartAddressCoarseOffset]; gen.Tune = (short)(sda.Tune + region.Generators[(int)GeneratorEnum.FineTune] + 100 * region.Generators[(int)GeneratorEnum.CoarseTune]); gen.VelocityTrack = 0; ((SampleGenerator)gen).Samples = sda.SampleData; }
public override void Load(DescriptorList description, AssetManager assets) { //read in sfz params CustomDescriptor sfzConfig = description.FindCustomDescriptor("sfzi"); exTarget = (int)sfzConfig.Objects[0]; exGroup = (int)sfzConfig.Objects[1]; sfzVolume = (float)sfzConfig.Objects[2]; sfzPan = new PanComponent((float)sfzConfig.Objects[3], PanFormulaEnum.Neg3dBCenter); ampKeyTrack = (float)sfzConfig.Objects[4]; ampRootKey = (byte)sfzConfig.Objects[5]; ampVelTrack = (float)sfzConfig.Objects[6]; //read in the generator info GeneratorDescriptor gdes = description.GenDescriptions[0]; if (gdes.SamplerType != WaveformEnum.SampleData) throw new Exception("Sfz can only support sample data generators."); gen = gdes.ToGenerator(assets); //read in the envelope info ptch_env = description.EnvelopeDescriptions[0]; fltr_env = description.EnvelopeDescriptions[1]; amp_env = description.EnvelopeDescriptions[2]; //read in the lfo info ptch_lfo = description.LfoDescriptions[0]; fltr_lfo = description.LfoDescriptions[1]; amp_lfo = description.LfoDescriptions[2]; //read in the filter info fltr = description.FilterDescriptions[0]; }
private void ApplyDefault() { DelayTime = 0f; Frequency = (float)Synthesizer.DefaultLfoFrequency; Depth = 1; Generator = Generator.DefaultSine; }
public override void Load(DescriptorList description, AssetManager assets) { CustomDescriptor fmConfig = description.FindCustomDescriptor("fm2c"); cIndex = (double)fmConfig.Objects[0]; mIndex = (double)fmConfig.Objects[1]; feedBack = (double)fmConfig.Objects[2]; sync = GetSyncModeFromString((string)fmConfig.Objects[3]); if (description.GenDescriptions[0].LoopMethod != LoopModeEnum.Continuous || description.GenDescriptions[1].LoopMethod != LoopModeEnum.Continuous) throw new Exception("Fm2 patches must have continuous generators with wrapping bounds."); cGen = description.GenDescriptions[0].ToGenerator(assets); mGen = description.GenDescriptions[1].ToGenerator(assets); cEnv = description.EnvelopeDescriptions[0]; mEnv = description.EnvelopeDescriptions[1]; lfo = description.LfoDescriptions[0]; }