Esempio n. 1
0
        public void Process(AudioAnalysisSample frame)
        {
            SpectrumHistory.Add(frame.Spectrum);
            filterParams.Frame = frame;

            // generate downmixed spectrums
            for (int i = 0; i < Globals.SPECTRUMRES; i++)
            {
                filterParams.Spectrum[i] = (frame.Spectrum[i * 2] + frame.Spectrum[i * 2 + 1]) * 0.5f;
                //filterParams.SpectrumDB[i] = (float)Decibels.LinearToDecibels(filterParams.Spectrum[i]);

                filterParams.SpectrumDB[i] = filterParams.Spectrum[i].NormDB();
                //s.rgb = 20.0 * log(s.rgb);
                //s.rgb = max(vec3(0.0), vec3(1.0) + ((s.rgb + vec3(20.0)) / vec3(200.0)));
            }

            for (int i = 0; i < Globals.SPECTRUM2RES; i++)
            {
                filterParams.Spectrum2[i]   = frame.Spectrum2[i];
                filterParams.Spectrum2DB[i] = frame.Spectrum2[i].NormDB();
            }

            // run filters
            foreach (var filter in Filters)
            {
                var results = filter.GetValues(filterParams);
                for (int i = 0; i < filter.OutputSlotCount; i++)
                {
                    frame.AudioData[filter.OutputOffset + i] = results[i];
                }
            }
        }
Esempio n. 2
0
        //private float[] mixtemp = new float[outputResolution2];

        private void AddSample(float[] samples, int offset, int channels)
        {
            // mono source - copy to both channels
            if (channels == 1)
            {
                fft[0].Add(samples[offset]);
                fft[1].Add(samples[offset]);

                fft2.Add(samples[offset]);
            }
            else
            {
                fft[0].Add(samples[offset]);
                fft[1].Add(samples[offset + 1]);

                fft2.Add((samples[offset] + samples[offset + 1]) * 0.5f);
            }

            sampleCounter++;
            if (sampleCounter > frameInterval)
            {
                float[] f = new float[Globals.SPECTRUMRES * MAXCHANNELS];

                for (int i = 0; i < MAXCHANNELS; i++)
                {
                    fft[i].GenerateTo(f, i, Globals.SPECTRUMRES, MAXCHANNELS);
                }


                float[] f2 = new float[Globals.SPECTRUM2RES];
                //var mixtemp = MixChannels(f, outputResolution * MAXCHANNELS, MAXCHANNELS).Select(x => x / (float)MAXCHANNELS).ToArray();
                //fft2.Add(Resample(mixtemp, outputResolution2, x => x * x));
                fft2.GenerateTo(f2, 0, Globals.SPECTRUM2RES);


                var analysisSample = new AudioAnalysisSample(f, f2, new float[Globals.AUDIODATASIZE], frameInterval /*, analyser.OutputNames*/);

                analyser.Process(analysisSample);

                SpectrumReady?.Invoke(this, new FftEventArgs(analysisSample));

                sampleCounter = 0;
            }
        }
Esempio n. 3
0
 public FftEventArgs(AudioAnalysisSample sample)
 {
     Sample = sample;
 }