This project is part of the @thi.ng/umbrella monorepo.
Customizable O(1) ES6 generators for colored noise.
Colored noise is useful for a wide variety of use cases where a more controlled approach to random number generation is required, from DSP/synthesis to rendering, geometry generation, animation etc.
The following noise colors are available and illustrated via their power
spectrums / histograms (averaged 1000 runs @ 256 samples each). Each noise gen
is configurable in terms of number of internal RNG states, value range (default:
[-1..1)
interval, always centered around 0) and the actual backing PRNG
implementation (default: Math.random
, see
@thi.ng/random
for alternatives).
Code ported from Java, C & Clojure implementations and other references/literature (see links in doc strings). Furthermore, all generators have been refactored to be O(1).
In alphabetical order:
High-pass filtered noise (opposite of red) - Source
blue2
▁▁▁▂▂▂▃▄▄▄▅▅▅▅▅▆▆▆▆▇▇▇▇▇▇▇█▇▇███▇
▁▁▂▃▄▄▅▆▇▆████████████████████████████████████
▂▃▄▅▇███████████████████████████████████████████████
▃▆▇█████████████████████████████████████████████████████
▁▅▇█████████████████████████████████████████████████████████
▂▆████████████████████████████████████████████████████████████
▂▇██████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
blue4
▁▁▂▄▄▄▆▆▇█▇▆██▇
▁▃▄▇▇████████████████
▁▄▆██████████████████████
▁▄▅▆▇▇███████▇▇▆▄▃▁ ▄▇█████████████████████████
▃▅████████████████████▇▅ ▄████████████████████████████
▄██████████████████████████▄ ▁██████████████████████████████
▂██████████████████████████████▇███████████████████████████████
▃███████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
blue16
▃▅▇
▂████
▄█████
▂▅▅▃ ▂██████
▂▅▄▁ ▆████▅▁███████
▂ ▁▄▃ ▁▅▇▇▃ ▆████▂ ▅██████████████
▂▆█▆▂ ▂▆█▆▃ ▄███▅ ▆███▇ ▁█████▄ ▆██████▅███████████████
▃█████▄ ▃█████▄ ▅█████▆ ▇██████▁███████▇███████████████████████
███████▅███████▆███████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
blue32
▆
██
▅██
▅▃ ███
▃ ▆██████
▂ ▇▃ ▆██▃███████
▂ ▅ ▂▇▃ ▅█▆ ███▄███████████
▃ ▃ ▄ ▄ ▄ ▁▇▂ ▂█▃ ▄█▄ ▆█▇ ███▁███▄███▇███████████████
▇██ ▇██ ███ ███ ███▁███▂███▄███▅███▇███████████████████████████
███████▇███████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
Band-pass filtered noise (interleaved blue noise, opposite of violet) - Source
green4
▂▃▅▆▇▇█▇▇▇▆▅▄▃▂
▃▅█████████████████▆▃
▄███████████████████████▄ ▁▁
▂▅▇█████▅▁ ▂███████████████████████████▁ ▂▅▇████▇▅▂
▁▆██████████▅ ▂█████████████████████████████▂ ▅██████████▆▁
▂██████████████▅███████████████████████████████▆██████████████▂
▁███████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
green16
▅▆▅
████▇
▅█████▆
▄▃ ███████ ▃▄
▄▁ ▆██████████▇██▆ ▁▄
▁ ▃ ▁▇▄ ▇██▄███████████████▄██▇ ▃█▁ ▄ ▁
▂▇▃ ▃█▄ ▅█▆ ▇██ ███▅███████████████████████▅███▁███ ▅█▅ ▄█▄ ▄▇▂
███▃███▄███▆███████████████████████████████████████▆███▄███▃███
▅███████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
green32
▆
███
███
▅▆███▆▄
▅ ███████ ▄
▂ ▇▂███████████▂▆ ▁
▁ ▄ ▇▁█▆███████████████▆█▂▇ ▄ ▂
▄ ▃ ▄ ▄ ▅ ▆ ▇▁█▃█▅█▇███████████████████████▇█▄█▃█▁▇ ▆ ▅ ▄ ▃ ▃ ▃
█▅█▅█▅█▆█▇███████████████████████████████████████████▇█▇█▅█▅█▄█
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
Exponential decay power curve (1/f) - Source
pink4
▅▄▂
▇████▇▅▃▂
████████████▇▆▄▃▁▁▁▁▂
████████████████████████▇▆▅▄▃▂▂ ▁
████████████████████████████████▇████████████▇▆▅▄▄▄▄▂▃▁▁
█████████████████████████████████████████████████████████▇▆▅▄▁
██████████████████████████████████████████████████████████████▇▃
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
pink16
█
█
██
███▆▁▁
██████▇▅▁▂▁
████████████▇▆▆▄▂▂▂▂▁▁
███████████████████████▇▇▆▅▅▄▃▂ ▁
████████████████████████████████▄███████████▇▆▅▄▃▃▄▃▂▂▁
████████████████████████████████████████████████████████▆▇▆▅▂▁
██████████████████████████████████████████████████████████████▆▁
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
pink32
▄
█
█
█▄
██▄▁
████▅▄▂
████████▆▇▆▄▂▁
████████████████▅▇▆▆▆▅▄▃▂▁▂
██████████████████████████████▆▅ ▄▄▅▃▅▄▄▂▃▄▃▂▂
████████████████████████████████████████████████▇▇▇▇▇▇▆▅▂▂▂
████████████████████████████████████████████████████████████▅▄▁
███████████████████████████████████████████████████████████████▅
Low-pass filtered noise (opposite of blue) - Source
red4
█▇▇▇▆▇▆▅▅▅▄▃▃▂▁
█████████████████▇▆▅▃▁
███████████████████████▆▃
███████████████████████████▄ ▁▃▄▆▇█████████▇▆▅▃▁
█████████████████████████████▄ ▁▄▇████████████████████▆▃
██████████████████████████████▇▁ ▄██████████████████████████▄
████████████████████████████████▇██████████████████████████████▁
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
red16
▇▅▃
█████▃
██████▃
███████▂ ▂▅▅▂
████████ ▅████▅ ▄▄▂
███████████████▅ ▂████▆ ▃▇█▆▁ ▃▃▂ ▁
████████████████▅██████▇ ▄█████▁ ▁▇███▆ ▄███▄ ▃▇█▇▂ ▂▆█▆▂
████████████████████████▇███████▂██████▆ ▆█████▅ ▄█████▃ ▃█████▃
████████████████████████████████████████████████▆███████▅███████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
red32
▅
██▇
███▅
████ ▃▅
████▇██▆ ▁▃
████████▂██▇ ▂▇▁ ▁
████████████▄███ ▆█▅ ▃▆▂ ▄ ▁
████████████████████▄███▁███ ▇█▅ ▄█▄ ▃▇▂ ▁▆▁ ▁▅ ▄ ▄ ▃ ▃
████████████████████████████▇███▄███▃███▁███ ███ ███ ███ ▇██ ▇█▇
████████████████████████████████████████████████▇███▇███▇███▇███
████████████████████████████████████████████████████████████████
Band-stop filtered noise (interleaved red noise, opposite of green) - Source
violet2
██▇▇█▆▇▆▆▅▅▃▃▃▂▁ ▁▂▃▄▄▅▆▆▇▆▆▇▇█▇█
███████████████████▇▅▄▂ ▁▂▄▅▇▇█████████████████
█████████████████████████▅▃ ▃▅████████████████████████
████████████████████████████▄ ▄███████████████████████████
██████████████████████████████▄ ▄█████████████████████████████
████████████████████████████████▆███████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
violet4
▂▇▇▇▆▄▂▂ ▂▂▄▆▇▇▇
█████████▆▃ ▃▆████████
████████████▄ ▁ ▄███████████
██████████████▁ ▂▅▇████▇▅▂ ▂▄▇████▇▅▁ ▁▇████████████
███████████████▂ ▅██████████▆▁ ▂▇██████████▅ ▁██████████████
████████████████▅██████████████▃ ▃██████████████▅███████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
violet16
▅ ▅
███ ██
███▆ ▅██
████ ▃▅ ▅▃ ███
███████▆ ▁▅ ▃▂ ▆██████
████████▃██▇ ▄▇▂ ▄ ▂ ▁ ▄ ▂█▄ ▇██▃███████
████████████▅███▁██▇ ▆█▅ ▄█▄ ▂▇▃ ▃█▂ ▄█▃ ▅█▆ ▇██ ███▅███████████
████████████████████▆███▅███▄███▃███▃███▄███▆███████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
violet32
██ █
██ █
██▄▄ ▄▆█
████ ▃ ▃ ███
██████▂▆ ▁ ▂ ▆▂█████
████████▅█▂▇ ▄ ▂ ▂ ▄ ▇▁█▅███████
████████████▇█▅█▂█▁▇ ▇ ▅ ▄ ▃ ▃ ▃ ▃ ▃ ▄ ▄ ▅ ▆ ▇▁█▃█▄█▇███████████
██████████████████████▇█▇█▆█▆█▅█▅█▅█▅█▆█▆███████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
Uniform distribution (unfiltered output from source PRNG) - Source
white
▁█████████▇█████████▇█████▇▇▇█▇██▇▇█▇████████▇█▇███▇▇█▇█████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
STABLE - used in production
Search or submit any issues for this package
- @thi.ng/dsp - Composable signal generators, oscillators, filters, FFT, spectrum, windowing & related DSP utils
- @thi.ng/lowdisc - n-dimensional low-discrepancy sequence generators/iterators
- @thi.ng/random - Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation
yarn add @thi.ng/colored-noise
ES module import:
<script type="module" src="https://cdn.skypack.dev/@thi.ng/colored-noise"></script>
For Node.js REPL:
# with flag only for < v16
node --experimental-repl-await
> const coloredNoise = await import("@thi.ng/colored-noise");
Package sizes (gzipped, pre-treeshake): ESM: 506 bytes
TODO
See /tools for usage examples...
import { red } from "@thi.ng/colored-noise";
import { take } from "@thi.ng/transducers";
// default config
[...take(20, red())]
// [0.03108920908982049, 0.5411110045940151, 0.26064470417452945, ...]
// custom config
import { XsAdd } from "@thi.ng/random";
[...take(20, red(16, 1, new XsAdd(0xdecafbad)))]
// [ -0.17761799097704192, -0.10240132532836904, -0.1103387340810939, ...]
import { green } from "@thi.ng/colored-noise";
import { adsr, iterable, product } from "@thi.ng/dsp";
import { wavByteArray } from "@thi.ng/dsp-io-wav";
import { writeFileSync } from "fs";
const FS = 44100;
const signal = product(
// wrap green noise as IGen
iterable(green(16), 0),
// apply gain envelope
adsr({ a: 0.005 * FS, d: 0.2 * FS, s: 0 })
);
// output as 16bit mono WAV file
writeFileSync(
"export/hihat.wav",
wavByteArray(
{ bits: 16, channels: 1, length: 0.25 * FS, sampleRate: FS },
signal
)
);
Karsten Schmidt
If this project contributes to an academic publication, please cite it as:
@misc{thing-colored-noise,
title = "@thi.ng/colored-noise",
author = "Karsten Schmidt",
note = "https://thi.ng/colored-noise",
year = 2015
}
© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0