1.0.95 • Published 3 months ago

@thi.ng/colored-noise v1.0.95

Weekly downloads
34
License
Apache-2.0
Repository
github
Last release
3 months ago

colored-noise

npm version npm downloads Twitter Follow

This project is part of the @thi.ng/umbrella monorepo.

About

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:

Blue noise

High-pass filtered noise (opposite of red) - Source

blue2
                               ▁▁▁▂▂▂▃▄▄▄▅▅▅▅▅▆▆▆▆▇▇▇▇▇▇▇█▇▇███▇
                  ▁▁▂▃▄▄▅▆▇▆████████████████████████████████████
            ▂▃▄▅▇███████████████████████████████████████████████
        ▃▆▇█████████████████████████████████████████████████████
    ▁▅▇█████████████████████████████████████████████████████████
  ▂▆████████████████████████████████████████████████████████████
▂▇██████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

blue4
                                                 ▁▁▂▄▄▄▆▆▇█▇▆██▇
                                           ▁▃▄▇▇████████████████
                                       ▁▄▆██████████████████████
        ▁▄▅▆▇▇███████▇▇▆▄▃▁          ▄▇█████████████████████████
     ▃▅████████████████████▇▅      ▄████████████████████████████
   ▄██████████████████████████▄  ▁██████████████████████████████
 ▂██████████████████████████████▇███████████████████████████████
▃███████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

blue16

                                                             ▃▅▇
                                                           ▂████
                                                          ▄█████
                                                   ▂▅▅▃  ▂██████
                                           ▂▅▄▁   ▆████▅▁███████
                    ▂      ▁▄▃    ▁▅▇▇▃   ▆████▂ ▅██████████████
  ▂▆█▆▂   ▂▆█▆▃   ▄███▅   ▆███▇  ▁█████▄ ▆██████▅███████████████
 ▃█████▄ ▃█████▄ ▅█████▆ ▇██████▁███████▇███████████████████████
 ███████▅███████▆███████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

blue32

                                                               ▆
                                                              ██
                                                             ▅██
                                                          ▅▃ ███
                                                      ▃  ▆██████
                                              ▂   ▇▃ ▆██▃███████
                                  ▂   ▅  ▂▇▃ ▅█▆ ███▄███████████
  ▃   ▃   ▄   ▄   ▄  ▁▇▂ ▂█▃ ▄█▄ ▆█▇ ███▁███▄███▇███████████████
 ▇██ ▇██ ███ ███ ███▁███▂███▄███▅███▇███████████████████████████
 ███████▇███████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

Green noise

Band-pass filtered noise (interleaved blue noise, opposite of violet) - Source

green4

                         ▂▃▅▆▇▇█▇▇▇▆▅▄▃▂
                      ▃▅█████████████████▆▃
                    ▄███████████████████████▄          ▁▁
    ▂▅▇█████▅▁    ▂███████████████████████████▁    ▂▅▇████▇▅▂
  ▁▆██████████▅  ▂█████████████████████████████▂  ▅██████████▆▁
 ▂██████████████▅███████████████████████████████▆██████████████▂
▁███████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
green16

                               ▅▆▅
                              ████▇
                             ▅█████▆
                          ▄▃ ███████ ▃▄
                      ▄▁ ▆██████████▇██▆ ▁▄
          ▁   ▃  ▁▇▄ ▇██▄███████████████▄██▇ ▃█▁  ▄   ▁
 ▂▇▃ ▃█▄ ▅█▆ ▇██ ███▅███████████████████████▅███▁███ ▅█▅ ▄█▄ ▄▇▂
 ███▃███▄███▆███████████████████████████████████████▆███▄███▃███
▅███████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
green32

                                ▆
                               ███
                               ███
                             ▅▆███▆▄
                           ▅ ███████ ▄
                       ▂ ▇▂███████████▂▆ ▁
                 ▁ ▄ ▇▁█▆███████████████▆█▂▇ ▄ ▂
 ▄ ▃ ▄ ▄ ▅ ▆ ▇▁█▃█▅█▇███████████████████████▇█▄█▃█▁▇ ▆ ▅ ▄ ▃ ▃ ▃
 █▅█▅█▅█▆█▇███████████████████████████████████████████▇█▇█▅█▅█▄█
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

Pink noise

Exponential decay power curve (1/f) - Source

pink4
 ▅▄▂
▇████▇▅▃▂
████████████▇▆▄▃▁▁▁▁▂
████████████████████████▇▆▅▄▃▂▂     ▁
████████████████████████████████▇████████████▇▆▅▄▄▄▄▂▃▁▁
█████████████████████████████████████████████████████████▇▆▅▄▁
██████████████████████████████████████████████████████████████▇▃
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

pink16
█
█
██
███▆▁▁
██████▇▅▁▂▁
████████████▇▆▆▄▂▂▂▂▁▁
███████████████████████▇▇▆▅▅▄▃▂      ▁
████████████████████████████████▄███████████▇▆▅▄▃▃▄▃▂▂▁
████████████████████████████████████████████████████████▆▇▆▅▂▁
██████████████████████████████████████████████████████████████▆▁
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

pink32
▄
█
█
█▄
██▄▁
████▅▄▂
████████▆▇▆▄▂▁
████████████████▅▇▆▆▆▅▄▃▂▁▂
██████████████████████████████▆▅ ▄▄▅▃▅▄▄▂▃▄▃▂▂
████████████████████████████████████████████████▇▇▇▇▇▇▆▅▂▂▂
████████████████████████████████████████████████████████████▅▄▁
███████████████████████████████████████████████████████████████▅

Red / brown noise

Low-pass filtered noise (opposite of blue) - Source

red4

 █▇▇▇▆▇▆▅▅▅▄▃▃▂▁
█████████████████▇▆▅▃▁
███████████████████████▆▃
███████████████████████████▄          ▁▃▄▆▇█████████▇▆▅▃▁
█████████████████████████████▄     ▁▄▇████████████████████▆▃
██████████████████████████████▇▁  ▄██████████████████████████▄
████████████████████████████████▇██████████████████████████████▁
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

red16

 ▇▅▃
█████▃
██████▃
███████▂  ▂▅▅▂
████████ ▅████▅    ▄▄▂
███████████████▅ ▂████▆   ▃▇█▆▁    ▃▃▂      ▁
████████████████▅██████▇ ▄█████▁ ▁▇███▆   ▄███▄   ▃▇█▇▂   ▂▆█▆▂
████████████████████████▇███████▂██████▆ ▆█████▅ ▄█████▃ ▃█████▃
████████████████████████████████████████████████▆███████▅███████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

red32

 ▅
██▇
███▅
████ ▃▅
████▇██▆ ▁▃
████████▂██▇ ▂▇▁  ▁
████████████▄███ ▆█▅ ▃▆▂  ▄   ▁
████████████████████▄███▁███ ▇█▅ ▄█▄ ▃▇▂ ▁▆▁ ▁▅   ▄   ▄   ▃   ▃
████████████████████████████▇███▄███▃███▁███ ███ ███ ███ ▇██ ▇█▇
████████████████████████████████████████████████▇███▇███▇███▇███
████████████████████████████████████████████████████████████████

Violet noise

Band-stop filtered noise (interleaved red noise, opposite of green) - Source

violet2

 ██▇▇█▆▇▆▆▅▅▃▃▃▂▁                               ▁▂▃▄▄▅▆▆▇▆▆▇▇█▇█
███████████████████▇▅▄▂                  ▁▂▄▅▇▇█████████████████
█████████████████████████▅▃           ▃▅████████████████████████
████████████████████████████▄       ▄███████████████████████████
██████████████████████████████▄   ▄█████████████████████████████
████████████████████████████████▆███████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

violet4

▂▇▇▇▆▄▂▂                                                 ▂▂▄▆▇▇▇
█████████▆▃                                           ▃▆████████
████████████▄                            ▁          ▄███████████
██████████████▁    ▂▅▇████▇▅▂       ▂▄▇████▇▅▁    ▁▇████████████
███████████████▂  ▅██████████▆▁   ▂▇██████████▅  ▁██████████████
████████████████▅██████████████▃ ▃██████████████▅███████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

violet16

 ▅                                                             ▅
███                                                           ██
███▆                                                         ▅██
████ ▃▅                                                   ▅▃ ███
███████▆ ▁▅                                           ▃▂ ▆██████
████████▃██▇ ▄▇▂  ▄   ▂                   ▁   ▄  ▂█▄ ▇██▃███████
████████████▅███▁██▇ ▆█▅ ▄█▄ ▂▇▃ ▃█▂ ▄█▃ ▅█▆ ▇██ ███▅███████████
████████████████████▆███▅███▄███▃███▃███▄███▆███████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

violet32

██                                                             █
██                                                             █
██▄▄                                                         ▄▆█
████ ▃                                                     ▃ ███
██████▂▆ ▁                                             ▂ ▆▂█████
████████▅█▂▇ ▄ ▂                                 ▂ ▄ ▇▁█▅███████
████████████▇█▅█▂█▁▇ ▇ ▅ ▄ ▃ ▃ ▃ ▃ ▃ ▄ ▄ ▅ ▆ ▇▁█▃█▄█▇███████████
██████████████████████▇█▇█▆█▆█▅█▅█▅█▅█▆█▆███████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

White noise

Uniform distribution (unfiltered output from source PRNG) - Source

white

▁█████████▇█████████▇█████▇▇▇█▇██▇▇█▇████████▇█▇███▇▇█▇█████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████

Status

STABLE - used in production

Search or submit any issues for this package

Related packages

  • @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

Installation

yarn add @thi.ng/colored-noise

ES module import:

<script type="module" src="https://cdn.skypack.dev/@thi.ng/colored-noise"></script>

Skypack documentation

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

Dependencies

API

Generated API docs

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, ...]

Use as IGen in @thi.ng/dsp

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
    )
);

Result waveform with spectrum

Authors

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
}

License

© 2015 - 2021 Karsten Schmidt // Apache Software License 2.0

1.0.95

3 months ago

1.0.94

4 months ago

1.0.91

5 months ago

1.0.93

4 months ago

1.0.92

5 months ago

1.0.90

5 months ago

1.0.89

5 months ago

1.0.88

6 months ago

1.0.87

6 months ago

1.0.86

6 months ago

1.0.85

7 months ago

1.0.84

7 months ago

1.0.83

8 months ago

1.0.73

12 months ago

1.0.72

12 months ago

1.0.71

12 months ago

1.0.77

11 months ago

1.0.76

11 months ago

1.0.75

11 months ago

1.0.74

11 months ago

1.0.79

10 months ago

1.0.78

10 months ago

1.0.80

9 months ago

1.0.82

8 months ago

1.0.81

9 months ago

1.0.70

1 year ago

1.0.69

1 year ago

1.0.68

1 year ago

1.0.67

1 year ago

1.0.66

1 year ago

1.0.65

1 year ago

1.0.64

1 year ago

1.0.63

1 year ago

1.0.62

1 year ago

1.0.61

1 year ago

1.0.60

1 year ago

1.0.59

1 year ago

1.0.58

1 year ago

1.0.55

1 year ago

1.0.57

1 year ago

1.0.56

1 year ago

1.0.54

1 year ago

1.0.53

1 year ago

1.0.52

1 year ago

1.0.49

1 year ago

1.0.51

1 year ago

1.0.50

1 year ago

1.0.47

1 year ago

1.0.46

1 year ago

1.0.44

1 year ago

1.0.45

1 year ago

1.0.43

1 year ago

1.0.42

1 year ago

1.0.41

1 year ago

1.0.40

2 years ago

1.0.39

2 years ago

1.0.38

2 years ago

1.0.19

2 years ago

1.0.18

2 years ago

1.0.22

2 years ago

1.0.21

2 years ago

1.0.26

2 years ago

1.0.25

2 years ago

1.0.24

2 years ago

1.0.23

2 years ago

1.0.29

2 years ago

1.0.28

2 years ago

1.0.27

2 years ago

1.0.33

2 years ago

1.0.32

2 years ago

1.0.31

2 years ago

1.0.30

2 years ago

1.0.37

2 years ago

1.0.36

2 years ago

1.0.34

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.9

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

0.3.20

3 years ago

0.3.23

3 years ago

0.3.22

3 years ago

0.3.21

3 years ago

0.3.19

3 years ago

0.3.18

3 years ago

0.3.17

3 years ago

0.3.16

3 years ago

0.3.15

3 years ago

0.3.14

3 years ago

0.3.13

3 years ago

0.3.12

3 years ago

0.3.11

3 years ago

0.3.10

3 years ago

0.3.6

3 years ago

0.3.8

3 years ago

0.3.7

3 years ago

0.3.9

3 years ago

0.3.5

3 years ago

0.3.4

3 years ago

0.3.0

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.3

4 years ago

0.2.9

4 years ago

0.2.7

4 years ago

0.2.8

4 years ago

0.2.6

4 years ago

0.2.4

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.2.3

4 years ago

0.1.47

4 years ago

0.1.45

4 years ago

0.1.46

4 years ago

0.1.44

4 years ago

0.1.43

4 years ago

0.1.41

4 years ago

0.1.42

4 years ago

0.1.40

4 years ago

0.1.39

4 years ago

0.1.37

4 years ago

0.1.38

4 years ago

0.1.36

4 years ago

0.1.35

4 years ago

0.1.34

4 years ago

0.1.33

4 years ago

0.1.32

4 years ago

0.1.31

4 years ago

0.1.30

4 years ago

0.1.29

4 years ago

0.1.28

4 years ago

0.1.27

4 years ago

0.1.26

4 years ago

0.1.25

4 years ago

0.1.23

4 years ago

0.1.24

4 years ago

0.1.22

4 years ago

0.1.21

4 years ago

0.1.20

4 years ago

0.1.17

4 years ago

0.1.18

4 years ago

0.1.19

4 years ago

0.1.15

4 years ago

0.1.14

4 years ago

0.1.13

4 years ago

0.1.12

4 years ago

0.1.11

4 years ago

0.1.10

4 years ago

0.1.9

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago