JSPM

goertzel-stream

1.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4
  • Score
    100M100P100Q30684F

Streaming frequency detection using the Goertzel algorithm

Package Exports

  • goertzel-stream

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (goertzel-stream) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

goertzel-stream

Detects the presence of a single frequency in a stream of signal samples.

example

var goertzel = require('goertzel-stream')
var Generator = require('audio-generator')

var freq = 697

// Generate a sine wave at 697 Hz
var gen = Generator(function (time) {
  if (time > 1) {
    return 0
  } else {
    return Math.sin(Math.PI * 2 * time * freq)
  }
})

// Detection stream looking for the 697 Hz frequency
var detect = goertzel(freq)

// Pipe the signal into the detector
gen.pipe(detect)

detect.on('toneStart', function (tones) {
  console.log('start', tones)
})
detect.on('toneEnd', function (tones) {
  console.log('start', tones)
})
{ '697': { start: 0 } }
{ '697': { start: 0, end: 1 } }

api

var detect = goertzel(freq, opts={})

Returns a WriteStream set to detect frequencies. freq can be a single number or an array of frequencies to detect.

opts is mandatory, and has some required and optional parameters:

  • opts.sampleRate (required) - how many samples are taken per second. For best results, this should be at least twice the Nyquist frequency. 2.5x works well.
  • opts.testsPerSecond (optional) - How many tests for the frequency to perform per second's worth of samples. Defaults to 100.

Now you're ready to pipe in an audio source!

detect.on('toneStart', function (tones) { ... })

Emitted when a tone begins. tones is an object mapping a frequency to its start time.

{ '697': { start: 0 } }

detect.on('toneEnd', function (tones) { ... })

Emitted when a detected tone ends. tones is an object mapping a frequency to its start time and end time.

{ '697': { start: 0, end: 1 } }

install

With npm installed, run

$ npm install goertzel-stream

license

MIT