let version = "Faustine: 0.0.1";;
-let set_GC () =
+ let set_GC () =
let _ = Gc.set { (Gc.get())
with Gc.minor_heap_size = 0xFFFFFF } in
let _ = Gc.set { (Gc.get())
let basename_output = ref "output";;
let option_usage = "usage: " ^ Sys.argv.(0)
- ^ " [-d dsp_src] [-i input] [-t time] [--odir dir] [--oformat wav/csv] [--obasename name]";;
+ ^ " [-f dsp_src] [-i input] [-l length] [--odir dir] [--oformat wav/csv] [--obasename name]";;
let option_unknown =
fun x -> raise (Arg.Bad ("Bad argument : " ^ x))
let speclist = [
- ("-d", Arg.String (fun s -> path_dsp := s), ": set dsp source file");
+ ("-f", Arg.String (fun s -> path_dsp := s), ": faust .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");
+ ("-l", Arg.Int (fun i -> time_max := i), ": maximun number of output samples");
("--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 () =
-
+(*
+ let () = print_endline (Scanf.Scanning.name_of_input (Scanf.Scanning.stdin)) in
+ let () = print_endline (Unix.readlink "/proc/self/fd/0") in
+ let () = print_endline (Unix.readlink "/proc/self/fd/1") in
+ let () = print_endline (Unix.readlink "/proc/self/fd/2") in
+*)
let () = Arg.parse speclist option_unknown option_usage in
let _ = Sys.signal Sys.sigalrm Sys.Signal_ignore in
let _ = set_GC () in
let () = print_string(" Faustine -> Reading input ...") in
- let tic0 = Sys.time () in
+ let tic0 = Unix.time () in
let input = io#read !inputs in
- let toc0 = Sys.time () in
+ let toc0 = Unix.time () in
let () = print_endline(" Done. (duration: " ^ (string_of_float (toc0 -. tic0)) ^ "s.)") in
let () = print_string(" Faustine -> Preprocessing...") in
- let tic1 = Sys.time () in
+ let tic1 = Unix.time () in
let faust_core = Preprocess.preprocess !path_dsp in
- let toc1 = Sys.time () in
+ let toc1 = Unix.time () in
let () = print_endline(" Done. (duration: " ^ (string_of_float (toc1 -. tic1)) ^ "s.)") in
let () = print_string(" Faustine -> Constructing process...") in
- let tic2 = Sys.time () in
+ let tic2 = Unix.time () in
let faust_exp = exp_of_string faust_core in
let proc = (new proc_factory)#make faust_exp in
- let toc2 = Sys.time () in
+ let toc2 = Unix.time () in
let () = print_endline(" Done. (duration: " ^ (string_of_float (toc2 -. tic2)) ^ "s.)") in
let () = print_string(" Faustine -> Constructing signals...") in
- let tic3 = Sys.time () in
+ let tic3 = Unix.time () in
let output = proc#eval input in
- let toc3 = Sys.time () in
+ let toc3 = Unix.time () in
let () = print_endline(" Done. (duration: " ^ (string_of_float (toc3 -. tic3)) ^ "s.)") in
let () = print_string(" Faustine -> Evaluating...") in
- let tic4 = Sys.time () in
+ let tic4 = Unix.time () in
let data = output#output !time_max in
let rates = output#frequency in
- let toc4 = Sys.time () in
+ let toc4 = Unix.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 tic5 = Unix.time () in
let output_paths = io#write rates data in
- let toc5 = Sys.time () in
+ let toc5 = Unix.time () in
let () = print_endline(" Done. (duration: " ^ (string_of_float (toc5 -. tic5)) ^ "s.)") in
let _ = Array.map print_endline
tri_min = min, _ : min;
tri_mins(n) = par(i, n, tri_min);
-dilating(n) = strel_shift_dilation, _, strel_shift_dilation : #, _ : # : spray_by_three(n) : tri_maxs(n) : nconcat(n);
-eroding(n) = strel_shift_erosion, _, strel_shift_erosion : #, _ : # : spray_by_three(n) : tri_mins(n) : nconcat(n);
+dilating(n) = strel_shift_dilation, _, strel_shift_dilation : #, _ : # : spray_by_three(n) : tri_maxs(n) : nconcat(n); // vector io
+eroding(n) = strel_shift_erosion, _, strel_shift_erosion : #, _ : # : spray_by_three(n) : tri_mins(n) : nconcat(n); // vector io
-dilation_line(x, y) = serialize : dilating(x) : vectorize(y);
-erosion_line(x, y) = serialize : eroding(x) : vectorize(y);
+dilation_line(x, y) = serialize : dilating(x) : vectorize(y); // matrix io
+erosion_line(x, y) = serialize : eroding(x) : vectorize(y); // matrix io
-dilation_column(x, y) = matrix_transpose(y, x) : serialize : dilating(y) : vectorize(x) : matrix_transpose(x, y);
-erosion_column(x, y) = matrix_transpose(y, x) : serialize : eroding(y) : vectorize(x) : matrix_transpose(x, y);
+dilation_column(x, y) = matrix_transpose(y, x) : serialize : dilating(y) : vectorize(x) : matrix_transpose(x, y);
+erosion_column(x, y) = matrix_transpose(y, x) : serialize : eroding(y) : vectorize(x) : matrix_transpose(x, y);
-dilation_square(x, y) = dilation_line(x, y) : dilation_column(x, y);
-erosion_square(x, y) = erosion_line(x, y) : erosion_column(x, y);
+dilation_square(x, y) = dilation_line(x, y) : dilation_column(x, y);
+erosion_square(x, y) = erosion_line(x, y) : erosion_column(x, y);
cross = _, _ <: !, _, _, !;
-dilations_line(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_line(x, y))~_), (iter - 1)) : rdtable : serialize;
+dilations_line(x, y, iter) = _ : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_line(x, y))~_), (iter - 1)) : rdtable;
-erosions_line(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_line(x, y))~_), (iter - 1)) : rdtable : serialize;
+erosions_line(x, y, iter) = _ : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_line(x, y))~_), (iter - 1)) : rdtable;
-dilations_column(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_column(x, y))~_), (iter - 1)) : rdtable : serialize;
+dilations_column(x, y, iter) = _ : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_column(x, y))~_), (iter - 1)) : rdtable;
-erosions_column(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_column(x, y))~_), (iter - 1)) : rdtable : serialize;
+erosions_column(x, y, iter) = _ : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_column(x, y))~_), (iter - 1)) : rdtable;
-dilations_square(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_square(x, y))~_), (iter - 1)) : rdtable : serialize;
+dilations_square(x, y, iter) = _ : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : dilation_square(x, y))~_), (iter - 1)) : rdtable;
-erosions_square(x, y, iter) = _ : vectorize(y) : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_square(x, y))~_), (iter - 1)) : rdtable : serialize;
+erosions_square(x, y, iter) = _ : (iter, ((cross : ((0, 1 : prefix), _, _ : select2) : erosion_square(x, y))~_), (iter - 1)) : rdtable;
opening_line(x, y, iter) = erosions_line(x, y, iter) : dilations_line(x, y, iter);
closing_line(x, y, iter) = dilations_line(x, y, iter) : erosions_line(x, y, iter);
opening_square(x, y, iter) = erosions_square(x, y, iter) : dilations_square(x, y, iter);
closing_square(x, y, iter) = dilations_square(x, y, iter) : erosions_square(x, y, iter);
-and = *;
-threshold(x, low, high) = _ <: (_, (low : vectorize(x)) : >), (_, (high : vectorize(x)) : <) : and;
+threshold(x, y, low, high) = _ <: (_, (low : vectorize(x) : vectorize(y)) : >), (_, (high : vectorize(x) : vectorize(y)) : <) : &;
-//licenceplate(x, y) = _ <: (opening_line(x, y, 15), closing_line(x, y, 8) : threshold(x, 1, 50), threshold(x, 150, 255) : and : opening_column(x, y, 4) : opening_line(x, y, 4) : dilations_square(x, y, 2)), _ : and;
+mask_adjusting(x, y, o7, o8, d9, d10) = opening_column(x, y, o7) : opening_line(x, y, o8) : dilations_square(x, y, d9) : dilations_line(x, y, d10);
-licenceplate(x, y, o1, c2, t3, t4, t5, t6, o7, o8, d9, d10) = _ <: (opening_line(x, y, o1), closing_line(x, y, c2) : threshold(x, t3, t4), threshold(x, t5, t6) : and : opening_column(x, y, o7) : opening_line(x, y, o8) : dilations_square(x, y, d9) : dilations_line(x, y, d10)), _ : and;
-
-//licenceplate(x, y) = _ <: (opening_line(x, y, 4), closing_line(x, y, 2) : threshold(x, 1, 50), threshold(x, 150, 255) : and : opening_column(x, y, 4) : opening_line(x, y, 4) : dilations_square(x, y, 4)), _ : and;
+licenceplate(x, y, o1, c2, t3, t4, t5, t6, o7, o8, d9, d10) = vectorize(y) <: (opening_line(x, y, o1), closing_line(x, y, c2) : threshold(x, y, t3, t4), threshold(x, y, t5, t6) : & : mask_adjusting(x, y, o7, o8, d9, d10)), _ : * : serialize;
//process = dilations_line(8, 8, 3);
//process = erosions(8, 8, 3);
//process = open(8, 8, 2);
//process = close(8, 8, 5);
-//process = licenceplate(4, 4, 15, 8, 1, 50, 150, 255, 4, 4, 2, 20);
+//process = licenceplate(4, 4, 1, 4, 1, 50, 150, 255, 1, 1, 5, 20);