X-Git-Url: https://svn.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/5ffc68ce0ca4af8e3139f8df236b19edae9e4cd5..f3ad8b46ca1621f4a90db91ed6f9c1eceac96c4c:/interpretor/main.ml

diff --git a/interpretor/main.ml b/interpretor/main.ml
index ee77898..21c2a8e 100644
--- a/interpretor/main.ml
+++ b/interpretor/main.ml
@@ -11,7 +11,7 @@ open Faustio;;
 
 exception Missing_Expression;;
 
-let time_maximum = 0xFFF;;
+let version = "Faustine: 0.0.1";;
 
 let set_GC () = 
 	let _ = Gc.set { (Gc.get()) 
@@ -21,55 +21,49 @@ let set_GC () =
 	let _ = Gc.set { (Gc.get()) 
 		       with Gc.space_overhead = 100 } in
 	let _ = Gc.set { (Gc.get()) 
-		       with Gc.max_overhead = 0xFFFFF } in
+		       with Gc.max_overhead = 0xFFF } in
 	let _ = Gc.set { (Gc.get()) 
 		       with Gc.stack_limit = 0xFFFFF } in
 	let _ = Gc.set { (Gc.get()) 
-		       with Gc.allocation_policy = 0 } in
+		       with Gc.allocation_policy = 1 } in
 	() ;;
 
-let has_dsp = ref false;;
 let path_dsp = ref "";;
-let num_inwav = ref 0;;
-let inwavs = ref [];;
-let num_incsv = ref 0;;
-let incsvs = ref [];;
-let outwav = ref false;;
-let outcsv = ref false;;
- 
+let size_input = ref 0;;
+let inputs = ref [];;
+let time_max = ref 0xFFFF;;
+let dir_output = ref "";;
+let format_output = ref "wav";;
+let basename_output = ref "output";;
+
 let option_usage = "usage: " ^ Sys.argv.(0) 
-  ^ " [-ow] [-oc] [-d string] [-iw string] [-ic string]";;
+  ^ " [-d dsp_src] [-i input] [-t time] [--odir dir] [--oformat wav/csv] [--obasename name]";;
 
 let option_unknown = 
   fun x -> raise (Arg.Bad ("Bad argument : " ^ x))
 
 let speclist = [
-  ("-ow", Arg.Unit (fun () -> outwav := true), ": output wave files");
-  ("-oc", Arg.Unit (fun () -> outcsv := true), ": output csv files");
-  ("-d", Arg.String (fun s -> has_dsp := true; 
-    path_dsp := s), ": set dsp source file");
-  ("-iw", Arg.String (fun s -> incr num_inwav; 
-    inwavs := !inwavs @ [s]), ": set input wave file");
-  ("-ic", Arg.String (fun s -> incr num_incsv; 
-    incsvs := !incsvs @ [s]), ": set input csv file");
+  ("-d", Arg.String (fun s -> path_dsp := s), ": set dsp source file");
+  ("-i", Arg.String (fun s -> incr size_input; inputs := !inputs @ [s]), ": set input wave file");
+  ("-t", Arg.Int (fun i -> time_max := i), ": set max output length");
+  ("--odir", Arg.String (fun s -> dir_output := s), ": set output directory");
+  ("--oformat", Arg.String (fun s -> format_output := s), ": set output format");
+  ("--obasename", Arg.String (fun s -> basename_output := s), ": set output basename");
   ];;
  
 
 let main () = 
 
-        (* ignore system alarm clock *)
+	let () = Arg.parse speclist option_unknown option_usage in
         let _ = Sys.signal Sys.sigalrm Sys.Signal_ignore in
 	let _ = set_GC () in
-	let () = Arg.parse speclist option_unknown option_usage in
+	let io = new iomanager in
+	let () = io#set !dir_output !format_output !basename_output in
 
 
-	let () = print_string("    Faustine -> Reading input files...") in
+	let () = print_string("    Faustine -> Reading input ...") in
 	let tic0 = Sys.time () in
-	let wave = new waveio in
-	let csv = new csvio in
-	let input_wave = wave#read (Array.of_list !inwavs) in
-	let input_csv = csv#read (Array.of_list !incsvs) in
-	let input = input_wave#append input_csv in
+	let input = io#read !inputs in
 	let toc0 = Sys.time () in
 	let () = print_endline(" Done. (duration: " ^ (string_of_float (toc0 -. tic0)) ^ "s.)") in
 
@@ -89,68 +83,30 @@ let main () =
 	let () = print_endline(" Done. (duration: " ^ (string_of_float (toc2 -. tic2)) ^ "s.)") in
 
 
-	let () = print_string("    Faustine -> Evaluation...") in
+	let () = print_string("    Faustine -> Evaluating...") in
 	let tic3 = Sys.time () in
 	let output = proc#eval input in
 	let toc3 = Sys.time () in
 	let () = print_endline(" Done. (duration: " ^ (string_of_float (toc3 -. tic3)) ^ "s.)") in
 
 
-
-	let data = output#output time_maximum in
+	let () = print_string("    Faustine -> Calculating...") in
+	let tic4 = Sys.time () in
+	let data = output#output !time_max in
 	let rates = output#frequency in
-
-	let output_wave_paths = wave#write rates data in
-	let output_csv_paths = csv#write rates data in
-	let _ = Array.map print_endline 
-	    (Array.map decorate output_wave_paths) in
-	let _ = Array.map print_endline 
-	    (Array.map decorate output_csv_paths) in
-	();;
-
-
-
-
-
-
+	let toc4 = Sys.time () in
+	let () = print_endline(" Done. (duration: " ^ (string_of_float (toc4 -. tic4)) ^ "s.)") in
 
 
+	let () = print_string("    Faustine -> Writing output...") in
+	let tic5 = Sys.time () in
+	let output_paths = io#write rates data in
+	let toc5 = Sys.time () in
+	let () = print_endline(" Done. (duration: " ^ (string_of_float (toc5 -. tic5)) ^ "s.)") in
 
-
-
-
-
-
-
-(*
-	try
-	        (* preprocess *)
-		let dsp_file_route_string = (io_macro_to_string Dsp_Route_string) ^ Sys.argv.(3) in
-		let () = print_string("    Faustine -> Preprocessing...") in
-		let tic = Sys.time () in
-		let exp_string = Preprocess.preprocess(dsp_file_route_string) in
-		let toc = Sys.time () in
-		let () = print_endline(" Done.     (duration: " ^ 
-				       (string_of_float (toc -. tic)) ^ "s)") 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 option_out = "-wav" then
-		  write_output_wave output_channel_list output_rate_list output_float_array_list
-		else if option_out = "-csv" then
-		  write_output_csv output_channel_list output_float_array_list
-		else raise (Invalid_argument ("Unkown option: " ^ option_out))
-
-	with NotYetDone ->
-		print_endline("Operation not yet programed..");;
-
-*)
+	let _ = Array.map print_endline 
+	    (Array.map decorate output_paths) in
+	();;
 
 main();;