@ircam/sc-utils v1.11.0
sc-utils
Simple generic utilities (type check, common math functions, etc.)
Install
npm install --save @ircam/sc-utilsAPI
Table of Contents
- almostEqual
- almostEqualArray
- atodb
- counter
- dbtoa
- decibelToLinear
- decibelToPower
- delay
- exponentialScale
- frequencyToMidi
- ftom
- getTime
- hertzToNormalised
- idGenerator
- isBrowser
- isFunction
- isNumber
- isPlainObject
- isSequence
- isString
- isTouchDevice
- isTypedArray
- isURL
- linearScale
- linearToDecibel
- logarithmicScale
- midiToFrequency
- mtof
- normalisedToHertz
- normalizedToTableScale
- powerToDecibel
- sleep
- tableToNormalizedScale
almostEqual
Checks if two numeric values are approximately equal within a given tolerance.
Parameters
valuenumber The first value to compare.referencenumber The second value to compare.tolerancenumber The tolerance within which the values are considered equal. Note: tolerance must take into account the sum of all relative and absolute errors. (optional, defaultNumber.EPSILON)
Examples
import { almostEqual } from '@ircam/sc-utils';
almostEqual(0.1 + 0.2, 0.3); // true
almostEqual(0.1 + 0.2, 1e-18); // false
almostEqual(0.1, 0.11, 0.02); // trueReturns boolean Returns true if the values are approximately
equal, otherwise false.
almostEqualArray
- See: almostEqual
Checks if two arrays of numeric values are approximately equal element-wise within a given tolerance.
Parameters
valueArray<number> The first array to compare.referenceArray<number> The second array to compare.tolerancenumber The tolerance within which the values are considered equal. Note: tolerance must take into account the sum of all relative and absolute errors. (optional, defaultNumber.EPSILON)
Examples
import { almostEqualArray } from '@ircam/sc-utils';
almostEqualArray([0.1, 0.1 + 0.2], [0.1, 0.3]); // trueReturns boolean Returns true if the arrays have got the same size, and
if every value of the same index are approximately equal. Otherwise false.
atodb
Convert a linear gain into dB
Alias: linearToDecibel
Parameters
valnumber Value to convert
Examples
import { atodb } from '@ircam/sc-utils';
atodb(0);
// > 1Returns number
counter
Create a counter function.
Parameters
fromnumber Start of the counter, included (optional, default0)tonumber End of the counter, included (optional, defaultNumber.MAX_SAFE_INTEGER)stepnumber Increment / decrement step, if 0 returnsfromforever (optional, default1)
Returns Function import { counter } from '@ircam/sc-utils'; const myCounter = counter(0.1, 0.3, 0.1); counter(); // 0.1 counter(); // 0.2 counter(); // 0.3 counter(); // 0.1 // ...
dbtoa
Convert a dB into linear gain
Alias: decibelToLinear
Parameters
valnumber Value to convert
Examples
import { dbtoa } from '@ircam/sc-utils';
dbtoa(0);
// > 1Returns number
decibelToLinear
Convert a dB into linear gain (i.e. gain)
Alias: dbtoa
Parameters
valnumber Value to convert
Examples
import { decibelToLinear } from '@ircam/sc-utils';
decibelToLinear(0);
// > 1Returns number
decibelToPower
Convert a dB into power gain
Parameters
valnumber Value to convert
Examples
import { decibelToPower } from '@ircam/sc-utils';
decibelToPower(0);
// > 1Returns number
delay
Wait for a given number of milliseconds.
See also sleep
Parameters
msNumber Number of milliseconds to wait
Examples
import { delay } from '@ircam/sc-utils';
// wait for 1 second
await delay(1000);Returns Promise
exponentialScale
Create an exponential scale function.
Parameters
inputStartnumber Start value of input rangeinputEndnumber End value of input rangeoutputStartnumber Start value of output rangeoutputEndnumber End value of output rangebasenumber Base value for exponential scaling, default to2(optional, default2)clipboolean Clip output to output range, default tofalse(optional, defaultfalse)
Examples
const { exponentialScale } = utils;
const midiToFreq = exponentialScale(69, 81, 440, 880);
midiToFreq(57);
// > 220frequencyToMidi
Convert a frequency in Hz to a MIDI note
Parameters
freqnumber Frequency to convert
Examples
import { frequencyToMidi } from '@ircam/sc-utils';
const freq = frequencyToMidi(440);
// > 69Returns number
ftom
Convert a frequency in Hz to a MIDI note
Alias: frequencyToMidi
Parameters
freqnumber Frequency to convert
Examples
import { ftom } from '@ircam/sc-utils';
const freq = ftom(440);
// > 69Returns number
getTime
Provide a unified clock in seconds accross platforms, with an origin defined by the start of the process.
Examples
import { getTime } from '@ircam/sc-utils';
setInterval(() => {
const now = getTime();
// ...
}, 1000);Returns number
hertzToNormalised
Convert a frequency in Hertz to a normalised one in [0, 1].
Normalised frequency of 1 is half the sample-rate (Nyquist frequency).
Parameters
frequencyHertznumber Frequency in Hertz to convertsampleRatenumber Twice the Nyquist frequency (optional, default{})sampleRate.sampleRate(optional, default2)
Examples
import { hertzToNormalised } from '@ircam/sc-utils';
hertzToNormalised(12000, {sampleRate: 48000});
// > 0.5Returns number
idGenerator
Create a iterator of incrementing ids
DEPRECATED Use the more generic and user friendly counter instead.
Examples
import { idGenerator } from '@ircam/sc-utils';
const generator = idGenerator();
const id = generator.next().valueReturns Iterator
isBrowser
Check if the platform is a browser or a node process
Examples
import { isBrowser } from '@ircam/sc-utils';
isBrowser();
// > true|falseReturns boolean
isFunction
Check if the value is a function
Parameters
valany Value to check
Examples
import { isFunction } from '@ircam/sc-utils';
isFunction(() => {});
// > trueReturns boolean
isNumber
Check if the value is a number, including Infinity. If you want to excluse Infinity, check the native Number.isFinite function
Parameters
valany Value to check
Examples
import { isNumber } from '@ircam/sc-utils';
isNumber(42);
// > trueReturns boolean
isPlainObject
Check if the value is a Plain Old Javascript Object (POJO)
Parameters
valany Value to check
Examples
import { isPlainObject } from '@ircam/sc-utils';
isPlainObject({ a: 1 });
// > trueReturns boolean
isSequence
Check if the value is a sequence (Array or TypedArray) of finite numbers
Parameters
valany Value to check
Examples
import { isSequence } from '@ircam/sc-utils';
isSequence([1, 2, 3]);
// > trueReturns boolean
isString
Check if the value is a string
Parameters
valany Value to check
Examples
import { isString } from '@ircam/sc-utils';
isString('test');
// > trueReturns boolean
isTouchDevice
Check if the device supports touch events
Examples
import { isTouchDevice } from '@ircam/sc-utils';
isTouchDevice();
// > true|falseReturns boolean
isTypedArray
Check if the value is a TypedArray
Parameters
valany Value to check
Examples
import { isTypedArray } from '@ircam/sc-utils';
isTypedArray(new Float32Array([1, 2, 3]));
// > trueReturns boolean
isURL
Check if the value is a valid URL
Parameters
urlvalany Value to check
Examples
import { isURL } from '@ircam/sc-utils';
isURL('http://sub.my-site.org/abcd?test=123');
// > trueReturns boolean
linearScale
Create a linear scale function.
Parameters
inputStartnumber Start value of input rangeinputEndnumber End value of input rangeoutputStartnumber Start value of output rangeoutputEndnumber End value of output rangeclipboolean Clip output to output range, default tofalse(optional, defaultfalse)
Examples
import { linearScale } from '@ircam/sc-utils';
const myScale = linearScale(0, 1, 50, 100);
myScale(0.5);
// > 75Returns Function
linearToDecibel
Convert a linear gain into dB
Alias: atodb
Parameters
valnumber Value to convert
Examples
import { decibelToPower } from '@ircam/sc-utils';
decibelToPower(0);
// > 1Returns number
logarithmicScale
Create a logarithmic scale function.
Parameters
inputStartnumber Start value of input rangeinputEndnumber End value of input rangeoutputStartnumber Start value of output rangeoutputEndnumber End value of output rangebasenumber Base value for logarithmic scaling, default to2(optional, default2)clipboolean Clip output to output range, default tofalse(optional, defaultfalse)
Examples
const { logarithmicScale } = utils;
const freqToMidi = logarithmicScale(440, 880, 69, 81);
freqToMidi(220);
// > 57midiToFrequency
Convert a MIDI note to frequency
Parameters
midiNotenumber MIDI Note to convert
Examples
import { midiToFrequency } from '@ircam/sc-utils';
const freq = midiToFrequency(69);
// > 440Returns number
mtof
Convert a MIDI note to frequency
Alias: midiToFrequency
Parameters
midiNotenumber MIDI Note to convert
Examples
import { mtof } from '@ircam/sc-utils';
const freq = mtof(69);
// > 440Returns number
normalisedToHertz
Convert a normalised frequency, in [0, 1], to a frequency in Hertz.
Normalised frequency of 1 is half the sample-rate (Nyquist frequency).
Parameters
frequencyNormalisednumber Normalised frequency to convertsampleRatenumber Twice the Nyquist frequency (optional, default{})sampleRate.sampleRate(optional, default2)
Examples
import { normalisedToHertz } from '@ircam/sc-utils';
normalisedToHertz(0.5, {sampleRate: 48000});
// > 12000Returns number
normalizedToTableScale
Create a scale function that returns a linearly interpolated value from the given transfert table according to the given normalized position.
Parameters
Examples
import { normalizedToTableScale } from '@ircam/sc-utils'
const scale = normalizedToTableScale([1, 2, 4])
scale(0); // 1
scale(0.25); // 1.5
scale(0.5); // 2
scale(0.75); // 3
scale(1); // 4Returns function
powerToDecibel
Convert a linear gain into dB
Parameters
valnumber Value to convert
Examples
import { decibelToPower } from '@ircam/sc-utils';
decibelToPower(0);
// > 1Returns number
sleep
Wait for a given number of seconds.
See also delay
Parameters
secNumber Number of seconds to wait
Examples
import { sleep } from '@ircam/sc-utils';
// wait for 1 second
await sleep(1);Returns Promise
tableToNormalizedScale
Create a scale function that returns a normalized position in the transfert table according to the given value.
Parameters
Examples
import { tableToNormalized } from '@ircam/sc-utils'
const scale = tableToNormalized([1, 2, 4])
scale(1); // 0
scale(1.5); // 0.25
scale(2); // 0.5
scale(3); // 0.75
scale(4); // 1Returns function
License
10 months ago
10 months ago
6 months ago
7 months ago
7 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago