@onjmin/dtm 0.1.83 → 0.1.84

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.
@@ -1,6 +1,135 @@
1
1
  "use strict";
2
2
  (() => {
3
- // node_modules/.pnpm/@onjmin+koe@1.0.4/node_modules/@onjmin/koe/dist/index.js
3
+ // node_modules/.pnpm/@onjmin+koe@1.0.5/node_modules/@onjmin/koe/dist/index.js
4
+ var u8 = Uint8Array;
5
+ var u16 = Uint16Array;
6
+ var i32 = Int32Array;
7
+ var fleb = new u8([
8
+ 0,
9
+ 0,
10
+ 0,
11
+ 0,
12
+ 0,
13
+ 0,
14
+ 0,
15
+ 0,
16
+ 1,
17
+ 1,
18
+ 1,
19
+ 1,
20
+ 2,
21
+ 2,
22
+ 2,
23
+ 2,
24
+ 3,
25
+ 3,
26
+ 3,
27
+ 3,
28
+ 4,
29
+ 4,
30
+ 4,
31
+ 4,
32
+ 5,
33
+ 5,
34
+ 5,
35
+ 5,
36
+ 0,
37
+ /* unused */
38
+ 0,
39
+ 0,
40
+ /* impossible */
41
+ 0
42
+ ]);
43
+ var fdeb = new u8([
44
+ 0,
45
+ 0,
46
+ 0,
47
+ 0,
48
+ 1,
49
+ 1,
50
+ 2,
51
+ 2,
52
+ 3,
53
+ 3,
54
+ 4,
55
+ 4,
56
+ 5,
57
+ 5,
58
+ 6,
59
+ 6,
60
+ 7,
61
+ 7,
62
+ 8,
63
+ 8,
64
+ 9,
65
+ 9,
66
+ 10,
67
+ 10,
68
+ 11,
69
+ 11,
70
+ 12,
71
+ 12,
72
+ 13,
73
+ 13,
74
+ /* unused */
75
+ 0,
76
+ 0
77
+ ]);
78
+ var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
79
+ var freb = function(eb, start) {
80
+ var b = new u16(31);
81
+ for (var i2 = 0; i2 < 31; ++i2) {
82
+ b[i2] = start += 1 << eb[i2 - 1];
83
+ }
84
+ var r = new i32(b[30]);
85
+ for (var i2 = 1; i2 < 30; ++i2) {
86
+ for (var j = b[i2]; j < b[i2 + 1]; ++j) {
87
+ r[j] = j - b[i2] << 5 | i2;
88
+ }
89
+ }
90
+ return { b, r };
91
+ };
92
+ var _a = freb(fleb, 2);
93
+ var fl = _a.b;
94
+ var revfl = _a.r;
95
+ fl[28] = 258, revfl[258] = 28;
96
+ var _b = freb(fdeb, 0);
97
+ var fd = _b.b;
98
+ var revfd = _b.r;
99
+ var rev = new u16(32768);
100
+ for (i = 0; i < 32768; ++i) {
101
+ x = (i & 43690) >> 1 | (i & 21845) << 1;
102
+ x = (x & 52428) >> 2 | (x & 13107) << 2;
103
+ x = (x & 61680) >> 4 | (x & 3855) << 4;
104
+ rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;
105
+ }
106
+ var x;
107
+ var i;
108
+ var flt = new u8(288);
109
+ for (i = 0; i < 144; ++i)
110
+ flt[i] = 8;
111
+ var i;
112
+ for (i = 144; i < 256; ++i)
113
+ flt[i] = 9;
114
+ var i;
115
+ for (i = 256; i < 280; ++i)
116
+ flt[i] = 7;
117
+ var i;
118
+ for (i = 280; i < 288; ++i)
119
+ flt[i] = 8;
120
+ var i;
121
+ var fdt = new u8(32);
122
+ for (i = 0; i < 32; ++i)
123
+ fdt[i] = 5;
124
+ var i;
125
+ var et = /* @__PURE__ */ new u8(0);
126
+ var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
127
+ var tds = 0;
128
+ try {
129
+ td.decode(et, { stream: true });
130
+ tds = 1;
131
+ } catch (e) {
132
+ }
4
133
  var MAGIC = 1263486208;
5
134
  function parseKoeHeader(headerBytes) {
6
135
  const view = new DataView(headerBytes);
@@ -166,7 +295,7 @@
166
295
  if (!buf) return null;
167
296
  const int16 = new Int16Array(buf, 0, Math.floor(buf.byteLength / 2));
168
297
  const f64 = new Float64Array(int16.length);
169
- for (let i = 0; i < int16.length; i++) f64[i] = int16[i] / 32768;
298
+ for (let i2 = 0; i2 < int16.length; i2++) f64[i2] = int16[i2] / 32768;
170
299
  return f64;
171
300
  }
172
301
  };
@@ -174,6 +303,7 @@
174
303
  var MIN_WORLDLINE_SAMPLES = 4096;
175
304
  var SYNTH_REQ_SIZE = 120;
176
305
  var WL_FRAME_MS = 10;
306
+ var sampleCurve = (input, curve, totalMs) => typeof curve === "function" ? curve(input, totalMs) : curve;
177
307
  var samplesToMs = (samples) => samples / WORLDLINE_SAMPLE_RATE * 1e3;
178
308
  function leadInFromEntry(entry) {
179
309
  return {
@@ -259,11 +389,23 @@
259
389
  * {@link MIN_WORLDLINE_SAMPLES} (too short for stable F0 analysis).
260
390
  */
261
391
  renderNote(params) {
262
- const { pcm, pitch, durationMs, preMs, consonantMs, tempo = 120 } = params;
392
+ const {
393
+ pcm,
394
+ pitch,
395
+ durationMs,
396
+ preMs,
397
+ consonantMs,
398
+ tempo = 120,
399
+ gender = 0.5,
400
+ tension = 0.5,
401
+ breathiness = 0.5,
402
+ voicing = 1
403
+ } = params;
263
404
  if (!pcm || pcm.length < MIN_WORLDLINE_SAMPLES) return null;
264
405
  const WL = this.wasm;
265
406
  const FS = WORLDLINE_SAMPLE_RATE;
266
- const midiNote = Math.round(69 + 12 * Math.log2(pitch / 440));
407
+ const basePitch = sampleCurve(preMs + durationMs / 2, pitch, preMs + durationMs);
408
+ const midiNote = Math.round(69 + 12 * Math.log2(basePitch / 440));
267
409
  const posMs = 0;
268
410
  const reqLen = preMs + durationMs;
269
411
  const cutMs = WL_FRAME_MS * 2;
@@ -309,11 +451,19 @@
309
451
  WL._free(reqPtr);
310
452
  const totalMs = posMs + reqLen + WL_FRAME_MS * 2;
311
453
  const nFrames = Math.ceil(totalMs / WL_FRAME_MS) + 4;
312
- const f0Arr = new Float64Array(nFrames).fill(pitch);
313
- const gArr = new Float64Array(nFrames).fill(0.5);
314
- const tArr = new Float64Array(nFrames).fill(0.5);
315
- const bArr = new Float64Array(nFrames).fill(0.5);
316
- const vArr = new Float64Array(nFrames).fill(1);
454
+ const f0Arr = new Float64Array(nFrames);
455
+ const gArr = new Float64Array(nFrames);
456
+ const tArr = new Float64Array(nFrames);
457
+ const bArr = new Float64Array(nFrames);
458
+ const vArr = new Float64Array(nFrames);
459
+ for (let i2 = 0; i2 < nFrames; i2++) {
460
+ const tMs = i2 * WL_FRAME_MS;
461
+ f0Arr[i2] = sampleCurve(tMs, pitch, totalMs);
462
+ gArr[i2] = sampleCurve(tMs, gender, totalMs);
463
+ tArr[i2] = sampleCurve(tMs, tension, totalMs);
464
+ bArr[i2] = sampleCurve(tMs, breathiness, totalMs);
465
+ vArr[i2] = sampleCurve(tMs, voicing, totalMs);
466
+ }
317
467
  const f0Ptr = WL._malloc(nFrames * 8);
318
468
  const gPtr = WL._malloc(nFrames * 8);
319
469
  const tPtr = WL._malloc(nFrames * 8);
@@ -363,6 +513,18 @@
363
513
  }
364
514
  };
365
515
 
516
+ // src/vibrato.ts
517
+ var VIBRATO_RATE_HZ = 5.5;
518
+ var VIBRATO_DEPTH_CENTS = 35;
519
+ var VIBRATO_FADE_MS = 150;
520
+ var vibratoPitchCurve = (baseHz, preMs) => (tMs) => {
521
+ const sinceOnset = tMs - preMs;
522
+ if (sinceOnset <= 0) return baseHz;
523
+ const depth = VIBRATO_DEPTH_CENTS * Math.min(1, sinceOnset / VIBRATO_FADE_MS);
524
+ const cents = depth * Math.sin(2 * Math.PI * VIBRATO_RATE_HZ * sinceOnset / 1e3);
525
+ return baseHz * 2 ** (cents / 1200);
526
+ };
527
+
366
528
  // src/voice-worker.ts
367
529
  var KOE_SAMPLE_RATE = 48e3;
368
530
  var midiToFreq = (m) => 440 * 2 ** ((m - 69) / 12);
@@ -378,7 +540,7 @@
378
540
  }
379
541
  return p;
380
542
  };
381
- var renderAlias = async (alias, pitch, durationMs) => {
543
+ var renderAlias = async (alias, pitch, durationMs, vibrato) => {
382
544
  if (!bank) return null;
383
545
  const pcm = await getPcm(alias);
384
546
  if (!pcm || pcm.length === 0) return null;
@@ -388,7 +550,7 @@
388
550
  if (worldline) {
389
551
  const audio = worldline.renderNote({
390
552
  pcm,
391
- pitch: targetHz,
553
+ pitch: vibrato ? vibratoPitchCurve(targetHz, lead.preMs) : targetHz,
392
554
  durationMs,
393
555
  ...lead
394
556
  });
@@ -422,9 +584,9 @@
422
584
  return;
423
585
  }
424
586
  if (msg.type === "render") {
425
- const { id, alias, pitch, durationMs } = msg;
587
+ const { id, alias, pitch, durationMs, vibrato } = msg;
426
588
  try {
427
- const out = await renderAlias(alias, pitch, durationMs);
589
+ const out = await renderAlias(alias, pitch, durationMs, vibrato);
428
590
  if (out) {
429
591
  wself.postMessage(
430
592
  {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "onjmin",
3
3
  "license": "MIT",
4
4
  "name": "@onjmin/dtm",
5
- "version": "0.1.83",
5
+ "version": "0.1.84",
6
6
  "description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
7
7
  "homepage": "https://onjmin.github.io/dtm",
8
8
  "repository": {
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@onjmin/chord-parser": "1.0.4",
58
- "@onjmin/koe": "1.0.4",
58
+ "@onjmin/koe": "1.0.5",
59
59
  "midi-json-parser": "8.1.74"
60
60
  },
61
61
  "scripts": {