function readmud_gak, FilePath, FromSecond, ToSecond, sample_rate ;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(20, 2) ; move to the 1st data position Offset = long(32) Offset = Offset + FromSecond * (4 + SampleBufferSize * NumChannels) POINT_LUN, dat_fh, Offset ; read samples Second = 0L FOR n = 0L, (long(ToSecond)-long(FromSecond)) - 1L DO BEGIN readu, dat_fh, Second ; read 20-sample chunk of 2 channels readu, dat_fh, Buffer_Array ; assign the samples to the data array FOR m = 0, 19 DO BEGIN Data_Array(0, n * 20 + m) = (Buffer_Array(m, 0) + 2048.0) / 4096.0 * 20.0 - 10.0; Data_Array(1, n * 20 + m) = (Buffer_Array(m, 1) + 2048.0) / 4096.0 * 20.0 - 10.0; ENDFOR ENDFOR ; close the file free_lun, dat_fh return, Data_Array end