function readmud_sp, FilePath, FromSecond, ToSecond, sample_rate, station_id if station_id eq 'MCM' then num_channels = 2 if station_id eq 'SPA' then num_channels = 3 ; 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 if num_channels eq 2 then $ Data_Array = fltarr(2, (long(ToSecond)-long(FromSecond)) * sample_rate) if num_channels eq 3 then $ Data_Array = fltarr(3, (long(ToSecond)-long(FromSecond)) * sample_rate) ; allocate temp buffer if num_channels eq 2 then Buffer_Array = fltarr(10, 2) if num_channels eq 3 then Buffer_Array = fltarr(10, 3) ; 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) Data_Array(1, n * 10 + m) = Buffer_Array(m, 1) if num_channels eq 3 then begin Data_Array(2, n * 10 + m) = Buffer_Array(m, 2) endif ENDFOR ENDFOR ; close the file free_lun, dat_fh return, Data_Array end