@@ -175,15 +175,16 @@ public sealed class Gen2NoteFinderDFT
175
175
RawBinWidths = new float [ BinCount ] ;
176
176
177
177
uint MaxAudioBufferSize = 0 ;
178
- for ( uint Bin = 0 ; Bin < BinCount ; Bin ++ )
178
+ for ( int Bin = 0 ; Bin < BinCount ; Bin ++ )
179
179
{
180
180
float BinFrequency ;
181
181
uint ThisBufferSize ;
182
182
float ThisOctaveStart = StartFrequency * MathF . Pow ( 2 , Bin / BinsPerOctave ) ;
183
183
BinFrequency = CalculateNoteFrequency ( StartFrequency , BinsPerOctave , Bin ) ;
184
- float NextBinFrequency = CalculateNoteFrequency ( StartFrequency , BinsPerOctave , Bin + 2 ) ;
184
+ float NextBinFrequencyUp = CalculateNoteFrequency ( StartFrequency , BinsPerOctave , Bin + 1 ) ;
185
+ float NextBinFrequencyDown = CalculateNoteFrequency ( StartFrequency , BinsPerOctave , Bin - 1 ) ;
185
186
//float IdealWindowSize = WindowSizeForBinWidth(TopOctaveNextBinFreq - TopOctaveBinFreq); // TODO: Add scale factor to shift this from no overlap to -3dB point
186
- ThisBufferSize = RoundedWindowSizeForBinWidth ( NextBinFrequency - BinFrequency , BinFrequency , SampleRate ) ;
187
+ ThisBufferSize = RoundedWindowSizeForBinWidth ( NextBinFrequencyUp - NextBinFrequencyDown , BinFrequency , SampleRate ) ;
187
188
188
189
RawBinWidths [ Bin ] = MathF . Log2 ( ( BinFrequency + BinWidthAtWindowSize ( ThisBufferSize , SampleRate ) ) / BinFrequency ) * BinsPerOctave ;
189
190
@@ -627,7 +628,7 @@ public void CalculateOutput()
627
628
{
628
629
float OutBinVal = this . RawBinMagnitudes [ Bin ] * this . LoudnessCorrectionFactors [ Bin ] ;
629
630
this . OctaveBinValues [ Bin % BinsPerOctave ] += OutBinVal / this . OctaveCount ;
630
- this . AllBinValues [ Bin + 1 ] = MathF . Max ( 0 , OutBinVal - 0.08F ) ;
631
+ this . AllBinValues [ Bin + 1 ] = MathF . Max ( 0 , OutBinVal ) ;
631
632
}
632
633
}
633
634
@@ -735,8 +736,8 @@ private static uint RoundedWindowSizeForBinWidth(float binWidth, float frequency
735
736
return ( uint ) Math . Min ( ABSOLUTE_MAX_WINDOW_SIZE , MathF . Round ( ( MathF . Max ( MinWindowSizePeriods , MathF . Min ( MaxWindowSizePeriods , MathF . Round ( PeriodsInWindow ) ) ) * PeriodInSamples ) + ( PeriodInSamples * 0.5F ) ) ) ;
736
737
}
737
738
738
- private static float CalculateNoteFrequency ( float octaveStart , uint binsPerOctave , uint binIndex ) => octaveStart * GetNoteFrequencyMultiplier ( binsPerOctave , binIndex ) ;
739
- private static float GetNoteFrequencyMultiplier ( uint binsPerOctave , uint binIndex ) => MathF . Pow ( 2F , ( float ) binIndex / binsPerOctave ) ;
739
+ private static float CalculateNoteFrequency ( float octaveStart , uint binsPerOctave , int binIndex ) => octaveStart * GetNoteFrequencyMultiplier ( binsPerOctave , binIndex ) ;
740
+ private static float GetNoteFrequencyMultiplier ( uint binsPerOctave , int binIndex ) => MathF . Pow ( 2F , ( float ) binIndex / binsPerOctave ) ;
740
741
741
742
/// <summary> Gets a factor to multiply the output amplitude by to correct for percieved loudness. </summary>
742
743
/// <remarks> Output is based on ISO 226:2023 data, and assumes a fixed loudness, and that the item being multiplied is sqrt(dB level). </remarks>
0 commit comments