Example #1
0
    private void Start()
    {
        //jeden kanal
        wahwah                  = musicCube.GetComponent <WahWahFilter>();
        wahwah.QValue           = 1.5f;
        wahwah.CutOffFrequency  = 300.0f;
        wahwah.FrequencyRange   = 800.0f;
        lowpass                 = musicCube.GetComponent <LowPassFilter>();
        lowpass.CutOffFrequency = 400.0f;
        lowpass.QValue          = 0.5f;


        //drugi kanal
        envelope                 = musicCube.GetComponent <EnvelopGenerator>();
        envelope.AttackRate      = 0.15f * 44100.0f;
        envelope.DecayRate       = 0.15f * 44100.0f;
        envelope.SustainLevel    = 0.6f;
        envelope.ReleaseRate     = 0.1f * 44100.0f;
        highpass                 = musicCube.GetComponent <HighPassFilter>();
        highpass.QValue          = 0.5f;
        highpass.CutOffFrequency = 300.0f;
        bandpass                 = musicCube.GetComponent <BandPassFilter>();
        bandpass.centreFrequency = 350.0f;
        bandpass.q               = 0.4f;
        bandpass.BandPassFilterConstantPeakGain();
        vibrato           = musicCube.GetComponent <VibratoFilter>();
        vibrato.delay     = 0.2f;
        vibrato.depth     = 0.03f;
        vibrato.frequency = 0.8f;
    }
        private void btnAddFilter_Click(object sender, RoutedEventArgs e)
        {
            Filter filter = null;

            switch ((sender as FrameworkElement).Name)
            {
            case "btnAddLPF": filter = new LowPassFilter(Filter.DefaultN, (double)globalSampleRate / 4); break;

            case "btnAddHPF": filter = new HighPassFilter(Filter.DefaultN, (double)globalSampleRate / 4); break;

            case "btnAddBPF": filter = new BandPassFilter(Filter.DefaultN, (double)globalSampleRate / 8, (double)globalSampleRate * 3 / 8); break;

            case "btnAddBSF": filter = new BandStopFilter(Filter.DefaultN, (double)globalSampleRate / 8, (double)globalSampleRate * 3 / 8); break;

            case "btnAddMF": filter = new AverageFilter(Filter.DefaultN); break;

            case "btnAddZPass": filter = new ZFilterPass(ZFilterPass.DefaultR, (double)globalSampleRate / 4); break;

            case "btnAddZPass1": filter = new ZFilterPass1(ZFilterPass1.DefaultR, (double)globalSampleRate / 4); break;

            case "btnAddNotch": filter = new NotchFilter(NotchFilter.DefaultR1, NotchFilter.DefaultR2, (double)globalSampleRate / 4); break;

            default: return;
            }

            filter.PropertyChanged += new PropertyChangedEventHandler(Filter_PropertyChanged);

            filters.Add(filter);
            filtersList.SelectedIndex = filters.IndexOf(filter);

            updateResult();
        }
Example #3
0
        public ArticulatorLayer(Synthesizer synth) : base(synth)
        {
            bpf1 = new BandPassFilter(0, 0, synth.SampleRate, RES_F1, RES_F1);
            bpf2 = new BandPassFilter(0, 0, synth.SampleRate, RES_F2, RES_F2);
            bpf3 = new BandPassFilter(0, 0, synth.SampleRate, RES_F3, RES_F3);
            bpf4 = new BandPassFilter(0, 0, synth.SampleRate, RES_F4, RES_F4);
            bpf5 = new BandPassFilter(0, 0, synth.SampleRate, RES_F5, RES_F5);

            lpNoise   = new ButterworthFilter(FREQ_LPNOISE, synth.SampleRate, PassFilterType.LowPass, RES_LPNOISE);
            hpOverlay = new ButterworthFilter(FREQ_HPO, synth.SampleRate, PassFilterType.HighPass, RES_HPO);
            lpOverlay = new ButterworthFilter(1, synth.SampleRate, PassFilterType.LowPass, RES_LPO);

            UpdateLowerBandwidths();
            UpdateLowerFormants();
            UpdateHigherFormants();
        }
Example #4
0
        /// <summary>
        /// Method returns BiQuad bandpass overlapping filters based on given frequencies.
        /// </summary>
        /// <param name="fftSize">Assumed size of FFT</param>
        /// <param name="samplingRate">Assumed sampling rate of a signal</param>
        /// <param name="frequencies">Array of frequency tuples (left, center, right) for each filter</param>
        /// <returns>Array of BiQuad bandpass filters</returns>
        public static float[][] BiQuad(int fftSize, int samplingRate, Tuple <double, double, double>[] frequencies)
        {
            var center = frequencies.Select(f => f.Item2).ToArray();

            var filterCount = frequencies.Length;
            var filterBank  = new float[filterCount][];

            for (var i = 0; i < filterCount; i++)
            {
                var freq   = center[i] / samplingRate;
                var filter = new BandPassFilter(freq, 2.0);

                filterBank[i] = filter.FrequencyResponse(fftSize).Magnitude.ToFloats();
            }

            return(filterBank);
        }
Example #5
0
        private void HandleFilterTypeChange(FilterChange message)
        {
            bpFilter = message.BPFilter;
            hpFilter = message.HPFilter;
            lpFilter = message.LPFilter;
            switch (message.FilterType)
            {
            case FilterType.None:
                Become(ProcessNone);
                break;

            case FilterType.HighPass:
                Become(ProcessHighPass);
                break;

            case FilterType.LowPass:
                Become(ProcessLowPass);
                break;

            case FilterType.BandPass:
                Become(ProcessBandPass);
                break;
            }
        }
        private static async Task TestBrainDeviceManager()
        {
            var cfg       = ClientConfig.GetConfig();
            var lowFilter = new LowPassFilter()
            {
                LowPassRate = 10
            };
            var highFilter = new HighPassFilter()
            {
                HighPassRate = 10000
            };
            var bPassFilter = new BandPassFilter()
            {
                LowCutoffRate = 20, HighCutoffRate = 30
            };
            var bStopFilter = new BandStopFilter()
            {
                LowPassRate = 35, HighPassRate = 38
            };
            var mFilter = new MedianFilter()
            {
                HalfMedianWindowSize = 7
            };
            var bandFilter = new BandPassStopFilter
            {
                BandFilterList = new List <BandFilter> {
                    lowFilter, highFilter, bPassFilter, bStopFilter
                }
            };

            bandFilter.Disable = true;
            var allFilter = new FilterTypeList()
            {
                Filters = new List <FilterType> {
                    bandFilter, mFilter
                }
            };
            var filterParameters = new Dictionary <string, string>
            {
                { FilterTypeList.FIRhalfOrderOptionName, 10.ToString() }
            };

            cfg.FilterLst = allFilter;
            IOnlineFilter         filter     = null;
            WaveletReconstruction waveletRec = null;

            cfg.WaveletRecCfg = new WaveletReconstructionConfig
            {
                AvgLevel          = 8,
                ConvolutionMode   = ConvolutionModeEnum.Normal,
                ExtensionMode     = SignalExtension.ExtensionMode.SymmetricHalfPoint,
                Level             = 8,
                MotherWaveletName = "db5",
                WindowSize        = 15
            };
            cfg.WriteToFile(ClientConfig.DefaultConfigFileName);


            BrainDeviceManager.Init();
            var sender = await BrainDeviceManager.Connnect("127.0.0.1", 9211);

            BrainDevState currentState = default(BrainDevState);

            //保证设备参数正常才继续跑逻辑
            BrainDeviceManager.BrainDeviceState.Subscribe(ss =>
            {
                currentState = ss;
                filterParameters.Update(
                    FilterTypeList.SampleRateOptionName,
                    BrainDevState.SampleCountPer1Sec(ss.SampleRate).ToString()
                    );
                //AppLogger.Debug($"Brain Device State Changed Detected: {ss}");
            }, () =>
            {
                AppLogger.Debug("device stop detected");
            });
            int totalReceived    = 0;
            var medianFilter     = OnlineFirFilter.CreateDenoise(7);
            var fastMedianFilter = new OnlineFastMedianFilter(3);

            BrainDeviceManager.SampleDataStream.Subscribe(tuple =>
            {
                var(order, datas, arr) = tuple;
                //Console.Write($" {order} ");
                var passTimes = BrainDevState.PassTimeMs(currentState.SampleRate, totalReceived) / 1000;
                var intArr    = datas.CopyToArray();
                var val       = intArr[0];
                var voltage   = BitDataConverter.Calculatevoltage(val, 4.5f, currentState.Gain);
                totalReceived++;
                var m1 = medianFilter.ProcessSample(voltage);
                var m2 = fastMedianFilter.ProcessSample(voltage);
                AppLogger.Debug($"passTimes:{passTimes},val:{val},voltage:{voltage},median filter:{m1},fast:{m2},{m1==m2}");
                if (filter == null)
                {
                    filter     = allFilter.CreateFilter(filterParameters);
                    waveletRec = cfg.WaveletRecCfg.Create(
                        BrainDevState.SampleCountPer1Sec(currentState.SampleRate));
                    waveletRec.ReconstructionStream.Subscribe(reconstruct =>
                    {
                        var(vol, tim) = reconstruct;
                        AppLogger.Debug($"wavelet reconstruction:{vol} at {tim}");
                    });
                }
                waveletRec?.BufferData((voltage, passTimes));
                AppLogger.Debug($"filter processed:{filter.ProcessSample(voltage)}");
                //AppLogger.Debug($"order:{order}");
                //AppLogger.Debug($"converted values:{datas.Show()}");
                //AppLogger.Debug($"original datas:{arr.Show()}");
            }, () =>
            {
                AppLogger.Debug("device sampling stream closed detected");
            });

            var cmdResult = await sender.QueryParam();

            AppLogger.Debug("QueryParam result:" + cmdResult);
            if (cmdResult != CommandError.Success)
            {
                AppLogger.Error("Failed to QueryParam, stop");
                BrainDeviceManager.DisConnect();
                return;
            }


            cmdResult = await sender.SetFilter(true);

            AppLogger.Debug("SetFilter result:" + cmdResult);

            cmdResult = await sender.SetTrap(TrapSettingEnum.Trap_50);

            AppLogger.Debug("SetTrap result:" + cmdResult);

            cmdResult = await sender.SetSampleRate(SampleRateEnum.SPS_2k);

            AppLogger.Debug("SetSampleRate result:" + cmdResult);

            cmdResult = await sender.QueryParam();

            AppLogger.Debug("QueryParam result:" + cmdResult);

            cmdResult = await sender.QueryFaultState();

            AppLogger.Debug("QueryFaultState result:" + cmdResult);

            cmdResult = await sender.TestSingleImpedance(1);

            AppLogger.Debug("TestSingleImpedance result:" + cmdResult);

            cmdResult = await sender.TestMultiImpedance(30);

            AppLogger.Debug("TestMultiImpedance result:" + cmdResult);

            Console.ReadLine();
            var fs = new FileResource(currentState, 19801983, 1, BrainDeviceManager.BufMgr);

            fs.StartRecord(BrainDeviceManager.SampleDataStream);
            cmdResult = await sender.Start();

            if (cmdResult != CommandError.Success)
            {
                AppLogger.Error("Failed to start sampler");
            }
            else
            {
                AppLogger.Debug($"start receive sample data");
                await Task.Delay(1000 *10);

                AppLogger.Debug($"stoping");
                await sender.Stop();

                AppLogger.Debug($"stop receive sample data");
                await Task.Delay(1000);
            }

            BrainDeviceManager.DisConnect();
            fs.Dispose();

            var readf = new FileSampleData(fs.ResourceId, BrainDeviceManager.BufMgr);

            Console.WriteLine($"expecte to read {totalReceived} blocks");
            Console.WriteLine($"start reading saved sampling data");
            int readCount = 0;

            readf.DataStream.Subscribe(tuple =>
            {
                var(order, datas, arr) = tuple;
                Console.Write($" {order} ");
                readCount++;
                //AppLogger.Debug($"order:{order}");
                //AppLogger.Debug($"converted values:{datas.Show()}");
                //AppLogger.Debug($"original datas:{arr.Show()}");
            }, () =>
            {
                AppLogger.Debug($"read sampling data file end,count :{readCount},expected count:{totalReceived}");
            });
            readf.Start();
            await Task.Delay(1000 *10);

            Console.Write($"wait complete");
        }
Example #7
0
 public ConfigBandPassFilter(DSP dsp)
     : base(dsp)
 {
     myDSP = (BandPassFilter)dsp;
     Initialize();
 }
Example #8
0
 public ConfigBandPassFilter(DSP dsp)
     : base(dsp)
 {
     myDSP = (BandPassFilter)dsp;
     Initialize();
 }
Example #9
0
 public SpectrumComponentBase()
 {
     _audioFilter = new BandPassFilter(BufferSize, SampleRate);
 }
Example #10
0
 protected AudioComponentBase()
 {
     _audioFilter = new BandPassFilter(BufferSize, SampleRate);
 }