Пример #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];
                }
            }
Пример #2
0
        public void Initialise()
        {
            lfo = Substitute.For <IOscillator>();
            //lfo.Generate(Arg.Any<int>()).Returns(0f);

            target = new Flanger(lfo);
        }
Пример #3
0
        public OscillatorTest()
        {
            _oscillator10Hz = new Oscillator(50);
            _startPower     = new PowerSupplier();

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

            target = new Flanger(lfo);
        }
Пример #5
0
        public Form1()
        {
            InitializeComponent();

            serializer     = new RttlConverter();
            oscillator     = new SawToothOccilator(sampleRate);
            soundGenerator = new SoundGenerator(oscillator);
        }
Пример #6
0
 public Machine(
     ICPU CPU,
     IOscillator MachineOscillator,
     IMemoryBankService BankService)
 {
     m_Oscillator  = MachineOscillator;
     m_CPU         = CPU;
     m_BankService = BankService;
 }
Пример #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();
        }
Пример #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;
        }
Пример #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;
        }
Пример #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);
 }
Пример #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();
        }
Пример #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);
        }
Пример #13
0
            /* 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);
            }
Пример #14
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];
            }
Пример #15
0
 public PitchGenerator(IOscillator oscillator)
 {
     this.oscillator = oscillator;
     Attenuation = oscillator.Attenuation;
     Frequency = oscillator.Frequency;
 }
Пример #16
0
 public PitchGenerator(IOscillator oscillator)
 {
     this.oscillator = oscillator;
     Attenuation     = oscillator.Attenuation;
     Frequency       = oscillator.Frequency;
 }
Пример #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);
            }
Пример #18
0
 public SoundGenerator(IOscillator oscillator)
 {
     this.oscillator = oscillator;
 }
Пример #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);
        }