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.");
 }
Exemplo n.º 5
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)
 {
     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];
 }