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_synthesis/Noise.ml.html
Source file Noise.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(* 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 Noise.mli *) type mode = Long | Short let step (mode : mode) (r : int) : int = let tap = match mode with Long -> 1 | Short -> 6 in let feedback = (r land 1) lxor ((r lsr tap) land 1) in (r lsr 1) lor (feedback lsl 14) let period (mode : mode) : int = let rec go n r = if r = 1 && n > 0 then n else go (n + 1) (step mode r) in go 0 1 let render ?(mode = Long) ~(rate : float) (seconds : float) : Signal.t = let r = ref 1 and clock = ref 0. in Array.init (Signal.samples seconds) (fun _ -> let out = if !r land 1 = 1 then 1. else -1. in (* rate / 44,100 steps per sample: a step each time the clock * passes a whole number *) clock := !clock +. (rate /. float_of_int Signal.rate); while !clock >= 1. do r := step mode !r; clock := !clock -. 1. done; out) (* mod 2^32 by computing in 32 bits, which wrap by themselves, natively * and in a browser alike (where OCaml's ints are 32 bits anyway); the * state comes out signed, hence [uniform]'s correction *) let lcg (x : int) : int = Int32.to_int (Int32.add (Int32.mul 1664525l (Int32.of_int x)) 1013904223l) let uniform (x : int) : float = let x = float_of_int x in let x = if x < 0. then x +. 4294967296. else x in (2. *. x /. 4294967296.) -. 1.
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>