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

tune-ts

v0.9.11

Published

TypeScript port of Tune.JS

Downloads

19

Readme

Tune.ts

TypeScript port of Tune.JS by Andrew Bernstein & Ben Taylor

Overview: Tune.js is a web audio tuning library of microtonal and just intonation scales. Tune.js supports over 3,000 historical tunings and temperaments, ported from the vast Scala tuning archive via the Microtuner files compiled and documented by Victor Cerullo.

List of Tunings: Tunings

Full Documentation: Full Documentation

Usage

import { Tune, TuningSystem } from 'tune.ts';

// Initiate Tune.ts
const tune = new Tune();

// Load a scale
tune.loadScale(TuningSystem.partchUr);

Set the root frequency that you'll be working with. This sets your scale to the key of A 440

tune.tonicize(220);

Pass scale degree numbers to the note() method. By default, note(degree, octave) returns the corresponding frequency in Hertz. You can use note() to set the frequency of an oscillator.

osc.frequency.value = tune.note(2, 0);

This will return the frequency for the third note in the scale, one octave down.

osc.frequency.value = tune.note(2,-1);

Properties

Tune.mode.output

Set the output mode of tune.note(). Choose between

  • frequency: tune.note() will return a hertz value, e.g. 392.43834 for a pure G4 over C4
  • ratio: tune.note() will return a ratio value, e.g. 1.5 for a pure G over C
  • MIDI: tune.note() will return an adjusted MIDI pitch, e.g. 67.0195 for a pure G4 over C4
// Set the output mode to 'ratio', e.g. the ratio 3/2 will output 1.5
tune.mode.output = 'ratio';

The default output mode is 'frequency'. Currently the only available input mode is 'MIDI'.

Tune.tonic

The current root frequency of this Tune instance. To set the tonic of a Tune instance use the tonicize() method. The default tonic is set to 440 Hz.

let tonic = 200;

Tune.scale

Read only. An array containing the ratio values of the current scale loaded with the loadScale() method.

// Returns the length of the current scale
let scaleLength = tune.scale.length;

Methods

Tune.note(scale-degree-# [, octave-#])

Returns a microtonally tuned note value for any scale degree input. By default, Tune.note returns a frequency value in hertz.

// This will return the frequency for 7th scale degree of our scale
let note = tune.note(7, 0)

Depending on Tune.mode, the Tune.note method may return a frequency value in hertz (default, e.g. 392.43834 for a pure G4 over C4), a ratio value as a float (e.g. 1.5 for a pure G over C), or a MIDI float value (e.g. 67.0195 for a pure G4 over C4). See Tune.mode.

An optional second argument lets you specify what octave to be played (i.e. -1 for one octave down, 1 for one octave up).

Additionally, tune.note() automatically wraps scale degrees that are out of range, so that tune.note(8) in a 7 note scale will return the second scale degree, one octave up. Therefore, given a 7 note scale, tune.note(8) is equivalent to tune.note(1,1)

Tune.tonicize(frequency)

Sets the scale's root frequency.

// sets the base (tonic) frequency to 200 Hz
tune.tonicize(200);

Tune.chord([array-of-scale-degree-#s])

Returns an array of note values. Like Tune.note(), Tune.chord() returns values according to the current output mode (Tune.mode).

// returns a three note chord with the specified scale degrees
let myMicrotonalChord = [60, 67, 71];
tune.chord(myMicrotonalChord);

Tune.search('string')

Searches through the scale archive for scales that match the query.

//returns an array of scale names that contain the word "partch"
tune.search('partch');

Example Tunings

| Name | Description | |------|-------------| | ji_12 | Basic just instonation with 7-limit tritone | | harm30 | First 30 harmonics and subharmonics | | pyth_31 | 31-tone Pythagorean scale | | ptolemy | Intense Diatonic Syntonon, also Zarlino's scale | | couperin | Couperin modified meantone | | helmholtz_pure | Helmholtz's two-keyboard harmonium tuning untempered | | partch_43 | Harry Partch's 43-tone pure scale | | johnston_81 | Ben Johnston's 81-note 5-limit scale of Sonata for Microtonal Piano | | young-lm_piano | LaMonte Young's Well-Tempered Piano | | xenakis_chrom | Xenakis's Byzantine Liturgical mode, 5 + 19 + 6 parts | | slendro | Observed Javanese Slendro scale, Helmholtz/Ellis p. 518, nr.94 | | harrison_5 | From Lou Harrison, a pelog style pentatonic | | malkauns | Mode of Indian Raga Malkauns, inverse of prime_5 |