Changeset 6694
- Timestamp:
- 06/29/09 10:53:47 (9 months ago)
- Location:
- trunk/liquidsoap/src
- Files:
-
- 1 added
- 8 modified
-
Makefile (modified) (1 diff)
-
fmt.ml (modified) (2 diffs)
-
fmt.mli (modified) (1 diff)
-
stream/frame.ml (modified) (1 diff)
-
stream/mFrame.ml (modified) (1 diff)
-
stream/mFrame.mli (modified) (1 diff)
-
stream/midi.ml (modified) (1 diff)
-
synth/keyboard.ml (modified) (5 diffs)
-
synth/synth.ml (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/liquidsoap/src/Makefile
r6693 r6694 146 146 visualization/video_volume.ml 147 147 148 synth = synth/keyboard.ml 148 synth = synth/synth.ml \ 149 synth/keyboard.ml 149 150 150 151 liquidsoap_sources= $(tools) SVN.ml audio_converter.ml $(stream) \ -
trunk/liquidsoap/src/fmt.ml
r6344 r6694 67 67 "Video frames per second" 68 68 69 let conf_midi = 70 Conf.void ~p:(conf#plug "midi") "MIDI parameters" 71 ~comments:[ 72 "Parameters for MIDI in liquidsoap." 73 ] 74 let conf_midi_channels = 75 Conf.int ~p:(conf_midi#plug "channels") ~d:0 76 "MIDI channels" 77 69 78 (* Global time speed. *) 70 79 let samples_per_second () = conf_samplerate#get … … 103 112 104 113 let video_channels () = conf_video_channels#get 114 115 let midi_channels () = conf_midi_channels#get -
trunk/liquidsoap/src/fmt.mli
r5986 r6694 73 73 val video_width : unit -> int 74 74 val video_height : unit -> int 75 76 77 val midi_channels : unit -> int -
trunk/liquidsoap/src/stream/frame.ml
r6693 r6694 90 90 Array.init (Fmt.video_channels ()) (fun _ -> RGB_t) 91 91 in 92 let midi = 93 Array.init (Fmt.midi_channels ()) (fun _ -> Midi_t) 94 in 92 95 create 93 (Array.append audio video)96 (Array.append (Array.append audio video) midi) 94 97 (Fmt.ticks_per_second ()) 95 98 (Fmt.ticks_per_frame ()) -
trunk/liquidsoap/src/stream/mFrame.ml
r6693 r6694 1 1 include Frame 2 3 let 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 14 let set_events f e = () -
trunk/liquidsoap/src/stream/mFrame.mli
r6693 r6694 19 19 val set_metadata : t -> int -> metadata -> unit 20 20 val get_metadata : t -> int -> metadata option 21 22 val tracks : t -> (int * Midi.event) list ref array -
trunk/liquidsoap/src/stream/midi.ml
r6693 r6694 27 27 type event = 28 28 | 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). *) 30 30 | Aftertouch of int * float 31 31 | Control_change of int * int -
trunk/liquidsoap/src/synth/keyboard.ml
r6693 r6694 21 21 *****************************************************************************) 22 22 23 let knotes = [|'a'; '?'; 'z'; '"'; 'e'; 'r'; '('; 't'; '-'; 'y'; '?'; 'u'; 'i'; '?'; 'o'; '?'; 'p'|] 24 25 let 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 34 let note_of_char c = 35 array_index knotes c + 94 36 23 37 class keyboard = 24 38 object (self) … … 34 48 val ev_m = Mutex.create () 35 49 36 method add_event ( e:Midi.event) =50 method add_event (t:int) (e:Midi.event) = 37 51 Mutex.lock ev_m; 38 ev <- ( 0,e)::ev;52 ev <- (t,e)::ev; 39 53 Mutex.unlock ev_m 40 54 … … 49 63 let _ = 50 64 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 52 74 ) () "Virtual keyboard" 53 75 in … … 59 81 method get_frame frame = 60 82 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) 62 89 end 63 90 … … 67 94 ] 68 95 ~category:Lang.Input 69 ~flags:[Lang. Experimental]96 ~flags:[Lang.Hidden; Lang.Experimental] 70 97 ~descr:"Play notes from the keyboard." 71 98 (fun p _ -> 72 let e f v = f (List.assoc v p) in99 (* let e f v = f (List.assoc v p) in *) 73 100 ((new keyboard):>Source.source) 74 101 )
