Beispiel #1
0
        public NoteContainer CreateNoteContainer(List <int> stringsToAnalyze, int tonesCount)
        {
            var       noteContainer  = new NoteContainer();
            const int harmonicsCount = 3;

            foreach (var stringNumber in stringsToAnalyze)
            {
                var stringFrequencies    = GuitarTuningNotesCreator.GetStringFrequenciesRange(stringNumber, tonesCount);
                var frequenciesToAnalyze = new List <float>(stringFrequencies);

                for (int i = 0; i < harmonicsCount; i++)
                {
                    var multiplier = MathF.Pow(2, i + 1);
                    frequenciesToAnalyze.AddRange(stringFrequencies.Select(v => v * multiplier));
                }

                foreach (var frequency in stringFrequencies)
                {
                }
            }
            var frequencies        = GuitarTuningNotesCreator.GetStringsFrequencies(6);
            var fft                = new FastFourierTransformCPU(AudioContainer.Samples);
            var scalogramCreator   = new ScalogramCreator(AudioContainer, fft);
            var scalogramContainer = scalogramCreator.CreateScalogram(frequencies);

            foreach (var scalogram in scalogramContainer.Scalograms)
            {
                var localMaximumIndexes = new List <int>();

                if (scalogram.Value[0] > scalogram.Value[1])
                {
                    localMaximumIndexes.Add(0);
                }
                if (scalogram.Value[^ 1] > scalogram.Value[^ 2])
        public WaveletTransformNumericalViewModel(SoundDataModel soundDataModel, ScalogramModel scalogramModel)
        {
            SoundDataModel   = soundDataModel;
            ScalogramModel   = scalogramModel;
            GenerateAnalysis = new DelegateCommand(() =>
            {
                var fft = new FastFourierTransformCPU(SoundDataModel.AudioContainer.Samples);
                var scalogramCreator = new ScalogramCreator(SoundDataModel.AudioContainer, fft);
                var frequencies      = new List <float>
                {
                    FrequencyToAnalyze
                };
                var scalogramContainer = scalogramCreator.CreateScalogram(frequencies, CyclesCount);

                var list = new List <DataPoint>();
                var n    = 1;
                foreach (var v in scalogramContainer.ScalogramValues)
                {
                    list.Add(new DataPoint(n++, v));
                }
                Points = list;
            });

            AnalyzeNextFrequency = new DelegateCommand(() =>
            {
                FrequencyToAnalyze++;
                GenerateAnalysis.Execute();
            });

            AnalyzePreviousFrequency = new DelegateCommand(() =>
            {
                FrequencyToAnalyze--;
                GenerateAnalysis.Execute();
            });

            FrequencyToAnalyze = 1;
            CyclesCount        = 3;
        }