function ulf_read_mud_new, FilePath, FromSecond, ToSecond, sample_rate ;Created ;Mark Chutter ;April 30, 2020 ;FilePath='c:\LYR_2007_01.MUD' ;FromSecond = long(long(3600) * 24) ;ToSecond = long(long(3600) * 24 * 2) ; open the MUD file: dat_fh = 1 openr, dat_fh, filepath, /get_lun ; read header FileFlag = bytarr(4) NumChannels = 0 SampleRate = 0 SampleSize = 0 StartYear = 0 StartMonth = 0 StartDay = 0 StationName = bytarr(4) NumSeconds = long(0) Reserved1 = long(0) Reserved2 = long(0) readu, dat_fh, FileFlag readu, dat_fh, NumChannels readu, dat_fh, SampleRate readu, dat_fh, SampleSize readu, dat_fh, StartYear readu, dat_fh, StartMonth readu, dat_fh, StartDay readu, dat_fh, StationName readu, dat_fh, NumSeconds readu, dat_fh, Reserved1 readu, dat_fh, Reserved2 ; set sample buffer size SampleBufferSize = SampleRate * SampleSize / 8 ; allocate data array Data_Array = fltarr(2, (long(ToSecond)-long(FromSecond)) * sample_rate) ; allocate temp buffer Buffer_Array = intarr(10, 2) ; move to the 1st data position Offset = long(32) Offset = Offset + FromSecond * (4 + SampleBufferSize * NumChannels) POINT_LUN, dat_fh, Offset ; read samples Second = long(0) FOR n = long(0), long(ToSecond)-long(FromSecond)-1 DO BEGIN readu, dat_fh, Second ; read 10-sample chunk of 2 channels readu, dat_fh, Buffer_Array ; assign the samples to the data array FOR m = 0, 9 DO BEGIN Data_Array(0, n * 10 + m) = $ ((Buffer_Array(m, 0) and 'fff'x) - 2048) / 204.8 Data_Array(1, n * 10 + m) = $ ((Buffer_Array(m, 1) and 'fff'x) - 2048) / 204.8 ENDFOR ENDFOR ; close the file free_lun, dat_fh return, Data_Array end