@@ -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