Skip to content

Commit 4161f3b

Browse files
committed
use FftSharp's Mel scaling method
1 parent f230a84 commit 4161f3b

1 file changed

Lines changed: 2 additions & 33 deletions

File tree

src/Spectrogram/Spectrogram.cs

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -135,40 +135,9 @@ public List<double[]> GetMelFFTs(int melBinCount)
135135
if (settings.FreqMin != 0)
136136
throw new InvalidOperationException("cannot get Mel spectrogram unless minimum frequency is 0Hz");
137137

138-
// determine the bin locations (on the Mel scale)
139-
double maxMel = 2595 * Math.Log10(1 + settings.FreqMax / 700);
140-
double[] binStartFreqs = new double[melBinCount + 1];
141-
for (int i = 0; i < melBinCount + 1; i++)
142-
{
143-
double thisMel = maxMel * i / melBinCount;
144-
binStartFreqs[i] = 700 * (Math.Pow(10, thisMel / 2595d) - 1);
145-
}
146-
147-
// calculate mel FFT for each FFT
148138
var fftsMel = new List<double[]>();
149-
for (int fftIndex = 0; fftIndex < Width; fftIndex++)
150-
{
151-
double[] thisFftMel = new double[melBinCount];
152-
for (int binIndex = 0; binIndex < binStartFreqs.Length - 2; binIndex++)
153-
{
154-
double freqLow = binStartFreqs[binIndex];
155-
double freqHigh = binStartFreqs[binIndex + 2];
156-
int indexLow = (int)(Height * freqLow / settings.FreqMax);
157-
int indexHigh = (int)(Height * freqHigh / settings.FreqMax);
158-
int indexSpan = indexHigh - indexLow;
159-
160-
double binScaleSum = 0;
161-
for (int i = 0; i < indexSpan; i++)
162-
{
163-
double frac = (double)i / indexSpan;
164-
frac = (frac < .5) ? frac * 2 : 1 - frac;
165-
binScaleSum += frac;
166-
thisFftMel[binIndex] += ffts[fftIndex][indexLow + i] * frac;
167-
}
168-
thisFftMel[binIndex] /= binScaleSum;
169-
}
170-
fftsMel.Add(thisFftMel);
171-
}
139+
foreach(var fft in ffts)
140+
fftsMel.Add(FftSharp.Transform.MelScale(fft, SampleRate, melBinCount));
172141

173142
return fftsMel;
174143
}

0 commit comments

Comments
 (0)