From 685f6c507ec284bed3709e1ca9c37ca5588b6875 Mon Sep 17 00:00:00 2001 From: Aksel Haukanes Date: Wed, 5 Jun 2024 13:51:51 +0200 Subject: [PATCH 1/3] Support non integer sample rate. --- src/Spectrogram/Settings.cs | 6 +++--- src/Spectrogram/SpectrogramGenerator.cs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Spectrogram/Settings.cs b/src/Spectrogram/Settings.cs index a799260..7d6783c 100644 --- a/src/Spectrogram/Settings.cs +++ b/src/Spectrogram/Settings.cs @@ -6,7 +6,7 @@ namespace Spectrogram { class Settings { - public readonly int SampleRate; + public readonly double SampleRate; // vertical information public readonly int FftSize; @@ -29,7 +29,7 @@ class Settings public readonly double StepOverlapFrac; public readonly double StepOverlapSec; - public Settings(int sampleRate, int fftSize, int stepSize, double minFreq, double maxFreq, int offsetHz) + public Settings(double sampleRate, int fftSize, int stepSize, double minFreq, double maxFreq, int offsetHz) { if (FftSharp.Transform.IsPowerOfTwo(fftSize) == false) throw new ArgumentException("FFT size must be a power of 2"); @@ -43,7 +43,7 @@ public Settings(int sampleRate, int fftSize, int stepSize, double minFreq, doubl // vertical minFreq = Math.Max(minFreq, 0); FreqNyquist = sampleRate / 2; - HzPerPixel = (double)sampleRate / fftSize; + HzPerPixel = sampleRate / fftSize; PxPerHz = (double)fftSize / sampleRate; FftIndex1 = (minFreq == 0) ? 0 : (int)(minFreq / HzPerPixel); FftIndex2 = (maxFreq >= FreqNyquist) ? fftSize / 2 : (int)(maxFreq / HzPerPixel); diff --git a/src/Spectrogram/SpectrogramGenerator.cs b/src/Spectrogram/SpectrogramGenerator.cs index 68a9c3b..b673a62 100644 --- a/src/Spectrogram/SpectrogramGenerator.cs +++ b/src/Spectrogram/SpectrogramGenerator.cs @@ -57,7 +57,7 @@ public class SpectrogramGenerator /// /// Number of samples per second /// - public int SampleRate { get => Settings.SampleRate; } + public double SampleRate { get => Settings.SampleRate; } /// /// Number of samples to step forward after each FFT is processed. @@ -255,7 +255,7 @@ public List GetMelFFTs(int melBinCount) var fftsMel = new List(); foreach (var fft in FFTs) - fftsMel.Add(FftSharp.Transform.MelScale(fft, SampleRate, melBinCount)); + fftsMel.Add(FftSharp.Mel.Scale(fft, (int)Math.Round(SampleRate), melBinCount)); return fftsMel; } From 667b2740259c7da11fead9919f67446017180a95 Mon Sep 17 00:00:00 2001 From: Scott W Harden Date: Fri, 1 Nov 2024 10:57:08 -0400 Subject: [PATCH 2/3] Update SpectrogramGenerator.cs --- src/Spectrogram/SpectrogramGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spectrogram/SpectrogramGenerator.cs b/src/Spectrogram/SpectrogramGenerator.cs index 205619d..d022564 100644 --- a/src/Spectrogram/SpectrogramGenerator.cs +++ b/src/Spectrogram/SpectrogramGenerator.cs @@ -218,7 +218,7 @@ public List GetMelFFTs(int melBinCount) var fftsMel = new List(); foreach (var fft in FFTs) - fftsMel.Add(FftSharp.Mel.Scale(fft, SampleRate, melBinCount)); + fftsMel.Add(FftSharp.Mel.Scale(fft, (int)SampleRate, melBinCount)); return fftsMel; } From b722dff54f4d7beb8582be7c53a136e70600b655 Mon Sep 17 00:00:00 2001 From: Aksel Haukanes Date: Fri, 3 Jan 2025 10:48:42 +0100 Subject: [PATCH 3/3] Chaged sampleRate to double from int in SpectrogramGenerator() --- src/Spectrogram/SpectrogramGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spectrogram/SpectrogramGenerator.cs b/src/Spectrogram/SpectrogramGenerator.cs index d022564..3da0eaa 100644 --- a/src/Spectrogram/SpectrogramGenerator.cs +++ b/src/Spectrogram/SpectrogramGenerator.cs @@ -112,7 +112,7 @@ public class SpectrogramGenerator /// This value will be added to displayed frequency axis tick labels /// Analyze this data immediately (alternative to calling Add() later) public SpectrogramGenerator( - int sampleRate, + double sampleRate, int fftSize, int stepSize, double minFreq = 0,