@@ -29,16 +29,27 @@ public class SFF
29
29
public bool Decibels { get ; private set ; }
30
30
public bool IsMel { get { return MelBinCount > 0 ; } }
31
31
32
- // FFT details
33
- public int FftHeight { get { return Ffts [ 0 ] . Length ; } }
34
- public int FftWidth { get { return Ffts . Count ; } }
32
+ // image details
35
33
public List < double [ ] > Ffts { get ; private set ; }
34
+ public int ImageHeight { get { return ( Ffts is null ) ? 0 : Ffts [ 0 ] . Length ; } }
35
+ public int ImageWidth { get { return ( Ffts is null ) ? 0 : Ffts . Count ; } }
36
+
37
+ [ Obsolete ( "use ImageWidth" , error : false ) ]
38
+ public int FftWidth { get { return ImageWidth ; } }
39
+
40
+ [ Obsolete ( "use ImageHeight" , error : false ) ]
41
+ public int FftHeight { get { return ImageHeight ; } }
36
42
37
43
public SFF ( )
38
44
{
39
45
40
46
}
41
47
48
+ public override string ToString ( )
49
+ {
50
+ return $ "SFF { ImageWidth } x{ ImageHeight } ";
51
+ }
52
+
42
53
public SFF ( string loadFilePath )
43
54
{
44
55
Load ( loadFilePath ) ;
@@ -191,25 +202,25 @@ public void Save(string filePath)
191
202
192
203
// ADD NEW VALUES HERE (after byte 80)
193
204
Array . Copy ( BitConverter . GetBytes ( MelBinCount ) , 0 , header , 84 , 4 ) ;
194
- Array . Copy ( BitConverter . GetBytes ( FftHeight ) , 0 , header , 88 , 4 ) ;
195
- Array . Copy ( BitConverter . GetBytes ( FftWidth ) , 0 , header , 92 , 4 ) ;
205
+ Array . Copy ( BitConverter . GetBytes ( ImageHeight ) , 0 , header , 88 , 4 ) ;
206
+ Array . Copy ( BitConverter . GetBytes ( ImageWidth ) , 0 , header , 92 , 4 ) ;
196
207
197
208
// binary data location (keep this at byte 80)
198
209
int firstDataByte = header . Length ;
199
210
Array . Copy ( BitConverter . GetBytes ( firstDataByte ) , 0 , header , 80 , 4 ) ;
200
211
201
212
// create bytes to write to file
202
- int dataPointCount = FftHeight * FftWidth ;
213
+ int dataPointCount = ImageHeight * ImageWidth ;
203
214
int bytesPerPoint = bytesPerValue * valuesPerPoint ;
204
215
byte [ ] fileBytes = new byte [ header . Length + dataPointCount * bytesPerPoint ] ;
205
216
Array . Copy ( header , 0 , fileBytes , 0 , header . Length ) ;
206
217
207
218
// copy data into byte area
208
- int bytesPerColumn = FftHeight * bytesPerPoint ;
209
- for ( int x = 0 ; x < FftWidth ; x ++ )
219
+ int bytesPerColumn = ImageHeight * bytesPerPoint ;
220
+ for ( int x = 0 ; x < ImageWidth ; x ++ )
210
221
{
211
222
int columnOffset = bytesPerColumn * x ;
212
- for ( int y = 0 ; y < FftHeight ; y ++ )
223
+ for ( int y = 0 ; y < ImageHeight ; y ++ )
213
224
{
214
225
int rowOffset = y * bytesPerPoint ;
215
226
int valueOffset = firstDataByte + columnOffset + rowOffset ;
@@ -228,11 +239,11 @@ public void Save(string filePath)
228
239
229
240
double maxFreq = SampleRate / 2 ;
230
241
double maxMel = FftSharp . Transform . MelFromFreq ( maxFreq ) ;
231
- double frac = ( FftHeight - y ) / ( double ) FftHeight ;
242
+ double frac = ( ImageHeight - y ) / ( double ) ImageHeight ;
232
243
double freq = IsMel ? FftSharp . Transform . MelToFreq ( frac * maxMel ) : frac * maxFreq ;
233
244
234
245
double mag = double . NaN ;
235
- try { mag = Ffts [ x ] [ FftHeight - y - 1 ] ; } catch { }
246
+ try { mag = Ffts [ x ] [ ImageHeight - y - 1 ] ; } catch { }
236
247
237
248
return ( timeSec , freq , mag ) ;
238
249
}
0 commit comments