let main () = 

        (* ignore system alarm clock *)
        let _ = Sys.signal Sys.sigalrm Sys.Signal_ignore in

        (* set garbage collector *)
        let _ = set_GC () in

        (* read input wave files *)
        let (input_rate_list, input_float_array_list) = read_input_wave Sys.argv in
        
        (* select output type *)
        let output_type = Sys.argv.(1) in

        try
                (* preprocess *)
                let dsp_file_route_string = (io_macro_to_string Dsp_Route_string) ^ Sys.argv.(2) in
                let exp_string = Preprocess.preprocess(dsp_file_route_string) in

                (* parsing *)
                let exp_faust = exp_of_string exp_string in

                (* interpretation *)
                let (output_channel_list, output_rate_list, output_float_array_list) = 
                  interpreter exp_faust (input_rate_list, input_float_array_list) in

                (* make output wave files *)
                if output_type = "-wav" then
                  write_output_wave output_channel_list output_rate_list output_float_array_list
                else if output_type = "-txt" then
                  write_output_txt output_channel_list output_float_array_list
                else raise (Invalid_argument ("Unkown option: " ^ output_type))

        with NotYetDone ->
                print_endline("Operation not yet programed..")