tone-stream

A simple audio tone stream library

Usage no npm install needed!

<script type="module">
  import toneStream from 'https://cdn.skypack.dev/tone-stream';
</script>

README

tone-stream

A simple node.js tone stream library.

You can specify frequencies to be played by adding items in the format:

  [NUMBER_OF_SAMPLES, FREQUENCY]

or DTMF tones:

  [NUMBER_OF_SAMPLES, 'DTMF:ID']

Playing some musical notes:

const { ToneStream } = require('tone-stream')

const Speaker = require('speaker')

const format = {
    sampleRate: 8000, 
    bitDepth: 16,
    channels: 1
}

const ts = new ToneStream(format)

const s = new Speaker(format)

ts.add([1000, 261.63]) // C4
ts.add([1000, 296.33]) // D4
ts.add([1000, 329.63]) // E4

ts.pipe(s)

setTimeout(() => {}, 2000)

Playing some DTMF tones:

const { ToneStream } = require('tone-stream')

const Speaker = require('speaker')

const format = {
    sampleRate: 8000, 
    bitDepth: 16,
    channels: 1
}

const ts = new ToneStream(format)

const s = new Speaker(format)

ts.add([1000, 'DTMF:1'])
ts.add([500, 's'])
ts.add([1000, 'DTMF:2'])
ts.add([500, 's'])
ts.add([1000, 'DTMF:3'])

ts.pipe(s)

setTimeout(() => {}, 2000)

Using some helper function to add miscelaneous tones

const { ToneStream, utils } = require('tone-stream')

const Speaker = require('speaker')

const _ = require('lodash')

const SAMPLE_RATE = 8000

const format = {
        sampleRate: SAMPLE_RATE,
        bitDepth: 16,
        channels: 1
}

const ts = new ToneStream(format)

const s = new Speaker(format)

const tones = _.flatten([
    utils.gen_dtmf_tones("1234567890abcdef", 100, 0, SAMPLE_RATE),
    utils.gen_morse_tones("Be yourself; everyone else is already taken", 880, 70, SAMPLE_RATE),
    utils.gen_music_scale("C5 D5 E5 F5 G5 A5 B5 C6", 100, 0, SAMPLE_RATE),
])

console.log("Inspecting tones:")
tones.forEach(tone => {
    console.log(tone)
})

ts.concat(tones)

ts.on('empty', () => {
    console.log("Got event 'empty'. Reversing tones and playing again.")
    tones.reverse()
    ts.concat(tones)
})

console.log("Starting playing tones")
ts.pipe(s)