*-----------------------------------------------------------------------
* t_filt - filter an audio file
*-----------------------------------------------------------------------
      PROGRAM TFILT
       IMPLICIT NONE
       INTEGER LLIM, RATE
       PARAMETER (RATE = 44100)
       PARAMETER (LLIM = RATE * 10)  ! 10 second max

       INTEGER J, IERR, L
       DOUBLE PRECISION S(LLIM), SFILT(LLIM),
     $                  FSAMP, FPASS, FSTOP, HPASS, HSTOP
       LOGICAL FEXIST
       CHARACTER*32 IFIL

*             Inquire of input file
       IFIL = 'input.raw'
       INQUIRE (FILE=IFIL, EXIST=FEXIST, IOSTAT=IERR)
       IF (IERR .NE. 0) PRINT *, 'trouble inquiring of input file'
       IF (.NOT. FEXIST) PRINT *, 'file not found!'
       CALL LFIL (IFIL, L, IERR)
       IF (IERR .NE. 0) PRINT *, 'trouble getting file length!'
       L = L / 2

*             Read input
       CALL RMONO (IFIL, S, L, IERR)
       IF (IERR .NE. 0) PRINT *, 'trouble reading input file'

*             Low-pass filter
       DO J = 1, L
         SFILT(J) = S(J)
       END DO
       FSAMP = DBLE(RATE)
       FPASS = 1000.D0
       FSTOP = 1100.D0
       HPASS = 0.95D0
       HSTOP = 0.05D0
       CALL BFILT (SFILT, L, FSAMP, FPASS, FSTOP, HPASS, HSTOP, IERR)
       PRINT *, 'lo pass, bfilt returns #', IERR
       CALL WMONO ('lowpass.raw', SFILT, L, IERR)
       PRINT *, 'wmono returns #', IERR

*             High-pass filter
       DO J = 1, L
         SFILT(J) = S(J)
       END DO
       FSTOP = 900.D0
       HPASS = 0.9D0
       HSTOP = 0.1D0
       CALL BFILT (SFILT, L, FSAMP, FPASS, FSTOP, HPASS, HSTOP, IERR)
       PRINT *, 'hi pass, bfilt returns #', IERR
       CALL WMONO ('highpass.raw', SFILT, L, IERR)
       PRINT *, 'wmono returns #', IERR

*             Bandpass filter
       DO J = 1, L
         SFILT(J) = S(J)
       END DO
       FPASS = 1050.D0
       FSTOP = 1100.D0
       HPASS = 0.99D0
       HSTOP = 0.1D0
       CALL BFILT (SFILT, L, FSAMP, FPASS, FSTOP, HPASS, HSTOP, IERR)
       PRINT *, 'bandpass lo, bfilt returns #', IERR
       FPASS = 950.D0
       FSTOP = 900.D0
       CALL BFILT (SFILT, L, FSAMP, FPASS, FSTOP, HPASS, HSTOP, IERR)
       PRINT *, 'bandpass hi, bfilt returns #', IERR
       CALL WMONO ('bandpass.raw', SFILT, L, IERR)
       PRINT *, 'wmono returns #', IERR

       STOP 'program complete'
      END  ! of t_filt


*-----------------------------------------------------------------------
*        Find the length of a given file (wrapper around STAT)
*-----------------------------------------------------------------------
      SUBROUTINE LFIL (FILNAM, N, IERR)
       IMPLICIT NONE
       CHARACTER*(*) FILNAM
       INTEGER N, IERR

*         Local variables
       INTEGER SARRAY(13)

*           ask system for file length
       CALL STAT (FILNAM, SARRAY, IERR)
       IF (IERR .NE. 0) THEN
         PRINT *, 'trouble getting length of file: ', FILNAM
         RETURN
       END IF
       N = SARRAY(8)
       RETURN
      END  ! of LFIL
