package tiny_libs
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
From-scratch libraries for teaching: graphics, audio, compression, crypto, networking and more
Install
dune-project
Dependency
Authors
Maintainers
Sources
0.3.6.tar.gz
md5=7c636383d146d30ac6f2fa234a6253c8
sha512=c79f3823c5f8f57e5038eb640d487c61168b84aa07c61999d6622ef9fd0c890e2b03b4c6a7cdbbe9352a49e25dda00ac7bb14693cee8e3d7beeed251351a2af0
doc/src/tiny_libs.audio_effects/Modulation.ml.html
Source file Modulation.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54(* Claude Code * * Copyright (C) 2026 Yoann Padioleau * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * (LGPL) as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. *) (* See Modulation.mli *) type kind = Chorus | Flanger | Phaser let kinds = [ Chorus; Flanger; Phaser ] let name = function Chorus -> "chorus" | Flanger -> "flanger" | Phaser -> "phaser" let knobs : Effect.knob list = [ { name = "kind"; control = Selector (List.map name kinds); initial = 0. }; { name = "rate"; control = Knob (0.05, 5.); initial = 0.5 }; { name = "depth"; control = Knob (0., 1.); initial = 0.5 }; { name = "feedback"; control = Knob (0., 0.9); initial = 0. }; { name = "mix"; control = Knob (0., 1.); initial = 0.5 }; ] let fx () : Effect.t = (* each kind keeps its own state: switching back finds it as it was *) let delay = Modulated_delay.create () and phaser = Phaser.create () in let kind = ref Chorus and rate = ref 0. and depth = ref 0. and feedback = ref 0. and mix = ref 0. in let set (knob : string) (x : float) = match knob with | "kind" -> kind := List.nth kinds (max 0 (min (List.length kinds - 1) (Control.index x))) | "rate" -> rate := x | "depth" -> depth := x | "feedback" -> feedback := x | "mix" -> mix := x | _ -> () in List.iter (fun (k : Effect.knob) -> set k.name k.initial) knobs; let process (out : Signal.stereo) = match !kind with | Chorus -> Modulated_delay.process delay { center = 0.015; depth = 0.006 *. !depth; rate = !rate; feedback = !feedback; mix = !mix } out | Flanger -> Modulated_delay.process delay { center = 0.0025; depth = 0.004 *. !depth; rate = !rate; feedback = !feedback; mix = !mix } out | Phaser -> Phaser.process phaser { low = 200.; high = 200. *. Float.pow 2. (8. *. !depth); rate = !rate; feedback = !feedback; mix = !mix } out in { name = "modulation"; knobs; set; process; meters = (fun () -> []) }
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>