Changeset 6713
- Timestamp:
- 07/01/09 18:35:34 (14 months ago)
- Location:
- trunk/liquidsoap/src
- Files:
-
- 3 modified
-
formats/midiformat.ml (modified) (1 diff)
-
operators/flanger.ml (modified) (5 diffs)
-
synth/synth.ml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/liquidsoap/src/formats/midiformat.ml
r6709 r6713 295 295 | _ -> assert false 296 296 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 298 301 List.map 299 302 (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 301 311 ( 302 312 match e with 303 313 | Midi.Tempo t -> 304 tempo := t314 tempo := Int64.of_int t 305 315 | _ -> () 306 316 ); -
trunk/liquidsoap/src/operators/flanger.ml
r6527 r6713 25 25 let pi = acos (-1.) 26 26 27 class flanger (source:source) delay freq feedback =27 class flanger (source:source) delay freq feedback phase = 28 28 let past_len = Fmt.samples_of_seconds delay in 29 29 object (self) … … 53 53 in 54 54 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_len59 in60 for c = 0 to Array.length b - 1 do55 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 61 61 past.(c).(past_pos) <- b.(c).(i); 62 62 b.(c).(i) <- (b.(c).(i) +. past.(c).(delay) *. feedback) … … 64 64 done; 65 65 omega <- omega +. d_omega; 66 while omega > 2. *. pi do omega <- omega -. 2. *. pi done; 66 67 past_pos <- (past_pos + 1) mod past_len 67 68 done … … 70 71 let () = 71 72 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."; 73 75 "freq", 74 76 Lang.float_getter_t 1, … … 77 79 Lang.float_getter_t 2, 78 80 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 ] 80 84 ~category:Lang.SoundProcessing 81 85 ~descr:"Flanger effect." 82 86 (fun p _ -> 83 87 let f v = List.assoc v p in 84 let duration, freq, feedback, src =88 let duration, freq, feedback, phase, src = 85 89 Lang.to_float (f "delay"), 86 90 Lang.to_float_getter (f "freq"), 87 91 Lang.to_float_getter (f "feedback"), 92 Lang.to_float_getter (f "phase"), 88 93 Lang.to_source (f "") 89 94 in 90 95 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.14161 let pi = acos (-1.) 2 2 3 3 let freq_of_note n = 440. *. (2. ** ((float n -. 69.) /. 12.))
