Changeset 6716

Show
Ignore:
Timestamp:
07/02/09 13:37:13 (14 months ago)
Author:
smimram
Message:

Warning for non-existent channels + more modular code.

Location:
trunk/liquidsoap/src
Files:
5 modified
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/liquidsoap/src/Makefile

    r6706 r6716  
    158158        lang/lang_types.ml lang/lang_values.ml \ 
    159159        lang/lang_lexer.ml lang/lang_parser.ml lang/lang_pp.ml lang/lang.ml \ 
    160         tools/harbor.ml tools/ioRing.ml tools/file_decoder.ml \ 
     160        tools/harbor.ml tools/ioRing.ml tools/file_decoder.ml tools/mutils.ml \ 
    161161        $(video_converters) $(audio_converters) \ 
    162162        $(ogg_utils) $(protocols) $(sources) $(operators) $(outputs) $(io) \ 
     
    183183        decoder.ml request.ml outputs/output.ml \ 
    184184        lang/lang.ml tools/server.ml \ 
    185         tools/tutils.ml tools/sutils.ml \ 
     185        tools/tutils.ml tools/sutils.ml tools/mutils.ml \ 
    186186        tools/ringbuffer.ml \ 
    187187        tools/doc.ml tools/wav.ml \ 
  • trunk/liquidsoap/src/formats/midiformat.ml

    r6713 r6716  
    290290    (* Convert delta-times in delta-liquidsoap-ticks. *) 
    291291    let track = 
    292       let tpq = 
    293         match division with 
    294           | Midi.Ticks_per_quarter tpq -> tpq 
    295           | _ -> assert false 
    296       in 
    297       let tpq = Int64.of_int tpq in 
    298       let tempo = ref (Int64.of_int 125000) in 
    299       let tps = Int64.of_int (Fmt.ticks_per_second ()) in 
    300       let ten = Int64.of_int 1000000 in 
     292      let tempo = ref 125000 in 
    301293        List.map 
    302294          (fun (d,(c,e)) -> 
    303              (* These computations sometimes overflow on 32 bits. *) 
    304              let d = Int64.of_int d in 
    305              let d = 
    306                let ( * ) = Int64.mul in 
    307                let ( / ) = Int64.div in 
    308                  (((d * !tempo) / tpq) * tps) / ten 
    309              in 
    310              let d = Int64.to_int d in 
     295             let d = Mutils.ticks_of_delta division !tempo d in 
    311296               ( 
    312297                 match e with 
    313298                   | Midi.Tempo t -> 
    314                        tempo := Int64.of_int t 
     299                       tempo := t 
    315300                   | _ -> () 
    316301               ); 
  • trunk/liquidsoap/src/operators/midi_routing.ml

    r6706 r6716  
    7070    (fun p _ -> 
    7171       let f v = List.assoc v p in 
    72        let out = Lang.to_int (f "track_out") in 
     72       let out = Mutils.to_chan (f "track_out") in 
    7373       let src = Lang.to_source (f "") in 
    7474         new merge src out) 
     
    8484    (fun p _ -> 
    8585       (* let f v = List.assoc v p in *) 
    86        let t = List.map Lang.to_int (Lang.to_list (Lang.assoc "" 1 p)) in 
     86       let t = List.map Mutils.to_chan (Lang.to_list (Lang.assoc "" 1 p)) in 
    8787       let src = Lang.to_source (Lang.assoc "" 2 p) in 
    8888         new remove src t) 
  • trunk/liquidsoap/src/stream/midi.ml

    r6694 r6716  
    4848  | Custom of string 
    4949 
    50 type header = 
    51     { 
    52       division : division 
    53     } 
    54  
    5550type track = (int * event) list 
    5651 
    5752let create_track () = [] 
    58  
    59 (* TODO: !Fmt.ticks_per_second *) 
    60 let ticks_per_second = 44100 
    61  
    62 let ticks_of_delta division tempo delta = 
    63   match division with 
    64     | Ticks_per_quarter t -> 
    65         (delta * 4 * 60 * ticks_per_second) / (t * tempo) 
    66     | SMPTE (fps,res) -> 
    67         (delta * ticks_per_second) / (fps * res) 
    68  
    69 let take ticks track = () 
  • trunk/liquidsoap/src/synth/synth_op.ml

    r6711 r6716  
    8686    (fun p _ -> 
    8787       let f v = List.assoc v p in 
    88        let chan = Lang.to_int (f "channel") in 
     88       let chan = Mutils.to_chan (f "channel") in 
    8989       let volume = Lang.to_float (f "volume") in 
    9090       let adsr = 
  • trunk/liquidsoap/src/tools/mutils.ml

    r6344 r6716  
    2121 *****************************************************************************) 
    2222 
    23 let lin_of_dB x = 10. ** (x /. 20.) 
     23(** Convert a value into a channel number, checking that it actually exists. *) 
     24let to_chan v = 
     25  let n = Lang.to_int v in 
     26    if n >= Fmt.midi_channels () then 
     27      raise (Lang.Invalid_value (v, "channel number too big (try increasing lang.midi.channels)")) 
     28    else 
     29      n 
    2430 
    25 let dB_of_lin x = 20. *. log x /. log 10. 
    26  
    27 let clip x = min 1. (max (-.1.) x) 
     31(** Convert delta-times to ticks. *) 
     32let ticks_of_delta division tempo delta = 
     33  match division with 
     34    | Midi.Ticks_per_quarter tpq -> 
     35        (* These computations sometimes overflow on 32 bits. *) 
     36        let tpq = Int64.of_int tpq in 
     37        let tempo = Int64.of_int tempo in 
     38        let tps = Int64.of_int (Fmt.ticks_per_second ()) in 
     39        let ten = Int64.of_int 1000000 in 
     40        let delta = Int64.of_int delta in 
     41        let ( * ) = Int64.mul in 
     42        let ( / ) = Int64.div in 
     43          Int64.to_int ((((delta * tempo) / tpq) * tps) / ten) 
     44    | Midi.SMPTE (fps,res) -> 
     45        (delta * Fmt.ticks_per_second ()) / (fps * res)