-(**
- Module: Interpreter
- Description: Input wave -> interpretation -> output wave
- @author WANG Haisheng
- Created: 15/05/2013 Modified: 14/08/2013
-*)
-
-open Process;;
-open Faustio;;
-
-exception Missing_Expression;;
-
-let time_maximum = 0xFFF;;
-
-let set_GC () =
- let _ = Gc.set { (Gc.get())
- with Gc.minor_heap_size = 0xFFFFFF } in
- let _ = Gc.set { (Gc.get())
- with Gc.major_heap_increment = 0xFFFFFF } in
- let _ = Gc.set { (Gc.get())
- with Gc.space_overhead = 100 } in
- let _ = Gc.set { (Gc.get())
- with Gc.max_overhead = 0xFFFFF } in
- let _ = Gc.set { (Gc.get())
- with Gc.stack_limit = 0xFFFFF } in
- let _ = Gc.set { (Gc.get())
- with Gc.allocation_policy = 0 } 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 option_usage = "usage: " ^ Sys.argv.(0)
- ^ " [-ow] [-oc] [-d string] [-iw string] [-ic string]";;
-
-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");
- ];;
-
-
-let main () =
-
- (* ignore system alarm clock *)
- let _ = Sys.signal Sys.sigalrm Sys.Signal_ignore in
- let _ = set_GC () in
- let () = Arg.parse speclist option_unknown option_usage in
-
- let wave = new waveio in
- let input = wave#read (Array.of_list !inwavs) in
- let faust_core = Preprocess.preprocess !path_dsp in
- let faust_exp = exp_of_string faust_core in
- let proc = (new proc_factory)#make faust_exp in
- let output = proc#eval input in
- let data = output#output time_maximum in
- let rates = output#frequency in
-
- let output_paths = wave#write rates data in
- let _ = Array.map print_string output_paths 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..");;
-
-*)
-
-main();;
-