@thi.ng/colored-noise
    TypeScript icon, indicating that this package has built-in type declarations

    0.2.6 • Public • Published

    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

    Install

    npm i @thi.ng/colored-noise

    DownloadsWeekly Downloads

    81

    Version

    0.2.6

    License

    Apache-2.0

    Unpacked Size

    56.4 kB

    Total Files

    20

    Last publish

    Collaborators

    • thi.ng