Wondering what’s next for npm?Check out our public roadmap! »

    node-pitchfinder

    2.0.0 • Public • Published

    Standard - JavaScript Style Guide

    node-pitchfinder

    A compilation of pitch detection algorithms for Node (Using native C++ Addon). Based on pitchfinder, but running a lot faster (because it's native)

    Provided pitch-finding algorithms

    • MacLeod - Best results for instruments
    • YIN - The best balance of accuracy and speed, in my experience. Occasionally provides values that are wildly incorrect.
    • AMDF - Slow and only accurate to around +/- 2%, but finds a frequency more consistenly than others. NOT AN ADDON
    • Dynamic Wavelet - Very fast, but struggles to identify lower frequencies. NOT AN ADDON
    • YIN w/ FFT TODO
    • Goertzel TODO

    Installation

    npm install --save node-pitchfinder

    For node < 10 use version ^1.x, version 2+ is for node >= 10

    Usage

    Finding the pitch of a wav file in node

    const fs = require('fs')
    const WavDecoder = require('wav-decoder')
    const { YIN } = require('node-pitchfinder')
    
    // see below for option parameters.
    const detectPitch = YIN({ sampleRate: 44100 })
    
    const buffer = fs.readFileSync(PATH_TO_FILE)
    const decoded = WavDecoder.decode(buffer) // get audio data from file using `wav-decoder`
    const float64Array = decoded.channelData[0] // get a single channel of sound
    const pitch = detectPitch(float64Array) // All detectors are using float64Array internally, but you can also give an ordinary array of numbers

    Configuration

    All detectors

    • sampleRate - defaults to 44100

    YIN

    • threshold - used by the algorithm
    • probabilityThreshold - don't return a pitch if probability estimate is below this number.

    AMDF

    • minFrequency - Lowest frequency detectable
    • maxFrequency - Highest frequency detectable
    • sensitivity
    • ratio

    MacLeod

    • bufferSize - Maximum data size (default 1024)
    • cutoff - Defines the relative size the chosen peak (pitch) has. 0.93 means: choose the first peak that is higher than 93% of the highest peak detected. 93% is the default value used in the Tartini user interface.
    • freqCutoff - Minimum frequency to be detected (default 80Hz)
    • probabilityThreshold - don't return a pitch if probability estimate is below this number.

    Dynamic Wavelet

    no special config

    MORE API

    YIN and MacLeod

    • method: getResult (data) - does not use probabilityThreshold, returns an object with probability instead, like { pitch: number, probability: number }

    Usage

    const {MacLeod} = require('node-pitchfinder')
    const detectPitch = MacLeod().getResult
    
    detectPitch(data)
    // {pitch: 440, probability: 1}

    Todo

    • MacLeod using FFT

    Thanks

    Several of these algorithms were ported from Jonas Six's excellent TarsosDSP library (written in Java). If you're looking for a far deeper set of tools than this, check out his work on his website or on Github.

    Thanks to Aubio for his YIN code

    Install

    npm i node-pitchfinder

    DownloadsWeekly Downloads

    4

    Version

    2.0.0

    License

    GNU v3

    Unpacked Size

    45 kB

    Total Files

    28

    Last publish

    Collaborators

    • avatar