Changeset 6694

Show
Ignore:
Timestamp:
06/29/09 10:53:47 (9 months ago)
Author:
smimram
Message:

Small progress...

Location:
trunk/liquidsoap/src
Files:
1 added
8 modified

Legend:

Unmodified
Added
Removed
  • trunk/liquidsoap/src/Makefile

    r6693 r6694  
    146146        visualization/video_volume.ml 
    147147 
    148 synth = synth/keyboard.ml 
     148synth = synth/synth.ml \ 
     149        synth/keyboard.ml 
    149150 
    150151liquidsoap_sources= $(tools) SVN.ml audio_converter.ml $(stream) \ 
  • trunk/liquidsoap/src/fmt.ml

    r6344 r6694  
    6767    "Video frames per second" 
    6868 
     69let conf_midi = 
     70  Conf.void ~p:(conf#plug "midi") "MIDI parameters" 
     71      ~comments:[ 
     72        "Parameters for MIDI in liquidsoap." 
     73      ] 
     74let conf_midi_channels = 
     75  Conf.int ~p:(conf_midi#plug "channels") ~d:0 
     76    "MIDI channels" 
     77 
    6978(* Global time speed. *) 
    7079let samples_per_second () = conf_samplerate#get 
     
    103112 
    104113let video_channels () = conf_video_channels#get 
     114 
     115let midi_channels () = conf_midi_channels#get 
  • trunk/liquidsoap/src/fmt.mli

    r5986 r6694  
    7373val video_width : unit -> int 
    7474val video_height : unit -> int 
     75 
     76 
     77val midi_channels : unit -> int 
  • trunk/liquidsoap/src/stream/frame.ml

    r6693 r6694  
    9090    Array.init (Fmt.video_channels ()) (fun _ -> RGB_t) 
    9191  in 
     92  let midi = 
     93    Array.init (Fmt.midi_channels ()) (fun _ -> Midi_t) 
     94  in 
    9295    create 
    93       (Array.append audio video) 
     96      (Array.append (Array.append audio video) midi) 
    9497      (Fmt.ticks_per_second ()) 
    9598      (Fmt.ticks_per_frame ()) 
  • trunk/liquidsoap/src/stream/mFrame.ml

    r6693 r6694  
    11include Frame 
     2 
     3let tracks f = 
     4  let tracks = Array.to_list (Frame.get_tracks f) in 
     5  let ans = 
     6    List.fold_left 
     7      (fun l t -> 
     8         match t with 
     9           | Midi m -> m::l 
     10           | _ -> l 
     11      ) [] tracks in 
     12    Array.of_list ans 
     13 
     14let set_events f e = () 
  • trunk/liquidsoap/src/stream/mFrame.mli

    r6693 r6694  
    1919val set_metadata     : t -> int -> metadata -> unit 
    2020val get_metadata     : t -> int -> metadata option 
     21 
     22val tracks : t -> (int * Midi.event) list ref array 
  • trunk/liquidsoap/src/stream/midi.ml

    r6693 r6694  
    2727type event = 
    2828  | Note_off of int * float 
    29   | Note_on of int * float (** Note on: note number (A4 = 91), velocity (between 0 and 1). *) 
     29  | Note_on of int * float (** Note on: note number (A4 = 69), velocity (between 0 and 1). *) 
    3030  | Aftertouch of int * float 
    3131  | Control_change of int * int 
  • trunk/liquidsoap/src/synth/keyboard.ml

    r6693 r6694  
    2121 *****************************************************************************) 
    2222 
     23let knotes = [|'a'; '?'; 'z'; '"'; 'e'; 'r'; '('; 't'; '-'; 'y'; '?'; 'u'; 'i'; '?'; 'o'; '?'; 'p'|] 
     24 
     25let array_index a x = 
     26  let ans = ref None in 
     27    for i = 0 to Array.length knotes - 1 do 
     28      if knotes.(i) = x then ans := Some i 
     29    done; 
     30    match !ans with 
     31      | Some i -> i 
     32      | None -> raise Not_found 
     33 
     34let note_of_char c = 
     35  array_index knotes c + 94 
     36 
    2337class keyboard = 
    2438object (self) 
     
    3448  val ev_m = Mutex.create () 
    3549 
    36   method add_event (e:Midi.event) = 
     50  method add_event (t:int) (e:Midi.event) = 
    3751    Mutex.lock ev_m; 
    38     ev <- (0,e)::ev; 
     52    ev <- (t,e)::ev; 
    3953    Mutex.unlock ev_m 
    4054 
     
    4963    let _ = 
    5064      Tutils.create 
    51         (fun () -> () 
     65        (fun () -> 
     66           while true do 
     67             let c = input_char stdin in 
     68               try 
     69                 Printf.printf "\nPlaying note %d.\n%!" (note_of_char c); 
     70                 self#add_event 0 (Midi.Note_on (note_of_char c, 0.8)) 
     71               with 
     72                 | Not_found -> () 
     73           done 
    5274        ) () "Virtual keyboard" 
    5375    in 
     
    5981  method get_frame frame = 
    6082    assert (0 = MFrame.position frame); 
    61     MFrame.add_break frame (MFrame.size frame) 
     83    let m = MFrame.tracks frame in 
     84    let t = self#get_events in 
     85      for c = 0 to Array.length m - 1 do 
     86        m.(c) := t 
     87      done; 
     88      MFrame.add_break frame (MFrame.size frame) 
    6289end 
    6390 
     
    6794    ] 
    6895    ~category:Lang.Input 
    69     ~flags:[Lang.Experimental] 
     96    ~flags:[Lang.Hidden; Lang.Experimental] 
    7097    ~descr:"Play notes from the keyboard." 
    7198    (fun p _ -> 
    72        let e f v = f (List.assoc v p) in 
     99       (* let e f v = f (List.assoc v p) in *) 
    73100         ((new keyboard):>Source.source) 
    74101    )