*)
open Aux;;
+open Beam;;
open Process;;
open Faustio;;
let inputs = ref [];;
let time_max = ref 0xFFFF;;
let dir_output = ref "";;
-let format_output = ref "wav";;
-let basename_output = ref "output";;
+let format_output = ref "";;
+let basename_output = ref "";;
+let output = ref "";;
let option_usage = "usage: " ^ Sys.argv.(0)
^ " [-f dsp_src] [-i input] [-l length] [--odir dir] [--oformat wav/csv] [--obasename name]";;
("--obasename", Arg.String (fun s -> basename_output := s), ": set output basename");
];;
+let file_of_path : string -> string =
+ fun (path : string) ->
+ let fragments = Str.split (Str.regexp "/") path in
+ let n = List.length fragments in
+ List.nth fragments (n - 1);;
+
+let stdinput = fun (x : unit) ->
+ let path = Unix.readlink "/proc/self/fd/0" in
+ if path <> "/dev/pts/4" then
+ ( incr size_input;
+ inputs := !inputs @ [path] )
+ else ();;
+
+let stdoutput = fun (x : unit) ->
+ let path = Unix.readlink "/proc/self/fd/1" in
+ if path <> "/dev/pts/4" then output := path
+ else ();;
+
+let stdio = fun (x : unit) ->
+ stdinput ();
+ stdoutput ();;
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 () = stdio () in
let _ = Sys.signal Sys.sigalrm Sys.Signal_ignore in
let _ = set_GC () in
let io = new iomanager in
- let () = io#set !dir_output !format_output !basename_output in
+ let () = io#set !output !dir_output !format_output !basename_output in
- let () = print_string(" Faustine -> Reading input ...") in
+ let () = output_string stderr ("\n Faustine -> Reading input ...") in
let tic0 = Unix.time () in
- let input = io#read !inputs in
+ let input : beam = io#read !inputs in
let toc0 = Unix.time () in
- let () = print_endline(" Done. (duration: " ^ (string_of_float (toc0 -. tic0)) ^ "s.)") in
+ let () = output_string stderr (" Done. (duration: " ^ (string_of_float (toc0 -. tic0)) ^ "s.)\n") in
- let () = print_string(" Faustine -> Preprocessing...") in
+ let () = output_string stderr (" Faustine -> Preprocessing...") in
let tic1 = Unix.time () in
let faust_core = Preprocess.preprocess !path_dsp in
let toc1 = Unix.time () in
- let () = print_endline(" Done. (duration: " ^ (string_of_float (toc1 -. tic1)) ^ "s.)") in
+ let () = output_string stderr (" Done. (duration: " ^ (string_of_float (toc1 -. tic1)) ^ "s.)\n") in
- let () = print_string(" Faustine -> Constructing process...") in
+ let () = output_string stderr (" Faustine -> Constructing process...") 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 = Unix.time () in
- let () = print_endline(" Done. (duration: " ^ (string_of_float (toc2 -. tic2)) ^ "s.)") in
+ let () = output_string stderr (" Done. (duration: " ^ (string_of_float (toc2 -. tic2)) ^ "s.)\n") in
- let () = print_string(" Faustine -> Constructing signals...") in
+ let () = output_string stderr (" Faustine -> Constructing signals...") in
let tic3 = Unix.time () in
- let output = proc#eval input in
+ let output : beam = proc#eval input in
let toc3 = Unix.time () in
- let () = print_endline(" Done. (duration: " ^ (string_of_float (toc3 -. tic3)) ^ "s.)") in
+ let () = output_string stderr (" Done. (duration: " ^ (string_of_float (toc3 -. tic3)) ^ "s.)\n") in
- let () = print_string(" Faustine -> Evaluating...") in
+ let () = output_string stderr (" Faustine -> Evaluating...") in
let tic4 = Unix.time () in
let data = output#output !time_max in
let rates = output#frequency in
let toc4 = Unix.time () in
- let () = print_endline(" Done. (duration: " ^ (string_of_float (toc4 -. tic4)) ^ "s.)") in
+ let () = output_string stderr (" Done. (duration: " ^ (string_of_float (toc4 -. tic4)) ^ "s.)\n") in
- let () = print_string(" Faustine -> Writing output...") in
+ let () = output_string stderr (" Faustine -> Writing output...") in
let tic5 = Unix.time () in
let output_paths = io#write rates data in
let toc5 = Unix.time () in
- let () = print_endline(" Done. (duration: " ^ (string_of_float (toc5 -. tic5)) ^ "s.)") in
+ let () = output_string stderr (" Done. (duration: " ^ (string_of_float (toc5 -. tic5)) ^ "s.)\n") in
- let _ = Array.map print_endline
+ let _ = Array.map (output_string stderr)
(Array.map decorate output_paths) in
();;