let read_input_wave = fun argv ->
        let n_input = (Array.length argv) - 3 in
        if n_input < 0 then 
                raise Missing_Expression
        else if n_input = 0 then 
                ([], [])
        else
                (* open wave file *)
                let file_string_array = Array.sub argv 3 n_input in
                let make_chemin s = io_macro_to_string Input_Route_string ^ s in
                let file_chemin_string_array = Array.map make_chemin file_string_array in
                let file_array = Array.map Sndfile.openfile file_chemin_string_array in
                let file_list = Array.to_list file_array in

                (* prepare data container *)
                let frames_array = Array.map Int64.to_int (Array.map Sndfile.frames file_array) in
                let create_data_array num = Array.create num 1. in
                let data_float_array_array = Array.map create_data_array frames_array in
                let data_float_array_list = Array.to_list data_float_array_array in
                
                (* read sample rates and data *)
                let rate_list = List.map Sndfile.samplerate file_list in
                let _ = List.map2 Sndfile.read file_list data_float_array_list in
                let _ = List.map Sndfile.close file_list in
                (rate_list, data_float_array_list)