cantor-digitalis 0.0.1 → 0.0.3

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/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Cantor Digitalis
2
2
 
3
- A Web Audio implementation of the Cantor Digitalis voice synthesizer, a physically-informed source-filter model for singing voice synthesis.
3
+ A Web Audio implementation of the Cantor Digitalis voice synthesizer, a physically-informed source-filter model for synthesizing sung vowel sounds. It produces natural-sounding singing voices with high-level controls over pitch, vowel quality, vocal effort, and other perceptually relevant parameters.
4
4
 
5
- This library is an implementation of the synthesis pipeline described in [L Feugère et al., 2017](https://hal.sorbonne-universite.fr/hal-01461822v1/document). The research and signal processing design are the work of the original authors; this project provides a web-based implementation using the Web Audio API.
5
+ This library is an implementation of that synthesis pipeline, as described in [L Feugère et al., 2017](https://hal.sorbonne-universite.fr/hal-01461822v1/document). The research and signal processing design are the work of the original authors; this project provides a web-based implementation using the Web Audio API.
6
6
 
7
7
  > Lionel Feugère, Christophe d’Alessandro, Boris Doval, Olivier Perrotin. Cantor Digitalis: chironomic
8
8
  > parametric synthesis of singing. EURASIP Journal on Audio, Speech, and Music Processing, 2017,
@@ -83,6 +83,48 @@ Additionally, the synthesizer exposes `AudioParam` objects for the synth-level p
83
83
  | `vocalTractSize` | 0–1 | Vocal tract scaling (child to giant) |
84
84
  | `isFalsetto` | bool | Laryngeal mechanism (M1/M2) |
85
85
 
86
+ ### Custom Vowel Tables
87
+
88
+ You may notice that the synthesizer sings with a french accent. The default vowels are the French vowel sounds from the research paper. The frequency and bandwidths of the formants for each vowel can change the character of the produced sound significantly. You can provide a custom vowel table, mapping locations in vowel space to a set of formant frequencies, amplitudes, and bandwidths. You can source these from other research papers, or analyze the formant frequencies of recorded vowel sounds using tools like [Praat](https://www.fon.hum.uva.nl/praat/).
89
+
90
+ ```typescript
91
+ import { generateSynthParams, VowelTable, defaultVowelTable } from "cantor-digitalis";
92
+
93
+ // Create a custom vowel table
94
+ const customTable: VowelTable = {
95
+ vowels: [
96
+ {
97
+ ipa: "a",
98
+ h: 0.5, // backness: 0 = back, 1 = front
99
+ v: 1, // height: 0 = close, 1 = open
100
+ formants: [
101
+ { frequency: 700, amplitude: 0, bandwidth: 100 },
102
+ { frequency: 1200, amplitude: -3, bandwidth: 120 },
103
+ { frequency: 2500, amplitude: -10, bandwidth: 150 },
104
+ { frequency: 3500, amplitude: -15, bandwidth: 200 },
105
+ { frequency: 4500, amplitude: -20, bandwidth: 250 },
106
+ { frequency: 5500, amplitude: -25, bandwidth: 300 },
107
+ ],
108
+ },
109
+ {
110
+ ipa: "i",
111
+ h: 1, v: 0,
112
+ formants: [/* ... */],
113
+ },
114
+ {
115
+ ipa: "u",
116
+ h: 0, v: 0,
117
+ formants: [/* ... */],
118
+ volumeAdjustment: -5, // optional: balance overall amplitude for this vowel
119
+ },
120
+ ],
121
+ idwPower: 2, // optional: interpolation sharpness (default: 2)
122
+ };
123
+
124
+ // Use with generateSynthParams
125
+ const synthParams = generateSynthParams(params, { vowelTable: customTable });
126
+ ```
127
+
86
128
  ### Synth Parameters
87
129
 
88
130
  These low-level parameters directly control the audio processing and correspond to the physical/acoustic properties in the research paper.
package/dist/index.d.ts CHANGED
@@ -7,10 +7,9 @@
7
7
  * @packageDocumentation
8
8
  */
9
9
  export { Voice } from "./nodes/voice";
10
- export { generateSynthParams } from "./parameters";
11
- export type { PerceptualParams, SynthParams, SynthFormant, SynthFeatures } from "./parameters";
12
- export { interpolateFormants, vowels } from "./parameters/vowels";
13
- export type { Formant, VowelData } from "./parameters/vowels";
10
+ export { generateSynthParams, defaultVowelTable } from "./parameters";
11
+ export type { PerceptualParams, SynthParams, SynthFormant, SynthOptions, SynthFeatures, VowelTable, VowelData, Formant, } from "./parameters";
12
+ export { interpolateFormants } from "./parameters/vowels";
14
13
  export type { Node } from "./nodes/types";
15
14
  export { GlottalFlowDerivative } from "./nodes/glottal-flow-derivative";
16
15
  export type { GlottalFlowDerivativeParams } from "./nodes/glottal-flow-derivative";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG9D,YAAY,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,OAAO,GACR,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,YAAY,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}