public static float[] CreateTable(int size, WaveformEnum type)
 {
     Generator generator;
     if (type == WaveformEnum.Sine)
         generator = new SineGenerator(new GeneratorDescriptor());
     else if (type == WaveformEnum.Square)
         generator = new SquareGenerator(new GeneratorDescriptor());
     else if (type == WaveformEnum.Triangle)
         generator = new TriangleGenerator(new GeneratorDescriptor());
     else if (type == WaveformEnum.Saw)
         generator = new SawGenerator(new GeneratorDescriptor());
     else if (type == WaveformEnum.WhiteNoise)
         generator = new WhiteNoiseGenerator(new GeneratorDescriptor());
     else
         return null;
     float[] table = new float[size];
     double phase, increment;
     phase = generator.StartPhase;
     increment = generator.Period / size;
     for (int x = 0; x < table.Length; x++)
     {
         table[x] = generator.GetValue(phase);
         phase += increment;
     }
     return table;
 }
 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 "loopmode":
                     LoopMethod = Generator.GetLoopModeFromString(paramValue.ToLower());
                     break;
                 case "type":
                     SamplerType = Generator.GetWaveformFromString(paramValue.ToLower());
                     break;
                 case "assetname":
                     AssetName = paramValue;
                     break;
                 case "endphase":
                     EndPhase = double.Parse(paramValue);
                     break;
                 case "startphase":
                     StartPhase = double.Parse(paramValue);
                     break;
                 case "loopendphase":
                     LoopEndPhase = double.Parse(paramValue);
                     break;
                 case "loopstartphase":
                     LoopStartPhase = double.Parse(paramValue);
                     break;
                 case "offset":
                     Offset = double.Parse(paramValue);
                     break;
                 case "period":
                     Period = double.Parse(paramValue);
                     break;
                 case "keycenter":
                 case "rootkey":
                     Rootkey = short.Parse(paramValue);
                     break;
                 case "keytrack":
                     KeyTrack = short.Parse(paramValue);
                     break;
                 case "velocitytrack":
                     VelTrack = short.Parse(paramValue);
                     break;
                 case "tune":
                     Tune = short.Parse(paramValue);
                     break;
             }
         }
     }
 }
 private static Generator GetGenerator(WaveformEnum waveform)
 {
     switch (waveform)
     {
         case WaveformEnum.Saw:
             return Generator.DefaultSaw;
         case WaveformEnum.Square:
             return Generator.DefaultSquare;
         case WaveformEnum.Triangle:
             return Generator.DefaultTriangle;
         default:
             return Generator.DefaultSine;
     }
 }
Ejemplo n.º 4
0
 private void ApplyDefault()
 {
     LoopMethod     = LoopModeEnum.NoLoop;
     SamplerType    = WaveformEnum.Sine;
     AssetName      = "null";
     EndPhase       = -1;
     StartPhase     = -1;
     LoopEndPhase   = -1;
     LoopStartPhase = -1;
     Offset         = 0;
     Period         = -1;
     Rootkey        = -1;
     KeyTrack       = 100;
     VelTrack       = 0;
     Tune           = 0;
 }
Ejemplo n.º 5
0
        private static Generator GetGenerator(WaveformEnum waveform)
        {
            switch (waveform)
            {
            case WaveformEnum.Saw:
                return(Generator.DefaultSaw);

            case WaveformEnum.Square:
                return(Generator.DefaultSquare);

            case WaveformEnum.Triangle:
                return(Generator.DefaultTriangle);

            default:
                return(Generator.DefaultSine);
            }
        }
Ejemplo n.º 6
0
 public int Read(BinaryReader reader)
 {
     LoopMethod     = (LoopModeEnum)reader.ReadInt16();
     SamplerType    = (WaveformEnum)reader.ReadInt16();
     AssetName      = IOHelper.Read8BitString(reader, 20);
     EndPhase       = reader.ReadDouble();
     StartPhase     = reader.ReadDouble();
     LoopEndPhase   = reader.ReadDouble();
     LoopStartPhase = reader.ReadDouble();
     Offset         = reader.ReadDouble();
     Period         = reader.ReadDouble();
     Rootkey        = reader.ReadInt16();
     KeyTrack       = reader.ReadInt16();
     VelTrack       = reader.ReadInt16();
     Tune           = reader.ReadInt16();
     return(SIZE);
 }
Ejemplo n.º 7
0
        public static float[] CreateTable(int size, WaveformEnum type)
        {
            Generator generator;

            if (type == WaveformEnum.Sine)
            {
                generator = new SineGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.Square)
            {
                generator = new SquareGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.Triangle)
            {
                generator = new TriangleGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.Saw)
            {
                generator = new SawGenerator(new GeneratorDescriptor());
            }
            else if (type == WaveformEnum.WhiteNoise)
            {
                generator = new WhiteNoiseGenerator(new GeneratorDescriptor());
            }
            else
            {
                return(null);
            }
            float[] table = new float[size];
            double  phase, increment;

            phase     = generator.StartPhase;
            increment = generator.Period / size;
            for (int x = 0; x < table.Length; x++)
            {
                table[x] = generator.GetValue(phase);
                phase   += increment;
            }
            return(table);
        }
 public int Read(BinaryReader reader)
 {
     LoopMethod = (LoopModeEnum)reader.ReadInt16();
     SamplerType = (WaveformEnum)reader.ReadInt16();
     AssetName = IOHelper.Read8BitString(reader, 20);
     EndPhase = reader.ReadDouble();
     StartPhase = reader.ReadDouble();
     LoopEndPhase = reader.ReadDouble();
     LoopStartPhase = reader.ReadDouble();
     Offset = reader.ReadDouble();
     Period = reader.ReadDouble();
     Rootkey = reader.ReadInt16();
     KeyTrack = reader.ReadInt16();
     VelTrack = reader.ReadInt16();
     Tune = reader.ReadInt16();
     return SIZE;
 }
 private void ApplyDefault()
 {
     LoopMethod = LoopModeEnum.NoLoop;
     SamplerType = WaveformEnum.Sine;
     AssetName = "null";
     EndPhase = -1;
     StartPhase = -1;
     LoopEndPhase = -1;
     LoopStartPhase = -1;
     Offset = 0;
     Period = -1;
     Rootkey = -1;
     KeyTrack = 100;
     VelTrack = 0;
     Tune = 0;
 }
Ejemplo n.º 10
0
    public void ComputeWaveform()
    {
        currentOctave   = StartingOctave;
        currentPolarity = StartingPolarity;

        int sinCount      = 0;
        int squareCount   = 0;
        int triangleCount = 0;

        allSlotsFull = true;

        // perform the computations for current values
        foreach (var slot in Slots)
        {
            var currentPart = slot.GetCurrentPart();
            if (currentPart != null)
            {
                if (sideEnum == RobotSideEnum.Left)
                {
                    currentOctave   += currentPart.PartDescriptor.LeftOctave;
                    currentPolarity += currentPart.PartDescriptor.LeftPolarity;
                    switch (currentPart.PartDescriptor.Waveform)
                    {
                    case WaveformEnum.Sin:
                        sinCount++;
                        break;

                    case WaveformEnum.Square:
                        squareCount++;
                        break;

                    case WaveformEnum.Triangle:
                        triangleCount++;
                        break;

                    default:
                        Debug.LogError("Invalid waveform assigned to part, should only be sin, square or triangle waveforms for parts");
                        break;
                    }
                }

                if (sideEnum == RobotSideEnum.Right)
                {
                    currentOctave   += currentPart.PartDescriptor.RightOctave;
                    currentPolarity += currentPart.PartDescriptor.RightPolarity;
                    switch (currentPart.PartDescriptor.Waveform)
                    {
                    case WaveformEnum.Sin:
                        sinCount++;
                        break;

                    case WaveformEnum.Square:
                        squareCount++;
                        break;

                    case WaveformEnum.Triangle:
                        triangleCount++;
                        break;

                    default:
                        Debug.LogError("Invalid waveform assigned to part, should only be sin, square or triangle waveforms for parts");
                        break;
                    }
                }
            }
            else
            {
                allSlotsFull = false;
            }
        }

        if (sinCount > 0)
        {
            // check for combination waves with Square and Triangle
            if (squareCount > 0)
            {
                if (triangleCount > 0)
                {
                    currentWaveEnum = WaveformEnum.Omega;
                }
                else
                {
                    currentWaveEnum = WaveformEnum.Cog;
                }
            }
            else if (triangleCount > 0)
            {
                currentWaveEnum = WaveformEnum.Wave;
            }
            else
            {
                currentWaveEnum = WaveformEnum.Sin;
            }
        }
        else if (squareCount > 0)
        {
            // check for combination waves with Triangle
            if (triangleCount > 0)
            {
                currentWaveEnum = WaveformEnum.Saw;
            }
            else
            {
                currentWaveEnum = WaveformEnum.Square;
            }
        }
        else if (triangleCount > 0)
        {
            // no other possible combinations
            currentWaveEnum = WaveformEnum.Triangle;
        }

        // trigger waveform change event
        WaveformChanged(this);
    }
Ejemplo n.º 11
0
        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 "loopmode":
                        LoopMethod = Generator.GetLoopModeFromString(paramValue.ToLower());
                        break;

                    case "type":
                        SamplerType = Generator.GetWaveformFromString(paramValue.ToLower());
                        break;

                    case "assetname":
                        AssetName = paramValue;
                        break;

                    case "endphase":
                        EndPhase = double.Parse(paramValue);
                        break;

                    case "startphase":
                        StartPhase = double.Parse(paramValue);
                        break;

                    case "loopendphase":
                        LoopEndPhase = double.Parse(paramValue);
                        break;

                    case "loopstartphase":
                        LoopStartPhase = double.Parse(paramValue);
                        break;

                    case "offset":
                        Offset = double.Parse(paramValue);
                        break;

                    case "period":
                        Period = double.Parse(paramValue);
                        break;

                    case "keycenter":
                    case "rootkey":
                        Rootkey = short.Parse(paramValue);
                        break;

                    case "keytrack":
                        KeyTrack = short.Parse(paramValue);
                        break;

                    case "velocitytrack":
                        VelTrack = short.Parse(paramValue);
                        break;

                    case "tune":
                        Tune = short.Parse(paramValue);
                        break;
                    }
                }
            }
        }