Changeset 6713

Show
Ignore:
Timestamp:
07/01/09 18:35:34 (9 months ago)
Author:
smimram
Message:

Fix for 32-bit archs.

Location:
trunk/liquidsoap/src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/liquidsoap/src/formats/midiformat.ml

    r6709 r6713  
    295295          | _ -> assert false 
    296296      in 
    297       let tempo = ref 125000 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 
    298301        List.map 
    299302          (fun (d,(c,e)) -> 
    300              let d = (d * !tempo / tpq) * Fmt.ticks_per_second () / 1000000 in 
     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 
    301311               ( 
    302312                 match e with 
    303313                   | Midi.Tempo t -> 
    304                        tempo := t 
     314                       tempo := Int64.of_int t 
    305315                   | _ -> () 
    306316               ); 
  • trunk/liquidsoap/src/operators/flanger.ml

    r6527 r6713  
    2525let pi = acos (-1.) 
    2626 
    27 class flanger (source:source) delay freq feedback = 
     27class flanger (source:source) delay freq feedback phase = 
    2828  let past_len = Fmt.samples_of_seconds delay in 
    2929object (self) 
     
    5353      in 
    5454        for i = offset to position - 1 do 
    55           let delay = 
    56             (past_pos + past_len + 
    57              Fmt.samples_of_seconds (delay *. (1. -. cos omega) /. 2.)) 
    58             mod past_len 
    59           in 
    60             for c = 0 to Array.length b - 1 do 
     55          for c = 0 to Array.length b - 1 do 
     56            let delay = 
     57              (past_pos + past_len + 
     58               Fmt.samples_of_seconds (delay *. (1. -. cos (omega +. float c *. phase ())) /. 2.)) 
     59              mod past_len 
     60            in 
    6161              past.(c).(past_pos) <- b.(c).(i); 
    6262              b.(c).(i) <- (b.(c).(i) +. past.(c).(delay) *. feedback) 
     
    6464            done; 
    6565          omega <- omega +. d_omega; 
     66          while omega > 2. *. pi do omega <- omega -. 2. *. pi done; 
    6667          past_pos <- (past_pos + 1) mod past_len 
    6768        done 
     
    7071let () = 
    7172  Lang.add_operator "flanger" 
    72     [ "delay", Lang.float_t, Some (Lang.float 0.001), Some "Delay in seconds."; 
     73    [ 
     74      "delay", Lang.float_t, Some (Lang.float 0.001), Some "Delay in seconds."; 
    7375      "freq", 
    7476      Lang.float_getter_t 1, 
     
    7779      Lang.float_getter_t 2, 
    7880      Some (Lang.float (0.)), Some "Feedback coefficient in dB."; 
    79       "", Lang.source_t, None, None ] 
     81      "phase", Lang.float_getter_t 3, Some (Lang.float 1.), Some "Phasse difference between channels in radians."; 
     82      "", Lang.source_t, None, None 
     83    ] 
    8084    ~category:Lang.SoundProcessing 
    8185    ~descr:"Flanger effect." 
    8286    (fun p _ -> 
    8387       let f v = List.assoc v p in 
    84        let duration, freq, feedback, src = 
     88       let duration, freq, feedback, phase, src = 
    8589         Lang.to_float (f "delay"), 
    8690         Lang.to_float_getter (f "freq"), 
    8791         Lang.to_float_getter (f "feedback"), 
     92         Lang.to_float_getter (f "phase"), 
    8893         Lang.to_source (f "") 
    8994       in 
    9095       let feedback = fun () -> Sutils.lin_of_dB (feedback ()) in 
    91          new flanger src duration freq feedback) 
     96         new flanger src duration freq feedback phase) 
  • trunk/liquidsoap/src/synth/synth.ml

    r6712 r6713  
    1 let pi = 3.1416 
     1let pi = acos (-1.) 
    22 
    33let freq_of_note n = 440. *. (2. ** ((float n -. 69.) /. 12.))