polyphon 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +374 -2
- package/README.zh-TW.md +375 -0
- package/dist/engine/automation.d.ts +24 -0
- package/dist/engine/automation.d.ts.map +1 -0
- package/dist/engine/automation.js +55 -0
- package/dist/engine/automation.js.map +1 -0
- package/dist/engine/compile.d.ts +36 -0
- package/dist/engine/compile.d.ts.map +1 -0
- package/dist/engine/compile.js +103 -0
- package/dist/engine/compile.js.map +1 -0
- package/dist/engine/jukebox.d.ts +113 -0
- package/dist/engine/jukebox.d.ts.map +1 -0
- package/dist/engine/jukebox.js +287 -0
- package/dist/engine/jukebox.js.map +1 -0
- package/dist/engine/mixer.d.ts +29 -0
- package/dist/engine/mixer.d.ts.map +1 -0
- package/dist/engine/mixer.js +141 -0
- package/dist/engine/mixer.js.map +1 -0
- package/dist/engine/output.d.ts +14 -0
- package/dist/engine/output.d.ts.map +1 -0
- package/dist/engine/output.js +51 -0
- package/dist/engine/output.js.map +1 -0
- package/dist/engine/playback.d.ts +97 -0
- package/dist/engine/playback.d.ts.map +1 -0
- package/dist/engine/playback.js +311 -0
- package/dist/engine/playback.js.map +1 -0
- package/dist/engine/prepare.d.ts +6 -0
- package/dist/engine/prepare.d.ts.map +1 -0
- package/dist/engine/prepare.js +12 -0
- package/dist/engine/prepare.js.map +1 -0
- package/dist/engine/render.d.ts +14 -0
- package/dist/engine/render.d.ts.map +1 -0
- package/dist/engine/render.js +60 -0
- package/dist/engine/render.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/instruments/bowed.d.ts +357 -0
- package/dist/instruments/bowed.d.ts.map +1 -0
- package/dist/instruments/bowed.js +502 -0
- package/dist/instruments/bowed.js.map +1 -0
- package/dist/instruments/builtin.d.ts +261 -0
- package/dist/instruments/builtin.d.ts.map +1 -0
- package/dist/instruments/builtin.js +160 -0
- package/dist/instruments/builtin.js.map +1 -0
- package/dist/instruments/definition.d.ts +46 -0
- package/dist/instruments/definition.d.ts.map +1 -0
- package/dist/instruments/definition.js +5 -0
- package/dist/instruments/definition.js.map +1 -0
- package/dist/instruments/dsp/ambience.d.ts +17 -0
- package/dist/instruments/dsp/ambience.d.ts.map +1 -0
- package/dist/instruments/dsp/ambience.js +146 -0
- package/dist/instruments/dsp/ambience.js.map +1 -0
- package/dist/instruments/dsp/core.d.ts +22 -0
- package/dist/instruments/dsp/core.d.ts.map +1 -0
- package/dist/instruments/dsp/core.js +100 -0
- package/dist/instruments/dsp/core.js.map +1 -0
- package/dist/instruments/dsp/drums.d.ts +112 -0
- package/dist/instruments/dsp/drums.d.ts.map +1 -0
- package/dist/instruments/dsp/drums.js +566 -0
- package/dist/instruments/dsp/drums.js.map +1 -0
- package/dist/instruments/dsp/modal.d.ts +30 -0
- package/dist/instruments/dsp/modal.d.ts.map +1 -0
- package/dist/instruments/dsp/modal.js +54 -0
- package/dist/instruments/dsp/modal.js.map +1 -0
- package/dist/instruments/dsp/piano.d.ts +9 -0
- package/dist/instruments/dsp/piano.d.ts.map +1 -0
- package/dist/instruments/dsp/piano.js +230 -0
- package/dist/instruments/dsp/piano.js.map +1 -0
- package/dist/instruments/dsp/pluck.d.ts +53 -0
- package/dist/instruments/dsp/pluck.d.ts.map +1 -0
- package/dist/instruments/dsp/pluck.js +195 -0
- package/dist/instruments/dsp/pluck.js.map +1 -0
- package/dist/instruments/dsp/reverb.d.ts +16 -0
- package/dist/instruments/dsp/reverb.d.ts.map +1 -0
- package/dist/instruments/dsp/reverb.js +47 -0
- package/dist/instruments/dsp/reverb.js.map +1 -0
- package/dist/instruments/dsp/staccato.d.ts +18 -0
- package/dist/instruments/dsp/staccato.d.ts.map +1 -0
- package/dist/instruments/dsp/staccato.js +147 -0
- package/dist/instruments/dsp/staccato.js.map +1 -0
- package/dist/instruments/play.d.ts +21 -0
- package/dist/instruments/play.d.ts.map +1 -0
- package/dist/instruments/play.js +140 -0
- package/dist/instruments/play.js.map +1 -0
- package/dist/instruments/registry.d.ts +63 -0
- package/dist/instruments/registry.d.ts.map +1 -0
- package/dist/instruments/registry.js +50 -0
- package/dist/instruments/registry.js.map +1 -0
- package/dist/instruments/samples.d.ts +30 -0
- package/dist/instruments/samples.d.ts.map +1 -0
- package/dist/instruments/samples.js +109 -0
- package/dist/instruments/samples.js.map +1 -0
- package/dist/instruments/voices.d.ts +76 -0
- package/dist/instruments/voices.d.ts.map +1 -0
- package/dist/instruments/voices.js +1061 -0
- package/dist/instruments/voices.js.map +1 -0
- package/dist/midi.d.ts +15 -0
- package/dist/midi.d.ts.map +1 -0
- package/dist/midi.js +280 -0
- package/dist/midi.js.map +1 -0
- package/dist/notation/format.d.ts +12 -0
- package/dist/notation/format.d.ts.map +1 -0
- package/dist/notation/format.js +102 -0
- package/dist/notation/format.js.map +1 -0
- package/dist/notation/harmony.d.ts +83 -0
- package/dist/notation/harmony.d.ts.map +1 -0
- package/dist/notation/harmony.js +191 -0
- package/dist/notation/harmony.js.map +1 -0
- package/dist/notation/melody.d.ts +25 -0
- package/dist/notation/melody.d.ts.map +1 -0
- package/dist/notation/melody.js +138 -0
- package/dist/notation/melody.js.map +1 -0
- package/dist/notation/part.d.ts +34 -0
- package/dist/notation/part.d.ts.map +1 -0
- package/dist/notation/part.js +15 -0
- package/dist/notation/part.js.map +1 -0
- package/dist/notation/transform.d.ts +28 -0
- package/dist/notation/transform.d.ts.map +1 -0
- package/dist/notation/transform.js +67 -0
- package/dist/notation/transform.js.map +1 -0
- package/dist/song.d.ts +140 -0
- package/dist/song.d.ts.map +1 -0
- package/dist/song.js +45 -0
- package/dist/song.js.map +1 -0
- package/dist/tempo.d.ts +36 -0
- package/dist/tempo.d.ts.map +1 -0
- package/dist/tempo.js +81 -0
- package/dist/tempo.js.map +1 -0
- package/dist/theory.d.ts +70 -0
- package/dist/theory.d.ts.map +1 -0
- package/dist/theory.js +183 -0
- package/dist/theory.js.map +1 -0
- package/dist/transcribe.d.ts +81 -0
- package/dist/transcribe.d.ts.map +1 -0
- package/dist/transcribe.js +433 -0
- package/dist/transcribe.js.map +1 -0
- package/package.json +57 -4
- package/src/engine/automation.ts +65 -0
- package/src/engine/compile.ts +124 -0
- package/src/engine/jukebox.ts +322 -0
- package/src/engine/mixer.ts +166 -0
- package/src/engine/output.ts +59 -0
- package/src/engine/playback.ts +349 -0
- package/src/engine/prepare.ts +15 -0
- package/src/engine/render.ts +71 -0
- package/src/index.ts +28 -0
- package/src/instruments/bowed.ts +660 -0
- package/src/instruments/builtin.ts +180 -0
- package/src/instruments/definition.ts +52 -0
- package/src/instruments/dsp/ambience.ts +142 -0
- package/src/instruments/dsp/core.ts +97 -0
- package/src/instruments/dsp/drums.ts +565 -0
- package/src/instruments/dsp/modal.ts +76 -0
- package/src/instruments/dsp/piano.ts +226 -0
- package/src/instruments/dsp/pluck.ts +240 -0
- package/src/instruments/dsp/reverb.ts +56 -0
- package/src/instruments/dsp/staccato.ts +141 -0
- package/src/instruments/play.ts +151 -0
- package/src/instruments/registry.ts +100 -0
- package/src/instruments/samples.ts +119 -0
- package/src/instruments/voices.ts +1168 -0
- package/src/midi.ts +285 -0
- package/src/notation/format.ts +96 -0
- package/src/notation/harmony.ts +233 -0
- package/src/notation/melody.ts +133 -0
- package/src/notation/part.ts +42 -0
- package/src/notation/transform.ts +78 -0
- package/src/song.ts +170 -0
- package/src/tempo.ts +108 -0
- package/src/theory.ts +208 -0
- package/src/transcribe.ts +487 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrN,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1H,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzL,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,KAAK,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACvK,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3I,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,KAAK,qBAAqB,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Polyphon: music for the browser, written as code.
|
|
2
|
+
//
|
|
3
|
+
// Write melody, rhythm, chords, pad, arpeggio, bassline, roots, strum, and the part transforms
|
|
4
|
+
// Declare defineSong: tempo, room, tracks (instrument + part), mixing and mastering
|
|
5
|
+
// Play Jukebox: crossfades, preloading, ducking, pause and seek
|
|
6
|
+
// Export renderSong + encodeWav
|
|
7
|
+
// Import songFromMidi, and transcribe for a sung melody
|
|
8
|
+
// Extend registerInstrument
|
|
9
|
+
export { melody, rhythm } from './notation/melody.js';
|
|
10
|
+
export { formatMelody } from './notation/format.js';
|
|
11
|
+
export { chords, chordsDuration, pad, arpeggio, roots, bassline, strum } from './notation/harmony.js';
|
|
12
|
+
export { sequence, stack, repeat, rest, transpose, mapPitch, scaleVelocity, slice, pedal } from './notation/transform.js';
|
|
13
|
+
export { stepsPerBar, VELOCITY } from './notation/part.js';
|
|
14
|
+
export { midi, frequency, noteName, parseChord, voiceChord, scaleDegree, remapToMode, romanChord, MODES } from './theory.js';
|
|
15
|
+
export { defineSong, songDuration, DEFAULT_REVERB } from './song.js';
|
|
16
|
+
export { tempoClock } from './tempo.js';
|
|
17
|
+
export { Jukebox } from './engine/jukebox.js';
|
|
18
|
+
export { Playback } from './engine/playback.js';
|
|
19
|
+
export { prepareSong, prepareSongSync } from './engine/prepare.js';
|
|
20
|
+
export { renderSong, encodeWav } from './engine/render.js';
|
|
21
|
+
export { compileSection } from './engine/compile.js';
|
|
22
|
+
export { songFromMidi } from './midi.js';
|
|
23
|
+
export { PitchTracker, transcribe } from './transcribe.js';
|
|
24
|
+
export { registerInstrument, instrumentNames } from './instruments/registry.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,oGAAoG;AACpG,uFAAuF;AACvF,sEAAsE;AACtE,oCAAoC;AACpC,4DAA4D;AAC5D,gCAAgC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAsB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAiH,MAAM,uBAAuB,CAAC;AACrN,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1H,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAoC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAA8D,MAAM,aAAa,CAAC;AAEzL,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAoG,MAAM,WAAW,CAAC;AACvK,OAAO,EAAE,UAAU,EAAqC,MAAM,YAAY,CAAC;AAE3E,OAAO,EAAE,OAAO,EAA+F,MAAM,qBAAqB,CAAC;AAC3I,OAAO,EAAE,QAAQ,EAA+D,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAsB,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAA4C,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAA0B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAA+D,MAAM,iBAAiB,CAAC;AAExH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAwH,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/** Body: a spectral envelope ([Hz, dB] polyline, the average radiated response) plus narrow modes scattered according to it */
|
|
2
|
+
export interface BodyDef {
|
|
3
|
+
seed: number;
|
|
4
|
+
env: [number, number][];
|
|
5
|
+
/** The lowest mode (the air resonance A0 sits just above it: nothing radiates below) and the highest */
|
|
6
|
+
lo: number;
|
|
7
|
+
hi: number;
|
|
8
|
+
/** Modes per octave at lo; the count grows with frequency */
|
|
9
|
+
density: number;
|
|
10
|
+
/** Q of the modes: low end, high end */
|
|
11
|
+
q: [number, number];
|
|
12
|
+
/** How far each mode jumps above and below the envelope (dB): the larger it is, the more uneven the body */
|
|
13
|
+
rand: number;
|
|
14
|
+
}
|
|
15
|
+
export interface BowDef {
|
|
16
|
+
/** Number of players: 1 is a solo */
|
|
17
|
+
players: number;
|
|
18
|
+
/** Fixed intonation offset between players (cents, standard deviation) */
|
|
19
|
+
spread: number;
|
|
20
|
+
/** Intonation that each player slowly drifts (cents) */
|
|
21
|
+
drift: number;
|
|
22
|
+
/** Vibrato speed (Hz): each note, and each player in a section, varies around it */
|
|
23
|
+
vibRate: number;
|
|
24
|
+
/** Vibrato depth once it has grown in (cents, up and down from the note) */
|
|
25
|
+
vibDepth: number;
|
|
26
|
+
/** How long after the bow starts the vibrato begins (seconds) */
|
|
27
|
+
vibDelay: number;
|
|
28
|
+
/** Range of the bowing point (fraction of the string length): each player sits somewhere in it */
|
|
29
|
+
beta: [number, number];
|
|
30
|
+
/** Bow force: the partial number where the rounded Helmholtz corner has cut the partials by 6 dB, [soft, hard] */
|
|
31
|
+
corner: [number, number];
|
|
32
|
+
/** Sustained bow noise (relative to the string tone) */
|
|
33
|
+
noise: number;
|
|
34
|
+
/** Attack scrape sound */
|
|
35
|
+
scrape: number;
|
|
36
|
+
/** Attack time (seconds), [soft, hard] */
|
|
37
|
+
attack: [number, number];
|
|
38
|
+
/** Time offset at which players come in (seconds) */
|
|
39
|
+
onset: number;
|
|
40
|
+
/** How many cents below the note the attack slides up from */
|
|
41
|
+
scoop: number;
|
|
42
|
+
body: BodyDef;
|
|
43
|
+
/** Loop section length (seconds); a solo's is adjusted to hold a whole number of its vibrato cycles */
|
|
44
|
+
loop: number;
|
|
45
|
+
/** The top string, where it is unlike the others (see topString); notes from its open pitch up are played on it */
|
|
46
|
+
top?: TopString;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The top string's own bowing: its open pitch (Hz); the bowing point as a fraction of the open string (the bow keeps its distance from the
|
|
50
|
+
* bridge as a finger shortens the string, so a stopped note's bowing point is that times f / open, and the comb's notches stay put in hertz);
|
|
51
|
+
* and its corner and bow noise as factors of the other strings'
|
|
52
|
+
*/
|
|
53
|
+
export interface TopString {
|
|
54
|
+
open: number;
|
|
55
|
+
beta: number;
|
|
56
|
+
corner: number;
|
|
57
|
+
noise: number;
|
|
58
|
+
}
|
|
59
|
+
export interface Bowed {
|
|
60
|
+
/** The sample; it runs on a little past the loop's end, with the loop's start repeated (see GUARD) */
|
|
61
|
+
data: Float32Array;
|
|
62
|
+
/** Loop section: [start, end] (samples) */
|
|
63
|
+
loop: [number, number];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Desks: tracks of one section that share a bowed instrument are different players. Two tracks on one sample are one player twice as loud:
|
|
67
|
+
* the same tuning, a vibrato moving in lockstep, heard as one violin slightly flanged. Each desk after the first has its own players: a fresh
|
|
68
|
+
* seed (vibrato wobble, drift, bow noise, scoop), and these differences from the first desk, kept inside what players in one section measure:
|
|
69
|
+
* - intonation: unison violins in an orchestra measured 0-13 cents apart (σ per note, two players; 0.6-8.6 with three or four), each with a
|
|
70
|
+
* steady tendency, one "generally a bit sharp", another "consistently flat" (Ioannou & Kob, ISMA 2019); listeners prefer a unison scatter
|
|
71
|
+
* of 0-5 cents and tolerate 5-14 (Ternström & Sundberg, JASA 1988). A desk leans 3 cents sharp or flat, ±2 from note to note: 1-5 cents
|
|
72
|
+
* from the first desk, 2-10 from each other, before the slow drift every player has;
|
|
73
|
+
* - vibrato: violinists' rates run from about 5.5 Hz (students, Geringer & Allen, JRME 2004) to 6.3 (recorded soloists, Cheslock 1931,
|
|
74
|
+
* Small 1937) and the extent is around 30 cents, 10-60 (Fletcher & Sanders, JASA 1967). A desk is 6% slower or faster (a violin's 6.2 Hz
|
|
75
|
+
* becomes 5.8 or 6.6) and 10% narrower or wider, and starts a note 0.3 of a cycle or more away in phase from the other desks, so two desks
|
|
76
|
+
* drift through and out of step instead of moving together;
|
|
77
|
+
* - the bow: a desk grips the string a little slower or quicker, and lands a little behind the first desk (`lag`, see play.ts). Ensembles
|
|
78
|
+
* measure 24-28 ms (string quartets, Wing et al. 2014) to 30-50 ms (trios, Rasch 1979) of onset scatter between parts; players of one part
|
|
79
|
+
* following the same leader are tighter, so a desk lags 8-12 ms on average, never more than 18 ms on top of the usual humanize.
|
|
80
|
+
*/
|
|
81
|
+
export interface Desk {
|
|
82
|
+
/** Intonation (cents) from the first desk's mean pitch: a tendency, plus or minus 2 from note to note */
|
|
83
|
+
cents: number;
|
|
84
|
+
/** Vibrato speed and depth, as a factor of the first desk's */
|
|
85
|
+
rate: number;
|
|
86
|
+
depth: number;
|
|
87
|
+
/** Vibrato phase at the start of a note, from the first desk's (fraction of a cycle) */
|
|
88
|
+
phase: number;
|
|
89
|
+
/** How long the bow takes to grip the string, as a factor of the first desk's */
|
|
90
|
+
attack: number;
|
|
91
|
+
/** How far behind the first desk the bow lands on average (seconds); each note lands at half to one and a half times this */
|
|
92
|
+
lag: number;
|
|
93
|
+
}
|
|
94
|
+
/** The first desk plays the samples as they always were; a fourth track on an instrument sits at the first desk again, and so on round */
|
|
95
|
+
export declare const DESKS: readonly Desk[];
|
|
96
|
+
/**
|
|
97
|
+
* Compute one bowed-string sample. f is the pitch (Hz), loud decides bow pressure (brightness, bow noise, attack), and seed makes the players different for every note.
|
|
98
|
+
* desk picks the players (see DESKS): 0 is the first desk.
|
|
99
|
+
* The returned sample can loop seamlessly across the loop interval.
|
|
100
|
+
*/
|
|
101
|
+
export declare function bowSample(sr: number, f: number, d: BowDef, loud: boolean, seed: number, desk?: number): Bowed;
|
|
102
|
+
/** How a bowed instrument is sampled and played */
|
|
103
|
+
export interface BowInst {
|
|
104
|
+
def: BowDef;
|
|
105
|
+
/** One sample every how many semitones; the notes in between are made up with a rate change */
|
|
106
|
+
zone: number;
|
|
107
|
+
/** What fraction of the device sample rate to compute at (strings have almost nothing above 12 kHz, and bass instruments even less; saves memory and time) */
|
|
108
|
+
rate: number;
|
|
109
|
+
/** Attack and release at playback (seconds); a song's params.attack / release can override them */
|
|
110
|
+
attack: number;
|
|
111
|
+
release: number;
|
|
112
|
+
/** Velocity (times params.bright) above this value uses the hard-bow layer */
|
|
113
|
+
loudAt: number;
|
|
114
|
+
/** Glide time constant (seconds) */
|
|
115
|
+
glide: number;
|
|
116
|
+
level: number;
|
|
117
|
+
/** Share another instrument's samples (the same group of players, only played differently) */
|
|
118
|
+
share?: string;
|
|
119
|
+
}
|
|
120
|
+
export declare const BOWS: {
|
|
121
|
+
/** String section: seven players */
|
|
122
|
+
strings: {
|
|
123
|
+
def: BowDef;
|
|
124
|
+
zone: number;
|
|
125
|
+
rate: number;
|
|
126
|
+
attack: number;
|
|
127
|
+
release: number;
|
|
128
|
+
loudAt: number;
|
|
129
|
+
glide: number;
|
|
130
|
+
level: number;
|
|
131
|
+
};
|
|
132
|
+
/** The slow version of the string section (soft, long): the same samples */
|
|
133
|
+
strPad: {
|
|
134
|
+
def: BowDef;
|
|
135
|
+
zone: number;
|
|
136
|
+
rate: number;
|
|
137
|
+
attack: number;
|
|
138
|
+
release: number;
|
|
139
|
+
loudAt: number;
|
|
140
|
+
glide: number;
|
|
141
|
+
level: number;
|
|
142
|
+
share: string;
|
|
143
|
+
};
|
|
144
|
+
violin: {
|
|
145
|
+
def: BowDef;
|
|
146
|
+
zone: number;
|
|
147
|
+
rate: number;
|
|
148
|
+
attack: number;
|
|
149
|
+
release: number;
|
|
150
|
+
loudAt: number;
|
|
151
|
+
glide: number;
|
|
152
|
+
level: number;
|
|
153
|
+
};
|
|
154
|
+
cello: {
|
|
155
|
+
def: {
|
|
156
|
+
/** Number of players: 1 is a solo */
|
|
157
|
+
players: number;
|
|
158
|
+
/** Fixed intonation offset between players (cents, standard deviation) */
|
|
159
|
+
spread: number;
|
|
160
|
+
/** Intonation that each player slowly drifts (cents) */
|
|
161
|
+
drift: number;
|
|
162
|
+
/** Vibrato speed (Hz): each note, and each player in a section, varies around it */
|
|
163
|
+
vibRate: number;
|
|
164
|
+
/** Vibrato depth once it has grown in (cents, up and down from the note) */
|
|
165
|
+
vibDepth: number;
|
|
166
|
+
/** How long after the bow starts the vibrato begins (seconds) */
|
|
167
|
+
vibDelay: number;
|
|
168
|
+
/** Range of the bowing point (fraction of the string length): each player sits somewhere in it */
|
|
169
|
+
beta: [number, number];
|
|
170
|
+
/** Bow force: the partial number where the rounded Helmholtz corner has cut the partials by 6 dB, [soft, hard] */
|
|
171
|
+
corner: [number, number];
|
|
172
|
+
/** Sustained bow noise (relative to the string tone) */
|
|
173
|
+
noise: number;
|
|
174
|
+
/** Attack scrape sound */
|
|
175
|
+
scrape: number;
|
|
176
|
+
/** Attack time (seconds), [soft, hard] */
|
|
177
|
+
attack: [number, number];
|
|
178
|
+
/** Time offset at which players come in (seconds) */
|
|
179
|
+
onset: number;
|
|
180
|
+
/** How many cents below the note the attack slides up from */
|
|
181
|
+
scoop: number;
|
|
182
|
+
body: BodyDef;
|
|
183
|
+
/** Loop section length (seconds); a solo's is adjusted to hold a whole number of its vibrato cycles */
|
|
184
|
+
loop: number;
|
|
185
|
+
top: TopString;
|
|
186
|
+
};
|
|
187
|
+
zone: number;
|
|
188
|
+
rate: number;
|
|
189
|
+
attack: number;
|
|
190
|
+
release: number;
|
|
191
|
+
loudAt: number;
|
|
192
|
+
glide: number;
|
|
193
|
+
level: number;
|
|
194
|
+
};
|
|
195
|
+
/** Folk fiddle: brighter, with a faster, narrower vibrato that comes in later */
|
|
196
|
+
fiddle: {
|
|
197
|
+
def: {
|
|
198
|
+
/** Number of players: 1 is a solo */
|
|
199
|
+
players: number;
|
|
200
|
+
/** Fixed intonation offset between players (cents, standard deviation) */
|
|
201
|
+
spread: number;
|
|
202
|
+
/** Intonation that each player slowly drifts (cents) */
|
|
203
|
+
drift: number;
|
|
204
|
+
/** Vibrato speed (Hz): each note, and each player in a section, varies around it */
|
|
205
|
+
vibRate: number;
|
|
206
|
+
/** Vibrato depth once it has grown in (cents, up and down from the note) */
|
|
207
|
+
vibDepth: number;
|
|
208
|
+
/** Range of the bowing point (fraction of the string length): each player sits somewhere in it */
|
|
209
|
+
beta: [number, number];
|
|
210
|
+
/** Bow force: the partial number where the rounded Helmholtz corner has cut the partials by 6 dB, [soft, hard] */
|
|
211
|
+
corner: [number, number];
|
|
212
|
+
/** Sustained bow noise (relative to the string tone) */
|
|
213
|
+
noise: number;
|
|
214
|
+
/** Attack scrape sound */
|
|
215
|
+
scrape: number;
|
|
216
|
+
/** Attack time (seconds), [soft, hard] */
|
|
217
|
+
attack: [number, number];
|
|
218
|
+
/** Time offset at which players come in (seconds) */
|
|
219
|
+
onset: number;
|
|
220
|
+
/** How many cents below the note the attack slides up from */
|
|
221
|
+
scoop: number;
|
|
222
|
+
body: BodyDef;
|
|
223
|
+
/** Loop section length (seconds); a solo's is adjusted to hold a whole number of its vibrato cycles */
|
|
224
|
+
loop: number;
|
|
225
|
+
/** The top string, where it is unlike the others (see topString); notes from its open pitch up are played on it */
|
|
226
|
+
top?: TopString;
|
|
227
|
+
vibDelay: number;
|
|
228
|
+
};
|
|
229
|
+
zone: number;
|
|
230
|
+
rate: number;
|
|
231
|
+
attack: number;
|
|
232
|
+
release: number;
|
|
233
|
+
loudAt: number;
|
|
234
|
+
glide: number;
|
|
235
|
+
level: number;
|
|
236
|
+
};
|
|
237
|
+
/** Morin khuur: horsehair bow, lots of breath noise, wide slow vibrato that comes in later */
|
|
238
|
+
morin: {
|
|
239
|
+
def: {
|
|
240
|
+
/** Number of players: 1 is a solo */
|
|
241
|
+
players: number;
|
|
242
|
+
/** Fixed intonation offset between players (cents, standard deviation) */
|
|
243
|
+
spread: number;
|
|
244
|
+
/** Intonation that each player slowly drifts (cents) */
|
|
245
|
+
drift: number;
|
|
246
|
+
/** Vibrato speed (Hz): each note, and each player in a section, varies around it */
|
|
247
|
+
vibRate: number;
|
|
248
|
+
/** Vibrato depth once it has grown in (cents, up and down from the note) */
|
|
249
|
+
vibDepth: number;
|
|
250
|
+
/** Range of the bowing point (fraction of the string length): each player sits somewhere in it */
|
|
251
|
+
beta: [number, number];
|
|
252
|
+
/** Bow force: the partial number where the rounded Helmholtz corner has cut the partials by 6 dB, [soft, hard] */
|
|
253
|
+
corner: [number, number];
|
|
254
|
+
/** Sustained bow noise (relative to the string tone) */
|
|
255
|
+
noise: number;
|
|
256
|
+
/** Attack scrape sound */
|
|
257
|
+
scrape: number;
|
|
258
|
+
/** Attack time (seconds), [soft, hard] */
|
|
259
|
+
attack: [number, number];
|
|
260
|
+
/** Time offset at which players come in (seconds) */
|
|
261
|
+
onset: number;
|
|
262
|
+
/** How many cents below the note the attack slides up from */
|
|
263
|
+
scoop: number;
|
|
264
|
+
body: BodyDef;
|
|
265
|
+
/** Loop section length (seconds); a solo's is adjusted to hold a whole number of its vibrato cycles */
|
|
266
|
+
loop: number;
|
|
267
|
+
/** The top string, where it is unlike the others (see topString); notes from its open pitch up are played on it */
|
|
268
|
+
top?: TopString;
|
|
269
|
+
vibDelay: number;
|
|
270
|
+
};
|
|
271
|
+
zone: number;
|
|
272
|
+
rate: number;
|
|
273
|
+
attack: number;
|
|
274
|
+
release: number;
|
|
275
|
+
loudAt: number;
|
|
276
|
+
glide: number;
|
|
277
|
+
level: number;
|
|
278
|
+
};
|
|
279
|
+
/** Cello section: five players, for sustained notes and harmony in the low-mid register (use cello for solos) */
|
|
280
|
+
celli: {
|
|
281
|
+
def: {
|
|
282
|
+
/** Number of players: 1 is a solo */
|
|
283
|
+
players: number;
|
|
284
|
+
/** Fixed intonation offset between players (cents, standard deviation) */
|
|
285
|
+
spread: number;
|
|
286
|
+
/** Intonation that each player slowly drifts (cents) */
|
|
287
|
+
drift: number;
|
|
288
|
+
/** How long after the bow starts the vibrato begins (seconds) */
|
|
289
|
+
vibDelay: number;
|
|
290
|
+
/** Range of the bowing point (fraction of the string length): each player sits somewhere in it */
|
|
291
|
+
beta: [number, number];
|
|
292
|
+
/** Attack scrape sound */
|
|
293
|
+
scrape: number;
|
|
294
|
+
/** Attack time (seconds), [soft, hard] */
|
|
295
|
+
attack: [number, number];
|
|
296
|
+
/** Time offset at which players come in (seconds) */
|
|
297
|
+
onset: number;
|
|
298
|
+
/** How many cents below the note the attack slides up from */
|
|
299
|
+
scoop: number;
|
|
300
|
+
body: BodyDef;
|
|
301
|
+
/** Loop section length (seconds); a solo's is adjusted to hold a whole number of its vibrato cycles */
|
|
302
|
+
loop: number;
|
|
303
|
+
vibRate: number;
|
|
304
|
+
vibDepth: number;
|
|
305
|
+
corner: [number, number];
|
|
306
|
+
noise: number;
|
|
307
|
+
top: TopString;
|
|
308
|
+
};
|
|
309
|
+
zone: number;
|
|
310
|
+
rate: number;
|
|
311
|
+
attack: number;
|
|
312
|
+
release: number;
|
|
313
|
+
loudAt: number;
|
|
314
|
+
glide: number;
|
|
315
|
+
level: number;
|
|
316
|
+
};
|
|
317
|
+
/** Double bass section: three players, with a slower vibrato */
|
|
318
|
+
contrabass: {
|
|
319
|
+
def: {
|
|
320
|
+
/** Number of players: 1 is a solo */
|
|
321
|
+
players: number;
|
|
322
|
+
/** Intonation that each player slowly drifts (cents) */
|
|
323
|
+
drift: number;
|
|
324
|
+
/** How long after the bow starts the vibrato begins (seconds) */
|
|
325
|
+
vibDelay: number;
|
|
326
|
+
/** Range of the bowing point (fraction of the string length): each player sits somewhere in it */
|
|
327
|
+
beta: [number, number];
|
|
328
|
+
/** Sustained bow noise (relative to the string tone) */
|
|
329
|
+
noise: number;
|
|
330
|
+
/** Attack scrape sound */
|
|
331
|
+
scrape: number;
|
|
332
|
+
/** Attack time (seconds), [soft, hard] */
|
|
333
|
+
attack: [number, number];
|
|
334
|
+
/** Time offset at which players come in (seconds) */
|
|
335
|
+
onset: number;
|
|
336
|
+
/** How many cents below the note the attack slides up from */
|
|
337
|
+
scoop: number;
|
|
338
|
+
body: BodyDef;
|
|
339
|
+
/** Loop section length (seconds); a solo's is adjusted to hold a whole number of its vibrato cycles */
|
|
340
|
+
loop: number;
|
|
341
|
+
/** The top string, where it is unlike the others (see topString); notes from its open pitch up are played on it */
|
|
342
|
+
top?: TopString;
|
|
343
|
+
vibRate: number;
|
|
344
|
+
vibDepth: number;
|
|
345
|
+
corner: [number, number];
|
|
346
|
+
spread: number;
|
|
347
|
+
};
|
|
348
|
+
zone: number;
|
|
349
|
+
rate: number;
|
|
350
|
+
attack: number;
|
|
351
|
+
release: number;
|
|
352
|
+
loudAt: number;
|
|
353
|
+
glide: number;
|
|
354
|
+
level: number;
|
|
355
|
+
};
|
|
356
|
+
};
|
|
357
|
+
//# sourceMappingURL=bowed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bowed.d.ts","sourceRoot":"","sources":["../../src/instruments/bowed.ts"],"names":[],"mappings":"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"}
|