Narcoleptic Pasta Manufacturer

    audio-frequency-tempered

    1.0.1 • Public • Published

    audio-frequency-tempered

    Distributes the data returned from AnalyserNode.getByteFrequencyData() according to a logarithmic scale. Low frequency bins are shared by multiple bars, while high frequency ones are bundled together.

    The technique comes from Henrique Vianna's audioMotion-analyzer.

    Install

    npm install audio-frequency-tempered
    

    Example

    const { createAudioBars, updateAudioBars } = require('audio-frequency-tempered');
    
    // create audio context, analyser, data array
    // omitted: source, gain, connect, etc.
    const audioCtx = new AudioContext();
    const analyser = audioCtx.createAnalyser();
    const audioData = new Uint8Array(analyser.frequencyBinCount);
    
    // create audio bars
    const audioBars = createAudioBars({ groupLevel: 8 });
    
    // on update
    analyser.getByteFrequencyData(audioData);
    updateAudioBars(audioData);
    
    audioBars.forEach(bar => console.log(bar));

    Output:

    { value: 0.6078, factor: 1, iniBin: 6, endBin: 9 }
    { value: 0.8196, factor: 1, iniBin: 10, endBin: 18 }
    { value: 0.8980, factor: 1, iniBin: 19, endBin: 37 }
    { value: 0.7254, factor: 1, iniBin: 38, endBin: 73 }
    { value: 0.5215, factor: 1, iniBin: 74, endBin: 146 }
    { value: 0.4352, factor: 1, iniBin: 147, endBin: 292 }
    { value: 0.4627, factor: 1, iniBin: 293, endBin: 584 }
    { value: 0.4313, factor: 1, iniBin: 585, endBin: 1167 }
    { value: 0.3411, factor: 1, iniBin: 1168, endBin: 2333 }
    { value: 0.0000, factor: 1, iniBin: 2334, endBin: 3110 }

    Demo

    demo

    audio-frequency-tempered demo

    Usage

    createAudioBars(options)

    • options
      • groupLevel (default 5) 1 to 8, where 1 = 1/24 octave and 8 = full octave
      • sampleRate (default 44100) audioContext.sampleRate
      • frequencyBinCount (default 1024) analyser.frequencyBinCount
      • minFreq (default 20) minimum frequency (Hz)
      • maxFreq (default 22000) maximum frequency (Hz)

    Returns an array of 'bar' objects { iniBin, endBin, factor, value }

    • iniBin - initial bin of the analyser frequency data
    • endBin - end bin of the analyser frequency data
    • factor - interpolation factor - when multiple bars share the same bin
    • value - normalised maximum energy value of the frequencies between iniBin and endBin

    updateAudioBars(audioData)

    • audioData Uint8Array passed to analyser.getByteFrequencyData

    Returns null

    getAudioBars()

    Returns the previously created array of audio bars.

    getAudioEnergy()

    Returns the average audio energy (sum of bar values / number of bars).

    See Also

    License

    MIT, see LICENSE for details.

    Install

    npm i audio-frequency-tempered

    DownloadsWeekly Downloads

    5

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    9.51 kB

    Total Files

    4

    Last publish

    Collaborators

    • brunoimbrizi