Example #1
0
            public void Initialize()
            {
                if (Target == null || string.IsNullOrEmpty(PropertyName))
                {
                    property = null;
                }
                else if (property == null || property.Name != PropertyName || property.DeclaringType != Target.GetType())
                {
                    property = Target.GetType().GetProperty(PropertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
                }

                if (property == null)
                {
                    oscillator = null;
                }
                else if (oscillator == null)
                {
                    oscillator = OscillationUtility.GetOscillator(property);
                }

                if (settings == null || settings.Length != Settings.Length)
                {
                    settings = new OscillationSettings[Settings.Length];
                }

                for (int i = 0; i < Settings.Length; i++)
                {
                    settings[i] = Settings[i];
                }
            }
Example #2
0
        public void Initialise()
        {
            lfo = Substitute.For <IOscillator>();
            //lfo.Generate(Arg.Any<int>()).Returns(0f);

            target = new Flanger(lfo);
        }
        public OscillatorTest()
        {
            _oscillator10Hz = new Oscillator(50);
            _startPower     = new PowerSupplier();

            _oscillator10Hz.Start.ConnectTo(_startPower.Output);
        }
Example #4
0
        public void Initialise()
        {
            lfo = Substitute.For<IOscillator>();
            //lfo.Generate(Arg.Any<int>()).Returns(0f);

            target = new Flanger(lfo);
        }
Example #5
0
        public Form1()
        {
            InitializeComponent();

            serializer     = new RttlConverter();
            oscillator     = new SawToothOccilator(sampleRate);
            soundGenerator = new SoundGenerator(oscillator);
        }
Example #6
0
 public Machine(
     ICPU CPU,
     IOscillator MachineOscillator,
     IMemoryBankService BankService)
 {
     m_Oscillator  = MachineOscillator;
     m_CPU         = CPU;
     m_BankService = BankService;
 }
Example #7
0
        public Voice(double samplerate, int bufferSize)
        {
            this.samplerate = samplerate;
            bufsize         = bufferSize;

            ampEnvBuffer     = new double[bufsize];
            filter1EnvBuffer = new double[bufsize];
            filter2EnvBuffer = new double[bufsize];

            path1Buffer     = new double[bufsize];
            path2Buffer     = new double[bufsize];
            processBuffer   = new double[bufsize];
            OutputBuffer    = new double[2][];
            OutputBuffer[0] = new double[48000];
            OutputBuffer[1] = new double[48000];

            Modules = new Dictionary <ModuleId, object>();

            Osc1 = new MultiOsc(samplerate, bufsize);
            Osc2 = new BlOsc(samplerate, bufsize);
            Osc3 = new BlOsc(samplerate, bufsize);
            Osc4 = new BlOsc(samplerate, bufsize);

            //Ins1 = new InsRedux(samplerate, Bufsize);
            //Ins2 = new InsRedux(samplerate, Bufsize);
            Ins1 = new InsDistortion(samplerate, bufsize);
            Ins2 = new InsDistortion(samplerate, bufsize);

            Filter1 = new DualFilter(samplerate, bufsize);
            Filter2 = new DualFilter(samplerate, bufsize);

            AmpEnv     = new Ahdsr(samplerate);
            Filter1Env = new Ahdsr(samplerate);
            Filter2Env = new Ahdsr(samplerate);

            Mod1 = new Modulator(samplerate);
            Mod2 = new Modulator(samplerate);
            Mod3 = new Modulator(samplerate);
            Mod4 = new Modulator(samplerate);
            Mod5 = new Modulator(samplerate);
            Mod6 = new Modulator(samplerate);

            MidiInput = new MidiInput();
            ModMatrix = new ModMatrix(this);
            Mixer     = new Mixer();

            RefreshModuleObjects();

            Mod1.UpdateStepsize();
            Mod2.UpdateStepsize();
            Mod3.UpdateStepsize();
            Mod4.UpdateStepsize();
            Mod5.UpdateStepsize();
            Mod6.UpdateStepsize();
            Mixer.Update();
        }
Example #8
0
        public Flanger(IOscillator lfo)
        {
            if (lfo == null)
            {
                throw new ArgumentNullException("lfo", "Low frequency oscillator cannot be null");
            }

            this.lfo       = lfo;
            this.Frequency = 0.25f;
            this.Depth     = 1f;
        }
Example #9
0
        public Flanger(IOscillator lfo)
        {
            if (lfo == null)
            {
                throw new ArgumentNullException("lfo", "Low frequency oscillator cannot be null");
            }

            this.lfo = lfo;
            this.Frequency = 0.25f;
            this.Depth = 1f;
        }
Example #10
0
 public void Initialize()
 {
     m_Oscillator  = new Clock();
     m_CPU         = new CPU();
     m_Bank        = new MemoryBank(512);
     m_BankService = new MemoryBankService(new List <IMemoryBank>
     {
         m_Bank
     });
     m_Machine = new Machine(m_CPU, m_Oscillator, m_BankService);
 }
Example #11
0
        public void Initialize()
        {
            m_Arch = _CreateArchitecture();

            m_CPU         = new CPU();
            m_Oscillator  = new Clock();
            m_Bank        = new MemoryBank(512);
            m_BankService = new MemoryBankService(new List <IMemoryBank>()
            {
                m_Bank
            });
            m_AddressReader = new MemoryLocationAddressReader();
            m_OpDtoReader   = new OperationDTOReader(m_Arch);
            m_OpReader      = new OperationReader(m_Arch, m_OpDtoReader);

            m_Fetcher     = new OperationFetcher(m_OpReader, m_BankService, m_AddressReader);
            m_OpFeeder    = new OperationFeeder(m_Fetcher);
            m_CPUConsumer = new CPUConsumer(m_CPU);

            SetupComponents();
        }
Example #12
0
        //public double Osc1Wave, Osc2Wave;
        // ----------------------------Voice Specific Parameters ----------------------------
        public Voice()
        {
            Osc1 = new WavetableOsc(48000);
            Filter1 = new LadderFilter(48000);
            MidiInput = new MidiInput();
            AmpEnv = new Ahdsr(48000);
            Filter1Env = new Ahdsr(48000);

            ModMatrix = new ModMatrix(this);

            // create default mod routes

            var ampRoute = new ModRouting();
            ampRoute.Source = ModSource.AmpEnv;
            ampRoute.Destination = ModDestination.Filter1Vol;
            ampRoute.Amount = 1.0;
            ModMatrix.Routes.Add(ampRoute);

            var filter1Route = new ModRouting();
            filter1Route.Source = ModSource.Filter1Env;
            filter1Route.Destination = ModDestination.Filter1Freq;
            filter1Route.Amount = 1.0;
            ModMatrix.Routes.Add(filter1Route);
        }
            /* create a new wave table state object. */
            public SynthErrorCodes NewState(
                double FreqForMultisampling,
                ref AccentRec Accents,
                double Loudness,
                double HurryUp,
                out int PreOriginTimeOut,
                double StereoPosition,
                double InitialFrequency,
                double PitchDisplacementDepthLimit,
                double PitchDisplacementRateLimit,
                int PitchDisplacementStartPoint,
                PlayTrackInfoRec TrackInfo,
                SynthParamRec SynthParams,
                out IOscillator StateOut)
            {
                WaveTableTemplateRec Template = this;

                int OnePreOrigin;

                PreOriginTimeOut = 0;
                StateOut         = null;

                WaveTableStateRec State = New(ref SynthParams.freelists.waveTableStateFreeList);

                // all fields must be assigned: State

                // conservative zero-initialization
                State.WaveTableSamplePositionDifferential = new Fixed64(0);

                State.Template = Template;

                int MaxPreOrigin = 0;

                State.WaveTableSamplePosition = new Fixed64(0);
                /* State.WaveTableSamplePositionDifferential specified in separate call */

                State.NoteLoudnessScaling = Loudness * Template.OverallOscillatorLoudness;

                int NumberOfTables;

                State.WaveTableWasDefined = GetMultiWaveTableReference(
                    Template.WaveTableSourceSelector,
                    FreqForMultisampling,
                    out State.WaveTableMatrix,
                    out State.FramesPerTable,
                    out NumberOfTables);
                State.NumberOfTablesMinus1 = NumberOfTables - 1;

                State.FramesPerTableOverFinalOutputSamplingRate
                    = (double)State.FramesPerTable / SynthParams.dSamplingRate;

                /* State.FramesPerTable > 0: */
                /*   if the wave table is empty, then we don't do any work (and we must not, */
                /*   since array accesses would cause a crash) */
                if (State.WaveTableWasDefined)
                {
                    if (!(State.FramesPerTable > 0))
                    {
                        State.WaveTableWasDefined = false;
                    }
                }

                State.PreStartCountdown = (int)((Template.TimeDisplacement
                                                 * SynthParams.dEnvelopeRate) + 0.5);
                if (-State.PreStartCountdown > MaxPreOrigin)
                {
                    MaxPreOrigin = -State.PreStartCountdown;
                }

                /* State.WaveTableIndex determined by envelope update */
                State.WaveTableIndexEnvelope = NewEnvelopeStateRecord(
                    Template.IndexEnvelopeTemplate,
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }
                State.IndexLFOGenerator = NewLFOGenerator(
                    Template.IndexLFOTemplate,
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }
                State.PreviousWaveTableIndex = 0;
                State.WaveTableIndex         = 0;

                /* State.MonoLoudness, State.LeftLoudness, State.RightLoudness */
                /* are determined by the envelope update */
                StereoPosition += Template.StereoBias;
                if (StereoPosition < -1)
                {
                    StereoPosition = -1;
                }
                else if (StereoPosition > 1)
                {
                    StereoPosition = 1;
                }
                State.Panning = (float)StereoPosition;
                State.WaveTableLoudnessEnvelope = NewEnvelopeStateRecord(
                    Template.LoudnessEnvelopeTemplate,
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }
                State.LoudnessLFOGenerator = NewLFOGenerator(
                    Template.LoudnessLFOTemplate,
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }
                State.PreviousLoudness = 0;
                State.Loudness         = 0;

                State.PitchLFO = NewLFOGenerator(
                    Template.PitchLFOTemplate,
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    PitchDisplacementDepthLimit,
                    PitchDisplacementRateLimit,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }
                State.PitchLFOStartCountdown = PitchDisplacementStartPoint;

                State.OscEffectGenerator = null;
                if (Template.OscEffectTemplate != null)
                {
                    SynthErrorCodes Result = NewOscEffectGenerator(
                        Template.OscEffectTemplate,
                        ref Accents,
                        HurryUp,
                        InitialFrequency,
                        FreqForMultisampling,
                        out OnePreOrigin,
                        TrackInfo,
                        SynthParams,
                        out State.OscEffectGenerator);
                    if (Result != SynthErrorCodes.eSynthDone)
                    {
                        return(Result);
                    }
                    if (OnePreOrigin > MaxPreOrigin)
                    {
                        MaxPreOrigin = OnePreOrigin;
                    }
                }

                State.EnableCrossWaveTableInterpolation = Template.EnableCrossWaveTableInterpolation;

                PreOriginTimeOut = MaxPreOrigin;
                StateOut         = State;
                return(SynthErrorCodes.eSynthDone);
            }
            public void Initialize()
            {
                if (Target == null || string.IsNullOrEmpty(PropertyName))
                    property = null;
                else if (property == null || property.Name != PropertyName || property.DeclaringType != Target.GetType())
                    property = Target.GetType().GetProperty(PropertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

                if (property == null)
                    oscillator = null;
                else if (oscillator == null)
                    oscillator = OscillationUtility.GetOscillator(property);

                if (settings == null || settings.Length != Settings.Length)
                    settings = new OscillationSettings[Settings.Length];

                for (int i = 0; i < Settings.Length; i++)
                    settings[i] = Settings[i];
            }
 public PitchGenerator(IOscillator oscillator)
 {
     this.oscillator = oscillator;
     Attenuation = oscillator.Attenuation;
     Frequency = oscillator.Frequency;
 }
Example #16
0
 public PitchGenerator(IOscillator oscillator)
 {
     this.oscillator = oscillator;
     Attenuation     = oscillator.Attenuation;
     Frequency       = oscillator.Frequency;
 }
Example #17
0
            /* create a new FOF state object. */
            public SynthErrorCodes NewState(
                double FreqForMultisampling,
                ref AccentRec Accents,
                double Loudness,
                double HurryUp,
                out int PreOriginTimeOut,
                double StereoPosition,
                double InitialFrequency,
                double PitchDisplacementDepthLimit,
                double PitchDisplacementRateLimit,
                int PitchDisplacementStartPoint,
                PlayTrackInfoRec TrackInfo,
                SynthParamRec SynthParams,
                out IOscillator StateOut)
            {
                FOFTemplateRec Template = this;

                int OnePreOrigin;
                int NumberOfTables;

                PreOriginTimeOut = 0;
                StateOut         = null;

                FOFStateRec State = New(ref SynthParams.freelists.FOFStateRecFreeList);

                // must initilize all fields: State

                State.WaveTableSamplePosition             = new Fixed64(0);
                State.WaveTableSamplePositionDifferential = new Fixed64(0);
                State.WaveTableIndex         = 0;
                State.LeftLoudness           = 0;
                State.RightLoudness          = 0;
                State.FOFSamplingRateContour = 0;

                State.Template = Template;

                int MaxPreOrigin = 0;

                State.ActiveGrainList = null; /* no grains to begin with */

                State.NoteLoudnessScaling = Loudness * Template.OverallOscillatorLoudness;

                State.WaveTableWasDefined = GetMultiWaveTableReference(
                    Template.WaveTableSourceSelector,
                    FreqForMultisampling,
                    out State.WaveTableMatrix,
                    out State.FramesPerTable,
                    out NumberOfTables);
                State.NumberOfTablesMinus1 = NumberOfTables - 1;

                if (State.WaveTableWasDefined)
                {
                    /* we want the first grain to go on the first sampling point, so we */
                    /* set this up to start on the next interval. */
                    State.WaveTableSamplePosition = new Fixed64(State.FramesPerTable - State.FramesPerTable
                                                                * (InitialFrequency / SynthParams.dSamplingRate));
                }
                /* State.WaveTableSamplePositionDifferential specified in separate call */

                /* State.FramesPerTable > 0: */
                /*   if the wave table is empty, then we don't do any work (and we must not, */
                /*   since array accesses would cause a crash) */
                if (State.WaveTableWasDefined)
                {
                    if (!(State.FramesPerTable > 0))
                    {
                        State.WaveTableWasDefined = false;
                    }
                }

                /* State.WaveTableWasDefined: */
                /*   if there is no wave table defined for the current pitch, then we don't */
                /*   bother generating any data */
                /* (no action required) */

                State.PreStartCountdown = (int)(Template.TimeDisplacement * SynthParams.dEnvelopeRate + 0.5);
                if (-State.PreStartCountdown > MaxPreOrigin)
                {
                    MaxPreOrigin = -State.PreStartCountdown;
                }

                /* State.WaveTableIndex determined by envelope update */
                State.WaveTableIndexEnvelope = NewEnvelopeStateRecord(
                    Template.IndexEnvelopeTemplate,
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                State.IndexLFOGenerator = NewLFOGenerator(
                    Template.IndexLFOTemplate,
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                /* State.MonoLoudness, State.LeftLoudness, State.RightLoudness */
                /* are determined by the envelope update */
                StereoPosition += Template.StereoBias;
                if (StereoPosition < -1)
                {
                    StereoPosition = -1;
                }
                else if (StereoPosition > 1)
                {
                    StereoPosition = 1;
                }
                State.Panning = (float)StereoPosition;

                State.WaveTableLoudnessEnvelope = NewEnvelopeStateRecord(
                    Template.LoudnessEnvelopeTemplate,
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                State.LoudnessLFOGenerator = NewLFOGenerator(
                    Template.LoudnessLFOTemplate,
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                State.PitchLFO = NewLFOGenerator(
                    Template.PitchLFOTemplate,
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    PitchDisplacementDepthLimit,
                    PitchDisplacementRateLimit,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }
                State.PitchLFOStartCountdown = PitchDisplacementStartPoint;

                State.FOFSamplingRateEnvelope = NewEnvelopeStateRecord(
                    Template.FOFSamplingRateEnvelopeTemplate,
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                State.FOFSamplingRateLFOGenerator = NewLFOGenerator(
                    Template.FOFSamplingRateLFOTemplate,
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                State.OscEffectGenerator = null;
                if (Template.OscEffectTemplate != null)
                {
                    SynthErrorCodes Result = NewOscEffectGenerator(
                        Template.OscEffectTemplate,
                        ref Accents,
                        HurryUp,
                        InitialFrequency,
                        FreqForMultisampling,
                        out OnePreOrigin,
                        TrackInfo,
                        SynthParams,
                        out State.OscEffectGenerator);
                    if (Result != SynthErrorCodes.eSynthDone)
                    {
                        return(Result);
                    }
                    if (OnePreOrigin > MaxPreOrigin)
                    {
                        MaxPreOrigin = OnePreOrigin;
                    }
                }

                PreOriginTimeOut = MaxPreOrigin;
                StateOut         = State;
                return(SynthErrorCodes.eSynthDone);
            }
Example #18
0
 public SoundGenerator(IOscillator oscillator)
 {
     this.oscillator = oscillator;
 }
Example #19
0
        private short[] RenderOscillator(IOscillator osc)
        {
            short[] data  = new short[_numSamples];
            double  angle = (Math.PI * 2 * osc.OscFrequency) / (format.dwSamplesPerSec * format.wChannels);

            switch (osc.Wavetype)
            {
            case WaveType.Sinus:
                for (int i = 0; i < _numSamples; i++)
                {
                    data[i] = Convert.ToInt16(osc.OscAmplitude * Math.Sin(angle * i));
                }
                break;

            case WaveType.Square:
                for (int i = 0; i < _numSamples; i++)
                {
                    if (Math.Sin(angle * i) > 0)
                    {
                        data[i] = Convert.ToInt16(osc.OscAmplitude);
                    }
                    else
                    {
                        data[i] = Convert.ToInt16(-osc.OscAmplitude);
                    }
                }
                break;

            case WaveType.Saw:
            {
                int   samplesPerPeriod = Convert.ToInt32(format.dwSamplesPerSec / (osc.OscFrequency / format.wChannels));
                short sampleStep       = Convert.ToInt16((osc.OscAmplitude * 2) / samplesPerPeriod);
                short tempSample       = 0;

                int i = 0;
                int totalSamplesWritten = 0;
                while (totalSamplesWritten < _numSamples)
                {
                    tempSample = (short)-osc.OscAmplitude;
                    for (i = 0; i < samplesPerPeriod && totalSamplesWritten < _numSamples; i++)
                    {
                        tempSample += sampleStep;
                        data[totalSamplesWritten] = tempSample;
                        totalSamplesWritten++;
                    }
                }
            }
            break;

            case WaveType.Noise:
            {
                Random rnd = new Random();
                for (int i = 0; i < _numSamples; i++)
                {
                    data[i] = Convert.ToInt16(rnd.Next((int)-osc.OscAmplitude, (int)osc.OscAmplitude));
                }
            }
            break;

            case WaveType.None:
                data = null;
                break;
            }
            return(data);
        }