npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@combadge/ecma-tonegenerator

v1.0.4

Published

Generates a tone as raw PCM WAV data, so you can do operations on it

Downloads

2

Readme

ECMAScript Function Generator for node.js

This thing generates an array of numbers in waveforms. Written by Karl Westin, now horribly rewritten by mo-g. Though this version is faster!

Usage example:

import {FixedPitch, Silence, Tones, Generators, LinearBend} from 'ecma-tonegenerator'

var fixed = new FixedPitch({frequency:1701,
                            volume: 0.4});
var fixedData = fixed.approximate({duration: 3000});

var bend = new LinearBend({startFrequency: Tones["B5"],
                           endFrequency: Tones["D6"],
                           bitDepth: 32,
                           sampleRate: 96000,
                           generator: Generators.square);
var bendData = bend.approximate({duration: 3000});

var silence = new Silence({bitDepth: 16});
var silenceData = silence.accurate({samples: 24000});

Constructor parameters

  • frequency (or startFrequency and endFrequency for bends) frequency in Hz, or pass in a predefined note.
  • sampleRate defaults to 16000, you do you.
  • bitDepth defaults to 16, you do you.
  • volume A number between 0 and 1. 1 is max volume, 0 is silence.
  • generator controls the wave shape. Options are 'triangle', 'square', 'sine', 'saw'. You can also pass in a custom function.

volume and generator are unsupported on Silence.

Output Functions

There are two rendering functions, class.accurate() and class.approximate(). Silence only supports accurate(), LinearBend only supports approximate() and FixedPitch supports both.

The function will return the smallest Two's Complement Typed Array possible for your bit depth.

Output Function Parameters

  • duration in milliseconds. This will return the shortest number of complete waveforms equal to or greater than the specified duration, in order to prevent clipping.
  • samples will provide the exact number of samples requested, regardless of whether it's the middle of a wave or not.
  • offset offsets the wave by the specified number of samples. This will typically cause clipping.

Only one size parameter (duration or samples) may be specified at once.

Known Issues

  • The LinearBend class is very experimental and is barely usable for anything.
  • the toString() override is not supported on all versions of nodejs.