1.1.0 • Published 8 years ago

goertzel-stream v1.1.0

Weekly downloads
7
License
-
Repository
github
Last release
8 years ago

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