@tremolo-ui/functions 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/NumberInput/type.js +18 -60
- package/dist/cjs/components/NumberInput/type.js.map +1 -1
- package/dist/cjs/components/NumberInput/types/components/NumberInput/type.d.ts +1 -2
- package/dist/cjs/components/NumberInput/types/components/NumberInput/type.d.ts.map +1 -1
- package/dist/cjs/components/NumberInput/types/index.d.ts +5 -0
- package/dist/cjs/components/NumberInput/types/index.d.ts.map +1 -1
- package/dist/cjs/components/NumberInput/types/math.d.ts +5 -0
- package/dist/cjs/components/NumberInput/types/math.d.ts.map +1 -1
- package/dist/cjs/components/NumberInput/types/midi.d.ts +16 -3
- package/dist/cjs/components/NumberInput/types/midi.d.ts.map +1 -1
- package/dist/cjs/components/Slider/types/components/NumberInput/type.d.ts +1 -2
- package/dist/cjs/components/Slider/types/components/NumberInput/type.d.ts.map +1 -1
- package/dist/cjs/components/Slider/types/index.d.ts +5 -0
- package/dist/cjs/components/Slider/types/index.d.ts.map +1 -1
- package/dist/cjs/components/Slider/types/math.d.ts +5 -0
- package/dist/cjs/components/Slider/types/math.d.ts.map +1 -1
- package/dist/cjs/components/Slider/types/midi.d.ts +16 -3
- package/dist/cjs/components/Slider/types/midi.d.ts.map +1 -1
- package/dist/cjs/index.js +29 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/components/NumberInput/type.d.ts +1 -2
- package/dist/cjs/types/components/NumberInput/type.d.ts.map +1 -1
- package/dist/cjs/types/index.d.ts +5 -0
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/math.d.ts +5 -0
- package/dist/cjs/types/math.d.ts.map +1 -1
- package/dist/cjs/types/midi.d.ts +16 -3
- package/dist/cjs/types/midi.d.ts.map +1 -1
- package/dist/esm/components/NumberInput/type.js +19 -60
- package/dist/esm/components/NumberInput/type.js.map +1 -1
- package/dist/esm/components/NumberInput/types/components/NumberInput/type.d.ts +1 -2
- package/dist/esm/components/NumberInput/types/components/NumberInput/type.d.ts.map +1 -1
- package/dist/esm/components/NumberInput/types/index.d.ts +5 -0
- package/dist/esm/components/NumberInput/types/index.d.ts.map +1 -1
- package/dist/esm/components/NumberInput/types/math.d.ts +5 -0
- package/dist/esm/components/NumberInput/types/math.d.ts.map +1 -1
- package/dist/esm/components/NumberInput/types/midi.d.ts +16 -3
- package/dist/esm/components/NumberInput/types/midi.d.ts.map +1 -1
- package/dist/esm/components/Slider/types/components/NumberInput/type.d.ts +1 -2
- package/dist/esm/components/Slider/types/components/NumberInput/type.d.ts.map +1 -1
- package/dist/esm/components/Slider/types/index.d.ts +5 -0
- package/dist/esm/components/Slider/types/index.d.ts.map +1 -1
- package/dist/esm/components/Slider/types/math.d.ts +5 -0
- package/dist/esm/components/Slider/types/math.d.ts.map +1 -1
- package/dist/esm/components/Slider/types/midi.d.ts +16 -3
- package/dist/esm/components/Slider/types/midi.d.ts.map +1 -1
- package/dist/esm/components/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/index.js +28 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/NumberInput/type.d.ts +1 -2
- package/dist/esm/types/components/NumberInput/type.d.ts.map +1 -1
- package/dist/esm/types/index.d.ts +5 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/math.d.ts +5 -0
- package/dist/esm/types/math.d.ts.map +1 -1
- package/dist/esm/types/midi.d.ts +16 -3
- package/dist/esm/types/midi.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/NumberInput/type.ts +22 -46
- package/src/index.ts +5 -0
- package/src/math.ts +14 -0
- package/src/midi.ts +21 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../../src/components/NumberInput/type.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../../src/components/NumberInput/type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;AAEtC,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxE;AAED,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,EACtB,KAAK,CAAC,EAAE,MAAM,GACb;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,CAkCA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA"}
|
package/dist/esm/types/math.d.ts
CHANGED
|
@@ -48,6 +48,11 @@ export declare function radian(degree: number): number;
|
|
|
48
48
|
* @category Math
|
|
49
49
|
*/
|
|
50
50
|
export declare function degree(radian: number): number;
|
|
51
|
+
/**
|
|
52
|
+
*
|
|
53
|
+
* @category Math
|
|
54
|
+
*/
|
|
55
|
+
export declare function mapValue(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
51
56
|
/**
|
|
52
57
|
*
|
|
53
58
|
* @category Math
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../src/math.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAE5D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,SAAI,UAKT;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,SAAI,UAQT;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,UAKZ;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAOpD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,UAEzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,UAEpC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,UAEpC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,UAElC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,UAEpC"}
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../src/math.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAE5D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,SAAI,UAKT;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,SAAI,UAQT;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,UAKZ;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAOpD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,UAEzD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,UAEpC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,UAEpC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,UAGf;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,UAElC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,UAEpC"}
|
package/dist/esm/types/midi.d.ts
CHANGED
|
@@ -23,22 +23,35 @@ export declare function parseNoteName(noteName: string): {
|
|
|
23
23
|
octave: number;
|
|
24
24
|
};
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Convert noteName to noteNumber
|
|
27
27
|
* @category MIDI
|
|
28
28
|
*/
|
|
29
29
|
export declare function noteNumber(noteName: string): number;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Convert noteNumber to noteName
|
|
32
32
|
* @category MIDI
|
|
33
33
|
*/
|
|
34
34
|
export declare function noteName(noteNumber: number): string;
|
|
35
35
|
/**
|
|
36
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
36
37
|
* @category MIDI
|
|
37
38
|
*/
|
|
38
39
|
export declare function isWhiteKey(note: number | string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
42
|
+
* @category MIDI
|
|
43
|
+
*/
|
|
44
|
+
export declare function isBlackKey(note: number | string): boolean;
|
|
39
45
|
/**
|
|
40
46
|
* @category MIDI
|
|
41
47
|
*/
|
|
42
|
-
export declare function isBlackKey(noteNumber: number | string): boolean;
|
|
43
48
|
export declare const scaleNames: string[];
|
|
49
|
+
/**
|
|
50
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
51
|
+
* @param detune [cent]
|
|
52
|
+
* @param a4 A4 frequency [Hz]
|
|
53
|
+
* @returns frequency [Hz]
|
|
54
|
+
* @category MIDI
|
|
55
|
+
*/
|
|
56
|
+
export declare function noteToFrequency(note: number | string, detune?: number, a4?: number): number;
|
|
44
57
|
//# sourceMappingURL=midi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midi.d.ts","sourceRoot":"","sources":["../../../src/midi.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,8CAA+C,CAAA;AAErE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,SAAS,4EAaZ,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM;YAKJ,QAAQ;gBACpB,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE;;EAGzD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,UAK1C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,UAI1C;AAED
|
|
1
|
+
{"version":3,"file":"midi.d.ts","sourceRoot":"","sources":["../../../src/midi.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,8CAA+C,CAAA;AAErE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,SAAS,4EAaZ,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM;YAKJ,QAAQ;gBACpB,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE;;EAGzD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,UAK1C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,UAI1C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,WAW/C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,WAE/C;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,UAAoD,CAAA;AAE3E;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,SAAI,EAAE,EAAE,SAAM,UAG1E"}
|
package/package.json
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
* @module NumberInput
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { toFixed } from '../../math'
|
|
6
|
-
|
|
7
5
|
/**
|
|
8
6
|
* [unit, scale][]
|
|
9
7
|
* @example
|
|
@@ -12,8 +10,6 @@ import { toFixed } from '../../math'
|
|
|
12
10
|
export type Units = [string, number][]
|
|
13
11
|
|
|
14
12
|
export function selectUnit(units: Units, value: number): [string, number] {
|
|
15
|
-
if (typeof units == 'string') return [units, 1]
|
|
16
|
-
|
|
17
13
|
let i = 0
|
|
18
14
|
for (; i < units.length; i++) {
|
|
19
15
|
if (Math.abs(units[i][1]) > Math.abs(value)) break
|
|
@@ -25,45 +21,38 @@ export function parseValue(
|
|
|
25
21
|
inputString: string,
|
|
26
22
|
units?: string | Units,
|
|
27
23
|
digit?: number,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
} else if (typeof units == 'string') {
|
|
24
|
+
): {
|
|
25
|
+
rawValue: number
|
|
26
|
+
formatValue: string
|
|
27
|
+
unit: string
|
|
28
|
+
} {
|
|
29
|
+
const str = inputString.trim()
|
|
30
|
+
if (!units || typeof units == 'string') {
|
|
31
|
+
const m = str.match(/-?\d+(\.\d+)?/)
|
|
32
|
+
let v = Number(m?.[0] ?? '0')
|
|
33
|
+
v = isNaN(v) ? 0 : v
|
|
39
34
|
return {
|
|
40
|
-
rawValue:
|
|
41
|
-
formatValue:
|
|
42
|
-
unit: units,
|
|
35
|
+
rawValue: v,
|
|
36
|
+
formatValue: (digit != undefined ? v.toFixed(digit) : v) + (units ?? ''),
|
|
37
|
+
unit: units ?? '',
|
|
43
38
|
}
|
|
44
39
|
}
|
|
45
40
|
|
|
46
41
|
const unitList = units.map(([u, _s]) => u)
|
|
47
42
|
const scaleList = units.map(([_u, s]) => s)
|
|
48
|
-
let rawValue =
|
|
49
|
-
let formatValue = `${scaleList[0]}`
|
|
43
|
+
let rawValue = 0
|
|
50
44
|
let unit = unitList[0]
|
|
45
|
+
let formatValue =
|
|
46
|
+
(digit != undefined ? rawValue.toFixed(digit) : rawValue) + unit
|
|
51
47
|
const m = str.match(/^(-?\d+(\.\d+)?)\s*(\w*)$/)
|
|
52
48
|
if (m) {
|
|
53
49
|
rawValue = Number(m[1]) || 0
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
unit = s[0]
|
|
61
|
-
} else {
|
|
62
|
-
const [u, scale] = selectUnit(units, rawValue)
|
|
63
|
-
const v = rawValue / scale
|
|
64
|
-
formatValue = `${digit != undefined ? toFixed(v, digit) : v}${u}`
|
|
65
|
-
unit = u
|
|
66
|
-
}
|
|
50
|
+
const uIndex = unitList.indexOf(m[3])
|
|
51
|
+
rawValue *= uIndex != -1 ? scaleList[uIndex] : 1
|
|
52
|
+
const [u, scale] = selectUnit(units, rawValue)
|
|
53
|
+
const v = rawValue / scale
|
|
54
|
+
formatValue = (digit != undefined ? v.toFixed(digit) : v) + u
|
|
55
|
+
unit = u
|
|
67
56
|
}
|
|
68
57
|
return {
|
|
69
58
|
rawValue: rawValue,
|
|
@@ -71,16 +60,3 @@ export function parseValue(
|
|
|
71
60
|
unit: unit,
|
|
72
61
|
}
|
|
73
62
|
}
|
|
74
|
-
|
|
75
|
-
// TODO: toFixed 以外のフォーマット手法
|
|
76
|
-
// e.g. 小数点第n位
|
|
77
|
-
export function formatValue(value: number, units?: string | Units) {
|
|
78
|
-
if (!units) {
|
|
79
|
-
return `${value}`
|
|
80
|
-
} else if (typeof units == 'string') {
|
|
81
|
-
return `${value}${units}`
|
|
82
|
-
} else {
|
|
83
|
-
const [unit, scale] = selectUnit(units, value)
|
|
84
|
-
return `${toFixed(value / scale)}${unit}`
|
|
85
|
-
}
|
|
86
|
-
}
|
package/src/index.ts
CHANGED
package/src/math.ts
CHANGED
|
@@ -109,6 +109,20 @@ export function degree(radian: number) {
|
|
|
109
109
|
return (180 * radian) / Math.PI
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
/**
|
|
113
|
+
*
|
|
114
|
+
* @category Math
|
|
115
|
+
*/
|
|
116
|
+
export function mapValue(
|
|
117
|
+
value: number,
|
|
118
|
+
inMin: number,
|
|
119
|
+
inMax: number,
|
|
120
|
+
outMin: number,
|
|
121
|
+
outMax: number,
|
|
122
|
+
) {
|
|
123
|
+
return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin
|
|
124
|
+
}
|
|
125
|
+
|
|
112
126
|
/**
|
|
113
127
|
*
|
|
114
128
|
* @category Math
|
package/src/midi.ts
CHANGED
|
@@ -48,7 +48,7 @@ export function parseNoteName(noteName: string) {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
51
|
+
* Convert noteName to noteNumber
|
|
52
52
|
* @category MIDI
|
|
53
53
|
*/
|
|
54
54
|
export function noteNumber(noteName: string) {
|
|
@@ -59,7 +59,7 @@ export function noteNumber(noteName: string) {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* Convert noteNumber to noteName
|
|
63
63
|
* @category MIDI
|
|
64
64
|
*/
|
|
65
65
|
export function noteName(noteNumber: number) {
|
|
@@ -69,6 +69,7 @@ export function noteName(noteNumber: number) {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
72
73
|
* @category MIDI
|
|
73
74
|
*/
|
|
74
75
|
export function isWhiteKey(note: number | string) {
|
|
@@ -85,10 +86,26 @@ export function isWhiteKey(note: number | string) {
|
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
/**
|
|
89
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
88
90
|
* @category MIDI
|
|
89
91
|
*/
|
|
90
|
-
export function isBlackKey(
|
|
91
|
-
return !isWhiteKey(
|
|
92
|
+
export function isBlackKey(note: number | string) {
|
|
93
|
+
return !isWhiteKey(note)
|
|
92
94
|
}
|
|
93
95
|
|
|
96
|
+
/**
|
|
97
|
+
* @category MIDI
|
|
98
|
+
*/
|
|
94
99
|
export const scaleNames = ['major', 'minor', 'natural minor', 'pentatonic']
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
103
|
+
* @param detune [cent]
|
|
104
|
+
* @param a4 A4 frequency [Hz]
|
|
105
|
+
* @returns frequency [Hz]
|
|
106
|
+
* @category MIDI
|
|
107
|
+
*/
|
|
108
|
+
export function noteToFrequency(note: number | string, detune = 0, a4 = 440) {
|
|
109
|
+
const n = typeof note == 'string' ? noteNumber(note) : note
|
|
110
|
+
return (a4 / 32) * 2 ** ((n - 9 + detune / 100) / 12)
|
|
111
|
+
}
|