@onjmin/dtm 0.1.95 → 0.1.98
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/index.d.mts +44 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.js +417 -41
- package/dist/index.mjs +417 -41
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1549,13 +1549,21 @@ var createChannelStrip = (ctx, destination, options = {}) => {
|
|
|
1549
1549
|
);
|
|
1550
1550
|
};
|
|
1551
1551
|
setWidth(options.width ?? 100);
|
|
1552
|
+
const panner = typeof ctx.createStereoPanner === "function" ? ctx.createStereoPanner() : null;
|
|
1553
|
+
if (panner) panner.pan.value = clamp(options.pan ?? 0, -1, 1);
|
|
1554
|
+
const panOut = panner ?? merger;
|
|
1552
1555
|
eqHigh.connect(compressor);
|
|
1553
1556
|
compressor.connect(splitter);
|
|
1554
|
-
merger.connect(
|
|
1557
|
+
if (panner) merger.connect(panner);
|
|
1558
|
+
panOut.connect(destination);
|
|
1555
1559
|
const reverbSendGain = ctx.createGain();
|
|
1556
1560
|
reverbSendGain.gain.value = clamp(options.reverbSend ?? 0, 0, 100) / 100;
|
|
1557
|
-
|
|
1561
|
+
panOut.connect(reverbSendGain);
|
|
1558
1562
|
if (options.reverbBus) reverbSendGain.connect(options.reverbBus);
|
|
1563
|
+
const delaySendGain = ctx.createGain();
|
|
1564
|
+
delaySendGain.gain.value = clamp(options.delaySend ?? 0, 0, 100) / 100;
|
|
1565
|
+
panOut.connect(delaySendGain);
|
|
1566
|
+
if (options.delayBus) delaySendGain.connect(options.delayBus);
|
|
1559
1567
|
return {
|
|
1560
1568
|
input,
|
|
1561
1569
|
setEqLow: (db) => {
|
|
@@ -1588,6 +1596,17 @@ var createChannelStrip = (ctx, destination, options = {}) => {
|
|
|
1588
1596
|
0.02
|
|
1589
1597
|
);
|
|
1590
1598
|
},
|
|
1599
|
+
setDelaySend: (amount) => {
|
|
1600
|
+
delaySendGain.gain.setTargetAtTime(
|
|
1601
|
+
clamp(amount, 0, 100) / 100,
|
|
1602
|
+
ctx.currentTime,
|
|
1603
|
+
0.02
|
|
1604
|
+
);
|
|
1605
|
+
},
|
|
1606
|
+
setPan: (pan) => {
|
|
1607
|
+
if (!panner) return;
|
|
1608
|
+
panner.pan.setTargetAtTime(clamp(pan, -1, 1), ctx.currentTime, 0.02);
|
|
1609
|
+
},
|
|
1591
1610
|
dispose: () => {
|
|
1592
1611
|
input.disconnect();
|
|
1593
1612
|
eqLow.disconnect();
|
|
@@ -1604,7 +1623,9 @@ var createChannelStrip = (ctx, destination, options = {}) => {
|
|
|
1604
1623
|
outL.disconnect();
|
|
1605
1624
|
outR.disconnect();
|
|
1606
1625
|
merger.disconnect();
|
|
1626
|
+
panner?.disconnect();
|
|
1607
1627
|
reverbSendGain.disconnect();
|
|
1628
|
+
delaySendGain.disconnect();
|
|
1608
1629
|
}
|
|
1609
1630
|
};
|
|
1610
1631
|
};
|
|
@@ -3536,7 +3557,7 @@ var PITCH_MAP = {
|
|
|
3536
3557
|
b: 11
|
|
3537
3558
|
};
|
|
3538
3559
|
var clamp3 = (value, lo, hi) => Math.min(hi, Math.max(lo, value));
|
|
3539
|
-
var META_DIRECTIVE = /#(inst|drum|drumfont|volume|drumvolume|reverb|reverbdecay|reverbpredelay|delay|delaydiv|fadein|fadeout|mode)=([\w-]+)/gi;
|
|
3560
|
+
var META_DIRECTIVE = /#(inst|drum|drumfont|volume|drumvolume|reverb|reverbdecay|reverbpredelay|delay|delaydiv|mastercomp|fadein|fadeout|mode)=([\w-]+)/gi;
|
|
3540
3561
|
var TRACK_INST_DIRECTIVE = /#t(\d+)inst=([^#;\r\n]+)/gi;
|
|
3541
3562
|
var TRACK_COMP_DIRECTIVE = /#t(\d+)comp=(\d+)/gi;
|
|
3542
3563
|
var TRACK_WIDTH_DIRECTIVE = /#t(\d+)width=(\d+)/gi;
|
|
@@ -3544,6 +3565,8 @@ var TRACK_REVERBSEND_DIRECTIVE = /#t(\d+)rev=(\d+)/gi;
|
|
|
3544
3565
|
var TRACK_EQLOW_DIRECTIVE = /#t(\d+)eqlo=(-?\d+)/gi;
|
|
3545
3566
|
var TRACK_EQMID_DIRECTIVE = /#t(\d+)eqmid=(-?\d+)/gi;
|
|
3546
3567
|
var TRACK_EQHIGH_DIRECTIVE = /#t(\d+)eqhi=(-?\d+)/gi;
|
|
3568
|
+
var TRACK_PAN_DIRECTIVE = /#t(\d+)pan=(\d+)/gi;
|
|
3569
|
+
var TRACK_DELAYSEND_DIRECTIVE = /#t(\d+)dly=(\d+)/gi;
|
|
3547
3570
|
var parseMmlMeta = (mml) => {
|
|
3548
3571
|
const meta = {};
|
|
3549
3572
|
for (const m of mml.matchAll(META_DIRECTIVE)) {
|
|
@@ -3571,6 +3594,9 @@ var parseMmlMeta = (mml) => {
|
|
|
3571
3594
|
if (!Number.isNaN(dv)) meta.delay = clamp3(dv, 0, 100);
|
|
3572
3595
|
} else if (key === "delaydiv") {
|
|
3573
3596
|
if (["4", "8", "8d", "16"].includes(m[2])) meta.delayDivision = m[2];
|
|
3597
|
+
} else if (key === "mastercomp") {
|
|
3598
|
+
const mc = Number.parseInt(m[2], 10);
|
|
3599
|
+
if (!Number.isNaN(mc)) meta.masterCompression = clamp3(mc, 0, 100);
|
|
3574
3600
|
} else if (key === "fadein") {
|
|
3575
3601
|
const fi = Number.parseInt(m[2], 10);
|
|
3576
3602
|
if (!Number.isNaN(fi)) meta.fadeIn = clamp3(fi, 0, 100);
|
|
@@ -3639,9 +3665,25 @@ var parseMmlMeta = (mml) => {
|
|
|
3639
3665
|
meta.trackEqHigh[idx] = val;
|
|
3640
3666
|
}
|
|
3641
3667
|
}
|
|
3668
|
+
for (const m of mml.matchAll(TRACK_PAN_DIRECTIVE)) {
|
|
3669
|
+
const idx = Number.parseInt(m[1], 10);
|
|
3670
|
+
const val = clamp3(Number.parseInt(m[2], 10), 0, 127);
|
|
3671
|
+
if (!Number.isNaN(idx) && !Number.isNaN(val)) {
|
|
3672
|
+
meta.trackPan ??= {};
|
|
3673
|
+
meta.trackPan[idx] = val;
|
|
3674
|
+
}
|
|
3675
|
+
}
|
|
3676
|
+
for (const m of mml.matchAll(TRACK_DELAYSEND_DIRECTIVE)) {
|
|
3677
|
+
const idx = Number.parseInt(m[1], 10);
|
|
3678
|
+
const val = clamp3(Number.parseInt(m[2], 10), 0, 100);
|
|
3679
|
+
if (!Number.isNaN(idx) && !Number.isNaN(val)) {
|
|
3680
|
+
meta.trackDelaySend ??= {};
|
|
3681
|
+
meta.trackDelaySend[idx] = val;
|
|
3682
|
+
}
|
|
3683
|
+
}
|
|
3642
3684
|
return meta;
|
|
3643
3685
|
};
|
|
3644
|
-
var stripMmlMeta = (mml) => mml.replace(META_DIRECTIVE, "").replace(TRACK_INST_DIRECTIVE, "").replace(TRACK_COMP_DIRECTIVE, "").replace(TRACK_WIDTH_DIRECTIVE, "").replace(TRACK_REVERBSEND_DIRECTIVE, "").replace(TRACK_EQLOW_DIRECTIVE, "").replace(TRACK_EQMID_DIRECTIVE, "").replace(TRACK_EQHIGH_DIRECTIVE, "");
|
|
3686
|
+
var stripMmlMeta = (mml) => mml.replace(META_DIRECTIVE, "").replace(TRACK_INST_DIRECTIVE, "").replace(TRACK_COMP_DIRECTIVE, "").replace(TRACK_WIDTH_DIRECTIVE, "").replace(TRACK_REVERBSEND_DIRECTIVE, "").replace(TRACK_EQLOW_DIRECTIVE, "").replace(TRACK_EQMID_DIRECTIVE, "").replace(TRACK_EQHIGH_DIRECTIVE, "").replace(TRACK_PAN_DIRECTIVE, "").replace(TRACK_DELAYSEND_DIRECTIVE, "");
|
|
3645
3687
|
var formatMmlMeta = (meta, space = "") => {
|
|
3646
3688
|
const parts = [];
|
|
3647
3689
|
if (meta.instrument) parts.push(`#inst=${meta.instrument}`);
|
|
@@ -3660,6 +3702,8 @@ var formatMmlMeta = (meta, space = "") => {
|
|
|
3660
3702
|
parts.push(`#delay=${meta.delay}`);
|
|
3661
3703
|
if (meta.delayDivision && meta.delayDivision !== "8")
|
|
3662
3704
|
parts.push(`#delaydiv=${meta.delayDivision}`);
|
|
3705
|
+
if (meta.masterCompression !== void 0 && meta.masterCompression !== 0)
|
|
3706
|
+
parts.push(`#mastercomp=${meta.masterCompression}`);
|
|
3663
3707
|
if (meta.fadeIn !== void 0 && meta.fadeIn !== 0)
|
|
3664
3708
|
parts.push(`#fadein=${meta.fadeIn}`);
|
|
3665
3709
|
if (meta.fadeOut !== void 0 && meta.fadeOut !== 0)
|
|
@@ -3700,6 +3744,16 @@ var formatMmlMeta = (meta, space = "") => {
|
|
|
3700
3744
|
if (val !== 0) parts.push(`#t${idx}eqhi=${val}`);
|
|
3701
3745
|
}
|
|
3702
3746
|
}
|
|
3747
|
+
if (meta.trackPan) {
|
|
3748
|
+
for (const [idx, val] of Object.entries(meta.trackPan)) {
|
|
3749
|
+
if (val !== 64) parts.push(`#t${idx}pan=${val}`);
|
|
3750
|
+
}
|
|
3751
|
+
}
|
|
3752
|
+
if (meta.trackDelaySend) {
|
|
3753
|
+
for (const [idx, val] of Object.entries(meta.trackDelaySend)) {
|
|
3754
|
+
if (val !== 0) parts.push(`#t${idx}dly=${val}`);
|
|
3755
|
+
}
|
|
3756
|
+
}
|
|
3703
3757
|
return parts.join(space);
|
|
3704
3758
|
};
|
|
3705
3759
|
var parseMML = (mml, options = {}) => {
|
|
@@ -11533,6 +11587,12 @@ var buildUI = (target, options) => {
|
|
|
11533
11587
|
<input type="range" class="dtm-range dtm-grow" data-dtm="master-volume" value="50" min="0" max="100">
|
|
11534
11588
|
<span class="dtm-label" data-dtm="master-volume-label">50%</span>
|
|
11535
11589
|
</div>
|
|
11590
|
+
<div class="dtm-row">
|
|
11591
|
+
<span class="dtm-label">\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7</span>
|
|
11592
|
+
<input type="range" class="dtm-range dtm-grow" data-dtm="master-comp" value="0" min="0" max="100" aria-label="\u30DE\u30B9\u30BF\u30D0\u30B9\u306E\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u30EC\u30C3\u30B5\u30FC\uFF08\u5168\u30C8\u30E9\u30C3\u30AF\u3092\u307E\u3068\u3081\u3066\u8EFD\u304F\u5727\u7E2E\u3057\u3001\u4E00\u4F53\u611F\u3092\u51FA\u3059\uFF09">
|
|
11593
|
+
<span class="dtm-label" data-dtm="master-comp-label">0%</span>
|
|
11594
|
+
<button class="dtm-infobtn" data-dtm="master-comp-info" title="\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u306E\u89E3\u8AAC">${icon("info", 12)}</button>
|
|
11595
|
+
</div>
|
|
11536
11596
|
<div class="dtm-row">
|
|
11537
11597
|
<button class="dtm-btn dtm-btn--ghost dtm-btn--xs" data-dtm="auto-master" title="\u97F3\u5727\u30FB\u30B9\u30C6\u30EC\u30AA\u5E45\u30FB\u30EA\u30D0\u30FC\u30D6\u306B\u52A0\u3048\u3001\u5404\u30C8\u30E9\u30C3\u30AF\u306E\u697D\u5668\u30FB\u97F3\u91CF\u3082\u81EA\u52D5\u63A8\u5B9A\u3057\u3066\u4E00\u62EC\u8A2D\u5B9A\u3057\u307E\u3059">\u304A\u307E\u304B\u305B\u30DE\u30B9\u30BF\u30EA\u30F3\u30B0</button>
|
|
11538
11598
|
<button class="dtm-infobtn" data-dtm="auto-master-info" title="\u304A\u307E\u304B\u305B\u30DE\u30B9\u30BF\u30EA\u30F3\u30B0\u306E\u89E3\u8AAC">${icon("info", 12)}</button>
|
|
@@ -11788,6 +11848,9 @@ var buildUI = (target, options) => {
|
|
|
11788
11848
|
hScrollThumb: sel("hscroll-thumb"),
|
|
11789
11849
|
masterVolume: sel("master-volume"),
|
|
11790
11850
|
masterVolumeLabel: sel("master-volume-label"),
|
|
11851
|
+
masterComp: sel("master-comp"),
|
|
11852
|
+
masterCompLabel: sel("master-comp-label"),
|
|
11853
|
+
masterCompInfoBtn: sel("master-comp-info"),
|
|
11791
11854
|
reverbAmount: sel("reverb-amount"),
|
|
11792
11855
|
reverbAmountLabel: sel("reverb-amount-label"),
|
|
11793
11856
|
reverbAmountInfoBtn: sel("reverb-amount-info"),
|
|
@@ -13633,6 +13696,16 @@ var TRACK_WIDTH_INFO_HTML = `
|
|
|
13633
13696
|
<p>\u30B9\u30DE\u30DB\u306E\u30B9\u30D4\u30FC\u30AB\u30FC1\u500B\u306A\u3069\u3001\u30E2\u30CE\u30E9\u30EB\u306B\u8FD1\u3044\u74B0\u5883\u3067\u518D\u751F\u3059\u308B\u3068\u97F3\u304C\u8584\u304F/\u4F4D\u76F8\u304C\u4E71\u308C\u3066\u805E\u3053\u3048\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF08\u5DE6\u53F3\u306E\u5DEE\u5206\u3092\u8A87\u5F35\u3057\u3066\u3044\u308B\u305F\u3081\u3001\u8DB3\u3057\u5408\u308F\u305B\u308B\u3068\u6253\u3061\u6D88\u3057\u5408\u3046\u6210\u5206\u304C\u5897\u3048\u308B\uFF09\u3002\u4E3B\u65CB\u5F8B\u3084\u30DC\u30FC\u30AB\u30EB\u306F\u4E2D\u592E\u4ED8\u8FD1\u3067\u72ED\u3081\u3001\u30D1\u30C3\u30C9\u3084\u30B7\u30F3\u30BB\u306E\u88C5\u98FE\u30D1\u30FC\u30C8\u306F\u5E83\u3052\u308B\u3001\u3068\u3044\u3046\u306E\u304C\u30DF\u30C3\u30AF\u30B9\u306E\u5B9A\u77F3\u3067\u3059\u3002</p>
|
|
13634
13697
|
</div>
|
|
13635
13698
|
`;
|
|
13699
|
+
var TRACK_PAN_INFO_HTML = `
|
|
13700
|
+
<div class="dtm-modal-body-content">
|
|
13701
|
+
<h4>\u4F55\u3092\u3059\u308B\u8A2D\u5B9A\u304B</h4>
|
|
13702
|
+
<p>\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u3092\u5DE6\u53F3\u306E\u3069\u3053\u306B\u7F6E\u304F\u304B\u3092\u6C7A\u3081\u307E\u3059\u300264\u304C\u4E2D\u592E\u30010\u3067\u5DE6\u3044\u3063\u3071\u3044\u3001127\u3067\u53F3\u3044\u3063\u3071\u3044\u3067\u3059\u3002\u6B4C\u8A5E\u30C8\u30E9\u30C3\u30AF\u306E\u5834\u5408\u3001\u3053\u3053\u306F\u697D\u5668\u3068\u3057\u3066\u306E\u30C8\u30E9\u30C3\u30AF\u5168\u4F53\u306E\u5B9A\u4F4D\u3067\u3001\u6B4C\u5531\u305D\u306E\u3082\u306E\u306E\u5B9A\u4F4D\uFF08\u4E0B\u306E\u300C\u5B9A\u4F4D\u300D\u6B04\u30FBvocalPan\uFF09\u3068\u306F\u5225\u306B\u50CD\u304D\u3001\u4E21\u65B9\u304C\u91CD\u306A\u3063\u3066\u6700\u7D42\u7684\u306A\u4F4D\u7F6E\u306B\u306A\u308A\u307E\u3059\u3002</p>
|
|
13703
|
+
<h4>\u300C\u30B9\u30C6\u30EC\u30AA\u5E45\u300D\u3068\u306E\u9055\u3044</h4>
|
|
13704
|
+
<p>\u5B9A\u4F4D\u306F\u300C\u97F3\u3092\u3069\u3053\u306B\u7F6E\u304F\u304B\u300D\uFF08\u5DE6\u5BC4\u308A/\u4E2D\u592E/\u53F3\u5BC4\u308A\uFF09\u3001\u30B9\u30C6\u30EC\u30AA\u5E45\u306F\u300C\u305D\u306E\u97F3\u81EA\u4F53\u304C\u3069\u308C\u3060\u3051\u5E83\u304C\u3063\u3066\u805E\u3053\u3048\u308B\u304B\u300D\u3067\u3001\u5F79\u5272\u304C\u7570\u306A\u308A\u307E\u3059\u3002\u4E21\u65B9\u3092\u5F37\u304F\u4F7F\u3046\u3068\u5B9A\u4F4D\u304C\u307C\u3084\u3051\u3066\u66D6\u6627\u306B\u306A\u308A\u304C\u3061\u3067\u3059\u3002</p>
|
|
13705
|
+
<h4>\u30DF\u30C3\u30AF\u30B9\u306E\u5B9A\u77F3</h4>
|
|
13706
|
+
<p>\u4E3B\u65CB\u5F8B\u30FB\u30DC\u30FC\u30AB\u30EB\u30FB\u30D9\u30FC\u30B9\u306A\u3069\u66F2\u306E\u8EF8\u306B\u306A\u308B\u30D1\u30FC\u30C8\u306F\u4E2D\u592E\u4ED8\u8FD1\u306B\u7F6E\u304D\u3001\u30CF\u30E2\u30EA\u30FB\u30AB\u30A6\u30F3\u30BF\u30FC\u30E1\u30ED\u30C7\u30A3\u30FB\u4F34\u594F\uFF08\u30B3\u30FC\u30C9/\u30D1\u30C3\u30C9\uFF09\u306A\u3069\u5F69\u308A\u306E\u30D1\u30FC\u30C8\u3092\u5DE6\u53F3\u3078\u632F\u308A\u5206\u3051\u308B\u3068\u3001\u5404\u30D1\u30FC\u30C8\u306E\u5C45\u5834\u6240\u304C\u5206\u304B\u308C\u3066\u805E\u304D\u53D6\u308A\u3084\u3059\u304F\u306A\u308A\u307E\u3059\uFF08\u7279\u306B\u4F4E\u57DF\u306F\u4E2D\u592E\u306B\u96C6\u3081\u308B\u306E\u304C\u5B9A\u77F3\u3067\u3059 \u2014 \u5DE6\u53F3\u306B\u632F\u308B\u3068\u4F4D\u76F8\u5E72\u6E09\u3067\u30E2\u30CE\u30E9\u30EB\u518D\u751F\u6642\u306B\u4F4E\u97F3\u304C\u75E9\u305B\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF09\u3002</p>
|
|
13707
|
+
</div>
|
|
13708
|
+
`;
|
|
13636
13709
|
var TRACK_REVERBSEND_INFO_HTML = `
|
|
13637
13710
|
<div class="dtm-modal-body-content">
|
|
13638
13711
|
<h4>\u4F55\u3092\u3059\u308B\u8A2D\u5B9A\u304B</h4>
|
|
@@ -13643,34 +13716,57 @@ var TRACK_REVERBSEND_INFO_HTML = `
|
|
|
13643
13716
|
<p>Mix\u306F\u300C\u9001\u3089\u308C\u3066\u304D\u305F\u97F3\u3092\u3069\u308C\u3060\u3051\u8FD4\u3059\u304B\u300D\u3068\u3044\u3046\u5168\u4F53\u306E\u8FD4\u308A\u91CF\u3067\u3059\u3002\u5404\u30C8\u30E9\u30C3\u30AF\u306E\u9001\u308A\u91CF\u304C0\u306A\u3089\u3001Mix\u3092\u4E0A\u3052\u3066\u3082\u4F55\u3082\u8FD4\u3063\u3066\u304D\u307E\u305B\u3093\u3002\u307E\u305A\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u306E\u9001\u308A\u91CF\u3092\u6C7A\u3081\u3066\u304B\u3089\u3001Mix\u3067\u5168\u4F53\u306E\u639B\u304B\u308A\u5177\u5408\u3092\u5FAE\u8ABF\u6574\u3057\u3066\u304F\u3060\u3055\u3044\u3002</p>
|
|
13644
13717
|
</div>
|
|
13645
13718
|
`;
|
|
13719
|
+
var TRACK_DELAYSEND_INFO_HTML = `
|
|
13720
|
+
<div class="dtm-modal-body-content">
|
|
13721
|
+
<h4>\u4F55\u3092\u3059\u308B\u8A2D\u5B9A\u304B</h4>
|
|
13722
|
+
<p>\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u306E\u97F3\u3092\u3001\u30DE\u30B9\u30BF\u30C7\u30A3\u30EC\u30A4\uFF08[delay]\u30D1\u30CD\u30EB\uFF09\u3078\u3069\u308C\u3060\u3051\u9001\u308B\u304B\u3092 0-100% \u3067\u6C7A\u3081\u307E\u3059\u30020\u306A\u3089\u9001\u3089\u306A\u3044\uFF1D\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u306B\u306F\u30C7\u30A3\u30EC\u30A4\u304C\u639B\u304B\u308A\u307E\u305B\u3093\u3002</p>
|
|
13723
|
+
<h4>\u300C\u4F4E\u57DF\u306B\u306F\u639B\u3051\u306A\u3044\u300D\u304C\u5B9A\u77F3</h4>
|
|
13724
|
+
<p>\u30C7\u30A3\u30EC\u30A4\uFF08\u3084\u307E\u3073\u3053\u306E\u3088\u3046\u306A\u7E70\u308A\u8FD4\u3057\uFF09\u3092\u4F4E\u57DF\u306B\u639B\u3051\u308B\u3068\u3001\u7E70\u308A\u8FD4\u3057\u304C\u91CD\u306A\u3063\u3066\u30EA\u30BA\u30E0\u304C\u6FC1\u308A\u3084\u3059\u3044\u305F\u3081\u3001\u30D9\u30FC\u30B9\u306A\u3069\u4F4E\u97F3\u30D1\u30FC\u30C8\u306F\u9001\u3089\u306A\u3044\uFF080\u306E\u307E\u307E\uFF09\u306E\u304C\u5B9A\u77F3\u3067\u3059\u3002\u30EA\u30FC\u30C9\u697D\u5668\u30FB\u30DC\u30FC\u30AB\u30EB\u306E\u8A9E\u5C3E\u306A\u3069\u3001\u805E\u304B\u305B\u305F\u3044\u30EF\u30F3\u30DD\u30A4\u30F3\u30C8\u3060\u3051\u306B\u9001\u308B\u306E\u304C\u52B9\u679C\u7684\u3067\u3059\u3002</p>
|
|
13725
|
+
<h4>[delay]\u30D1\u30CD\u30EB\u306EMix\u3068\u306E\u95A2\u4FC2</h4>
|
|
13726
|
+
<p>[delay]\u30D1\u30CD\u30EB\u306E\u639B\u304B\u308A\u5177\u5408\u304C0%\u3060\u3068\u3001\u3053\u3053\u3092\u3044\u304F\u3089\u4E0A\u3052\u3066\u3082\u7121\u97F3\u306E\u307E\u307E\u3067\u3059\u3002\u300C\u9001\u308A\u91CF\uFF08\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u304C\u3069\u308C\u3060\u3051\u63D0\u4F9B\u3059\u308B\u304B\uFF09\u300D\u3068\u300C\u30DE\u30B9\u30BF\u306E\u30C7\u30A3\u30EC\u30A4\u8A2D\u5B9A\uFF08\u5B9F\u969B\u306B\u3069\u3093\u306A\u7E70\u308A\u8FD4\u3057\u304C\u639B\u304B\u308B\u304B\uFF09\u300D\u306E\u4E8C\u6BB5\u69CB\u3048\u306B\u306A\u3063\u3066\u3044\u308B\u305F\u3081\u3067\u3059\u3002\u4E21\u65B9\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002</p>
|
|
13727
|
+
</div>
|
|
13728
|
+
`;
|
|
13729
|
+
var MASTER_COMP_INFO_HTML = `
|
|
13730
|
+
<div class="dtm-modal-body-content">
|
|
13731
|
+
<h4>\u4F55\u3092\u3059\u308B\u8A2D\u5B9A\u304B</h4>
|
|
13732
|
+
<p>\u5168\u30C8\u30E9\u30C3\u30AF\u304C\u5408\u6D41\u3057\u305F\u5F8C\uFF08\u30DE\u30B9\u30BF\u30EA\u30D0\u30FC\u30D6\u30FB\u30DE\u30B9\u30BF\u30C7\u30A3\u30EC\u30A4\u306E\u623B\u308A\u3082\u542B\u3080\uFF09\u306B\u307E\u3068\u3081\u3066\u8EFD\u304F\u639B\u3051\u308B\u3001\u30DE\u30B9\u30BF\u30D0\u30B9\u306E\u300C\u30B0\u30EB\u30FC\uFF08\u63A5\u7740\u5264\uFF09\u30B3\u30F3\u30D7\u30EC\u30C3\u30B5\u30FC\u300D\u3067\u3059\u30020%\u3067\u7121\u52B9\u3001\u4E0A\u3052\u308B\u307B\u3069\u5404\u30C8\u30E9\u30C3\u30AF\u306E\u97F3\u91CF\u5DEE\u304C\u5747\u3055\u308C\u3001\u30D0\u30E9\u30D0\u30E9\u306B\u9CF4\u3063\u3066\u3044\u305F\u30D1\u30FC\u30C8\u304C\u3072\u3068\u307E\u3068\u307E\u308A\u306E\u300C\u30D0\u30F3\u30C9\u611F\u300D\u300C\u4E00\u4F53\u611F\u300D\u3092\u6301\u3063\u3066\u805E\u3053\u3048\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3059\u3002</p>
|
|
13733
|
+
<h4>\u5E38\u6642ON\u306E\u300C\u5B89\u5168\u30EA\u30DF\u30C3\u30BF\u30FC\u300D\u3068\u306E\u9055\u3044</h4>
|
|
13734
|
+
<p>\u97F3\u5272\u308C\u691C\u77E5\u30D0\u30C3\u30B8\u3068\u9023\u52D5\u3059\u308B\u5B89\u5168\u30EA\u30DF\u30C3\u30BF\u30FC\u306F\u3001\u5E38\u306BON\u3067\u97F3\u5272\u308C\u3092\u9632\u3050\u305F\u3081\u306E\u4FDD\u967A\u3067\u3059\u3002\u3053\u3061\u3089\u306E\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u306F\u65E2\u5B9A0\uFF08\u30AA\u30D5\uFF09\u3067\u3001\u97F3\u3092\u826F\u304F\u3059\u308B\u305F\u3081\u306E\u8868\u73FE\u76EE\u7684\u306E\u51E6\u7406\u3067\u3059\u3002\u639B\u304B\u308B\u9806\u5E8F\u306F\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u2192\u5B89\u5168\u30EA\u30DF\u30C3\u30BF\u30FC\u3067\u3001\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u901A\u904E\u5F8C\u306E\u4FE1\u53F7\u3092\u5B89\u5168\u30EA\u30DF\u30C3\u30BF\u30FC\u30FB\u97F3\u5272\u308C\u691C\u77E5\u30E1\u30FC\u30BF\u30FC\u304C\u76E3\u8996\u3057\u307E\u3059\u3002</p>
|
|
13735
|
+
<h4>\u30C8\u30E9\u30C3\u30AF\u5358\u4F4D\u306E\u300C\u97F3\u5727\u5F37\u5316\u300D\u3068\u306E\u9055\u3044</h4>
|
|
13736
|
+
<p>\u5404\u30C8\u30E9\u30C3\u30AF\u306E\u300C\u97F3\u5727\u5F37\u5316\u300D\uFF08\u30C1\u30E3\u30F3\u30CD\u30EB\u30B9\u30C8\u30EA\u30C3\u30D7\u306E\u30B3\u30F3\u30D7\u30EC\u30C3\u30B5\u30FC\uFF09\u306F\u3001\u305D\u306E\u30C8\u30E9\u30C3\u30AF\u5358\u4F53\u306E\u7C92\u7ACB\u3061\u3092\u63C3\u3048\u308B\u305F\u3081\u306E\u3082\u306E\u3067\u3059\u3002\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u306F\u305D\u308C\u3068\u306F\u5225\u306B\u3001\u5168\u30C8\u30E9\u30C3\u30AF\u304C\u6DF7\u3056\u3063\u305F\u5F8C\u306E\u300C\u5408\u594F\u300D\u5168\u4F53\u306B\u5BFE\u3057\u3066\u639B\u304B\u308A\u307E\u3059\u3002\u4E21\u65B9\u3092\u5F37\u304F\u639B\u3051\u3059\u304E\u308B\u3068\u30C0\u30A4\u30CA\u30DF\u30AF\u30B9\uFF08\u5F37\u5F31\u306E\u8868\u60C5\uFF09\u304C\u5931\u308F\u308C\u3066\u5358\u8ABF\u306B\u306A\u308A\u3084\u3059\u3044\u305F\u3081\u3001\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u306F\u63A7\u3048\u3081\uFF0820\u301C40%\u7A0B\u5EA6\uFF09\u304C\u51FA\u767A\u70B9\u306E\u76EE\u5B89\u3067\u3059\u3002</p>
|
|
13737
|
+
</div>
|
|
13738
|
+
`;
|
|
13646
13739
|
var AUTO_MASTER_INFO_HTML = `
|
|
13647
13740
|
<div class="dtm-modal-body-content">
|
|
13648
13741
|
<h4>\u304A\u307E\u304B\u305B\u30DE\u30B9\u30BF\u30EA\u30F3\u30B0\u3068\u306F</h4>
|
|
13649
13742
|
<p>\u5E02\u8CA9\u66F2\u3067\u3088\u304F\u4F7F\u308F\u308C\u308B\u5024\u3092\u76EE\u5B89\u306B\u3001\u4EE5\u4E0B\u3092\u307E\u3068\u3081\u3066\u8A2D\u5B9A\u3059\u308B\u30DC\u30BF\u30F3\u3067\u3059\u3002\u66F2\u306EBPM\u3092\u898B\u3066\u4E00\u90E8\u306E\u5024\u3092\u81EA\u52D5\u8ABF\u6574\u3057\u307E\u3059\u3002</p>
|
|
13743
|
+
<h4>\u30B2\u30A4\u30F3\u30B9\u30C6\u30FC\u30B8\u30F3\u30B0\uFF08\u5B9F\u6E2C\u30D9\u30FC\u30B9\u306E\u97F3\u91CF\u8ABF\u6574\uFF09</h4>
|
|
13744
|
+
<p>\u518D\u751F\u3057\u3066\u3044\u308B\u9593\u3001\u88CF\u3067\u30DE\u30B9\u30BF\u306E\u30D4\u30FC\u30AF\u30EC\u30D9\u30EB\uFF08\u97F3\u5272\u308C\u691C\u77E5\u30D0\u30C3\u30B8\u3068\u540C\u3058\u5B9F\u6E2C\u5024\uFF09\u3092\u7D99\u7D9A\u7684\u306B\u53CE\u96C6\u3057\u3066\u3044\u307E\u3059\u3002\u5408\u8A082\u79D2\u4EE5\u4E0A\u306E\u518D\u751F\u5B9F\u7E3E\u304C\u6E9C\u307E\u3063\u3066\u3044\u308C\u3070\u3001\u300C\u304A\u307E\u304B\u305B\u300D\u5B9F\u884C\u6642\u306B\u305D\u306E\u5B9F\u6E2C\u30D4\u30FC\u30AF\u3092\u76EE\u6A19\u30D8\u30C3\u30C9\u30EB\u30FC\u30E0\uFF08-6dBFS\u4ED8\u8FD1\uFF09\u306B\u53CE\u307E\u308B\u3088\u3046\u9006\u7B97\u3057\u3066\u3001\u30DE\u30B9\u30BF\u97F3\u91CF\u3092\u81EA\u52D5\u8ABF\u6574\u3057\u307E\u3059\u3002</p>
|
|
13745
|
+
<p style="margin-top:4px;"><small>\u30CE\u30FC\u30C8\u306E\u30D9\u30ED\u30B7\u30C6\u30A3\u306A\u3069\u9759\u7684\u306A\u60C5\u5831\u3060\u3051\u3067\u306F\u3001\u8907\u6570\u30C8\u30E9\u30C3\u30AF\u304C\u91CD\u306A\u3063\u3066\u5B9F\u969B\u306B\u3069\u308C\u3060\u3051\u97F3\u5727\u304C\u7A4D\u307F\u4E0A\u304C\u308B\u304B\uFF08\u30C8\u30E9\u30C3\u30AF\u5358\u4F4D\u306E\u5727\u7E2E\u30FBEQ\u5F8C\u306E\u5024\u3082\u542B\u3080\uFF09\u306F\u5206\u304B\u308A\u307E\u305B\u3093\u3002\u5B9F\u969B\u306B\u9CF4\u3089\u3057\u305F\u97F3\u3092\u6E2C\u308B\u306E\u304C\u6700\u3082\u78BA\u5B9F\u306A\u305F\u3081\u3001\u3053\u306E\u30DC\u30BF\u30F3\u3092\u62BC\u3059\u305F\u3073\u306B\u4F7F\u3046\u306E\u3067\u306F\u306A\u304F\u3001\u3042\u308B\u7A0B\u5EA6\u7DE8\u96C6\u3057\u3066\u4E00\u5EA6\u3067\u3082\u518D\u751F\u3057\u305F\u5F8C\u306B\u62BC\u3059\u3068\u52B9\u679C\u3092\u767A\u63EE\u3057\u307E\u3059\u3002\u4E00\u5EA6\u3082\u518D\u751F\u3057\u3066\u3044\u306A\u3044\u30FB\u518D\u751F\u6642\u9593\u304C\u77ED\u3059\u304E\u308B\u5834\u5408\u306F\u5224\u65AD\u6750\u6599\u304C\u7121\u3044\u305F\u3081\u3001\u3053\u306E\u9805\u76EE\u306F\u30B9\u30AD\u30C3\u30D7\u3055\u308C\u4ED6\u306E\u5024\u3060\u3051\u304C\u9069\u7528\u3055\u308C\u307E\u3059\u3002</small></p>
|
|
13650
13746
|
<ul>
|
|
13651
|
-
<li>\u30DE\u30B9\u30BF\
|
|
13747
|
+
<li>\u30DE\u30B9\u30BF\u30D0\u30B9 \u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u30EC\u30C3\u30B5\u30FC: 25%\uFF08\u5404\u30C8\u30E9\u30C3\u30AF\u306E\u982D\u3092\u8EFD\u304F\u5747\u3057\u3066\u4E00\u4F53\u611F\u3092\u51FA\u3059\u3001\u63A7\u3048\u3081\u306A\u91CF\uFF09</li>
|
|
13748
|
+
<li>\u30DE\u30B9\u30BF\u30EA\u30D0\u30FC\u30D6 Mix: <strong>\u30A2\u30EC\u30F3\u30B8\u306E\u5BC6\u5EA6\uFF08\u97F3\u306E\u5165\u3063\u3066\u3044\u308B\u30C8\u30E9\u30C3\u30AF\u6570\uFF09\u306B\u5FDC\u3058\u3066\u81EA\u52D5\u8A08\u7B97</strong>\uFF082\u30C8\u30E9\u30C3\u30AF\u4EE5\u4E0B\u306728%\u30018\u30C8\u30E9\u30C3\u30AF\u4EE5\u4E0A\u306712%\u3001\u305D\u306E\u9593\u306F\u7DDA\u5F62\u88DC\u9593\uFF09</li>
|
|
13652
13749
|
<li>\u30DE\u30B9\u30BF\u30EA\u30D0\u30FC\u30D6 Decay: <strong>\u73FE\u5728\u306EBPM\u306B\u5FDC\u3058\u3066\u81EA\u52D5\u8A08\u7B97</strong>\uFF08\u901F\u3044\u66F2\u307B\u3069\u77ED\u304F0.9\u79D2\u5BC4\u308A\u3001\u9045\u3044\u66F2\u307B\u3069\u9577\u304F3.0\u79D2\u5BC4\u308A\uFF09</li>
|
|
13653
13750
|
<li>\u30DE\u30B9\u30BF\u30EA\u30D0\u30FC\u30D6 Pre Delay: 20ms\uFF08\u539F\u97F3\u306E\u8F2A\u90ED\u3092\u4FDD\u3063\u305F\u307E\u307E\u5965\u884C\u304D\u3092\u8DB3\u3059\u5B9A\u756A\u5024\uFF09</li>
|
|
13654
|
-
<li>\
|
|
13655
|
-
<li>\u5168\u30C8\u30E9\u30C3\u30AF\u306E\u30B9\u30C6\u30EC\u30AA\u5E45: 115%\uFF08\u308F\u305A\u304B\u306B\u5E83\u3052\u308B\uFF09</li>
|
|
13656
|
-
<li>\u6B4C\u8A5E\u306E\u3042\u308B\u30C8\u30E9\u30C3\u30AF: \u81EA\u52D5\u30D3\u30D6\u30E9\u30FC\u30C8ON</li>
|
|
13751
|
+
<li>\u30D5\u30A7\u30FC\u30C9\u30A2\u30A6\u30C8: \u672A\u8A2D\u5B9A\uFF080\u79D2\uFF09\u306E\u3068\u304D\u3060\u30511.5\u79D2\u3092\u88DC\u3046\uFF08\u66F2\u306E\u7D42\u308F\u308A\u3092\u3076\u3064\u5207\u308A\u306B\u3057\u306A\u3044\uFF09\u3002\u65E2\u306B0\u79D2\u4EE5\u5916\u306E\u5024\u304C\u8A2D\u5B9A\u6E08\u307F\u306A\u3089\u4E0A\u66F8\u304D\u3057\u306A\u3044</li>
|
|
13657
13752
|
</ul>
|
|
13658
|
-
<
|
|
13659
|
-
<
|
|
13753
|
+
<p style="margin-top:4px;"><small>\u30DE\u30B9\u30BF\u30EA\u30D0\u30FC\u30D6Mix\u3092\u5BC6\u5EA6\u3067\u6C7A\u3081\u308B\u306E\u306F\u3001\u300C\u97F3\u6570\u306E\u591A\u3044\u539A\u3044\u30A2\u30EC\u30F3\u30B8\u306B\u6B8B\u97FF\u3092\u91CD\u306D\u3059\u304E\u308B\u3068\u6FC1\u308B\u3001\u97F3\u6570\u306E\u5C11\u306A\u3044\u9699\u9593\u306E\u591A\u3044\u7DE8\u6210\u306B\u306F\u6B8B\u97FF\u3067\u7A7A\u9593\u3092\u57CB\u3081\u308B\u3068\u5FC3\u5730\u3088\u3044\u300D\u3068\u3044\u3046\u30DF\u30AD\u30B7\u30F3\u30B0\u306E\u5B9A\u77F3\u306B\u57FA\u3065\u304D\u307E\u3059\u3002</small></p>
|
|
13754
|
+
<h4>\u697D\u5668\u30FB\u97F3\u91CF\u30FB\u5F79\u5272\u3054\u3068\u306E\u30DF\u30C3\u30AF\u30B9\u306E\u81EA\u52D5\u5272\u308A\u5F53\u3066</h4>
|
|
13755
|
+
<p>\u6B4C\u8A5E\u306E\u306A\u3044\u30C8\u30E9\u30C3\u30AF\u306F\u3001\u7F6E\u304B\u308C\u3066\u3044\u308B\u30CE\u30FC\u30C8\u306E\u97F3\u9AD8\u30FB\u30BF\u30A4\u30DF\u30F3\u30B0\u30FB\u548C\u97F3\u306E\u539A\u307F\u304B\u3089\u5F79\u5272\uFF08\u30E1\u30ED\u30C7\u30A3/\u30B5\u30D6\u30E1\u30ED/\u30D9\u30FC\u30B9/\u4F34\u594F\uFF09\u3092\u63A8\u5B9A\u3057\u3001\u697D\u5668\u30FB\u97F3\u91CF\u306B\u52A0\u3048\u3066\u97F3\u5727\u5F37\u5316\u30FB\u30B9\u30C6\u30EC\u30AA\u5E45\u30FB\u5B9A\u4F4D\u30FB\u30EA\u30D0\u30FC\u30D6\u9001\u308A\u30FB\u30C7\u30A3\u30EC\u30A4\u9001\u308A\u30FBEQ\u3092\u307E\u3068\u3081\u3066\u5F79\u5272\u76F8\u5FDC\u306E\u5024\u3078\u8A2D\u5B9A\u3057\u307E\u3059\u3002</p>
|
|
13660
13756
|
<ul>
|
|
13661
|
-
<li><strong>\u4F4E\u97F3\u57DF\uFF08C3\u672A\u6E80\uFF09\u304C\u4E2D\u5FC3</strong> \u2192 \u30D9\u30FC\u30B9\
|
|
13662
|
-
<li><strong>\u548C\u97F3\uFF08\u540C\u6642\u767A\u97F3\uFF09\u304C\u591A\u304F\u97F3\u4FA1\u3082\u9577\u3044</strong> \u2192 \u4F34\u594F\uFF08\u30B3\u30FC\u30C9/\u30D1\u30C3\u30C9\uFF09\
|
|
13663
|
-
<li><strong>\u5358\u97F3\u3067\u97F3\u6570\u304C\u5C11\u306A\u304F\u97F3\u4FA1\u304C\u9577\u3044</strong> \u2192 \u30B5\u30D6\u30E1\u30ED\uFF08\u30AA\u30D6\u30EA\u30AC\u30FC\u30C8\u5BC4\u308A\uFF09\
|
|
13664
|
-
<li><strong>\u305D\u308C\u4EE5\u5916\uFF08\u5358\u97F3\u3067\u52D5\u304D\u304C\u591A\u3044\uFF09</strong> \u2192 \u30E1\u30ED\u30C7\u30A3\
|
|
13757
|
+
<li><strong>\u4F4E\u97F3\u57DF\uFF08C3\u672A\u6E80\uFF09\u304C\u4E2D\u5FC3</strong> \u2192 \u30D9\u30FC\u30B9\u3002\u57FA\u6E96\u97F3\u91CF85\uFF08\u4F4E\u3044\u307B\u3069\u5E95\u4E0A\u3052\u3001\u6700\u5927+12\uFF09\u3001\u97F3\u5727\u5F37\u531640%\uFF08\u7C92\u7ACB\u3061\u3092\u63C3\u3048\u308B\uFF09\u3001\u30B9\u30C6\u30EC\u30AA\u5E45100%\uFF08\u5E83\u3052\u306A\u3044\uFF09\u3001\u5B9A\u4F4D\u306F\u4E2D\u592E\u56FA\u5B9A\u3001\u30EA\u30D0\u30FC\u30D6\u9001\u308A5%\uFF08\u6FC1\u308A\u9632\u6B62\uFF09\u3001\u30C7\u30A3\u30EC\u30A4\u9001\u308A0%\uFF08\u4F4E\u57DF\u306B\u306F\u639B\u3051\u306A\u3044\uFF09\u3001EQ\u4F4E\u57DF+2dB\uFF0F\u9AD8\u57DF-3dB\u3002</li>
|
|
13758
|
+
<li><strong>\u548C\u97F3\uFF08\u540C\u6642\u767A\u97F3\uFF09\u304C\u591A\u304F\u97F3\u4FA1\u3082\u9577\u3044</strong> \u2192 \u4F34\u594F\uFF08\u30B3\u30FC\u30C9/\u30D1\u30C3\u30C9\uFF09\u3002\u57FA\u6E96\u97F3\u91CF72\uFF08\u91CD\u306A\u308A\u306E\u539A\u307F\u3076\u3093\u3055\u3089\u306B\u4E0B\u3052\u308B\uFF09\u3001\u97F3\u5727\u5F37\u531625%\uFF08\u81EA\u7136\u306A\u5F37\u5F31\u3092\u6B8B\u3059\uFF09\u3001\u30B9\u30C6\u30EC\u30AA\u5E45118%\uFF08\u7A7A\u9593\u3092\u57CB\u3081\u308B\uFF09\u3001\u5B9A\u4F4D\u306F\u5DE6\u53F3\u3078\u5E83\u3081\u306B\u632F\u308A\u5206\u3051\u3001\u30EA\u30D0\u30FC\u30D6\u9001\u308A22%\u3001\u30C7\u30A3\u30EC\u30A4\u9001\u308A0%\u3001EQ\u4F4E\u57DF-4dB\uFF08\u30D9\u30FC\u30B9\u306E\u5E2F\u57DF\u3092\u7A7A\u3051\u308B\uFF09\u3002</li>
|
|
13759
|
+
<li><strong>\u5358\u97F3\u3067\u97F3\u6570\u304C\u5C11\u306A\u304F\u97F3\u4FA1\u304C\u9577\u3044</strong> \u2192 \u30B5\u30D6\u30E1\u30ED\uFF08\u30AA\u30D6\u30EA\u30AC\u30FC\u30C8\u5BC4\u308A\uFF09\u3002\u57FA\u6E96\u97F3\u91CF92\u3001\u97F3\u5727\u5F37\u531632%\u3001\u5B9A\u4F4D\u306F\u5DE6\u53F3\u3078\u3084\u3084\u632F\u308A\u5206\u3051\u3001\u30EA\u30D0\u30FC\u30D6\u9001\u308A15%\uFF08\u30E1\u30ED\u30C7\u30A3\u306E\u4E00\u6B69\u5F8C\u308D\u3078\uFF09\u3001\u30C7\u30A3\u30EC\u30A4\u9001\u308A8%\u3001EQ\u4F4E\u57DF-3dB\uFF0F\u9AD8\u57DF+1dB\u3002</li>
|
|
13760
|
+
<li><strong>\u305D\u308C\u4EE5\u5916\uFF08\u5358\u97F3\u3067\u52D5\u304D\u304C\u591A\u3044\uFF09</strong> \u2192 \u30E1\u30ED\u30C7\u30A3\u3002\u57FA\u6E96\u97F3\u91CF100\u3001\u97F3\u5727\u5F37\u531635%\u3001\u5B9A\u4F4D\u306F\u4E2D\u592E\u56FA\u5B9A\u3001\u30EA\u30D0\u30FC\u30D6\u9001\u308A12%\uFF08\u524D\u306B\u51FA\u3059\uFF09\u3001\u30C7\u30A3\u30EC\u30A4\u9001\u308A15%\uFF08\u805E\u304B\u305B\u3069\u3053\u308D\u306B\u8584\u304F\uFF09\u3001EQ\u4F4E\u57DF-2dB\uFF0F\u9AD8\u57DF+2dB\uFF08\u629C\u3051\u30FB\u30D7\u30EC\u30BC\u30F3\u30B9\uFF09\u3002</li>
|
|
13665
13761
|
</ul>
|
|
13666
|
-
<p style="margin-top:4px;"><small>\u697D\u5668\u540D\u306F\u73FE\u5728\u9078\u629E\u4E2D\u306E\u697D\u5668\u30D7\u30EA\u30BB\u30C3\u30C8\uFF08\u672A\u9078\u629E\u306A\u3089\u30B0\u30E9\u30F3\u30C9\u30D4\u30A2\u30CE\uFF09\u304B\u3089\u5F79\u5272\u306B\u5BFE\u5FDC\u3059\u308B\u3082\u306E\u3092\u5F15\u304D\u307E\u3059\u3002\u97F3\u306E\
|
|
13762
|
+
<p style="margin-top:4px;"><small>\u3044\u305A\u308C\u3082\u4E00\u822C\u7684\u306A\u30DF\u30AD\u30B7\u30F3\u30B0\u306E\u7D4C\u9A13\u5247\u3067\u3059\u3002\u4F4E\u57DF\u306F\u30E2\u30CE\u30E9\u30EB\u306B\u5BC4\u305B\u308B\uFF08\u30D9\u30FC\u30B9\u306E\u30B9\u30C6\u30EC\u30AA\u5E45\u30FB\u5B9A\u4F4D\u3092\u4E2D\u592E\u56FA\u5B9A\u306B\u3059\u308B\uFF09\u3053\u3068\u3067\u4F4D\u76F8\u5E72\u6E09\u306B\u3088\u308B\u30E2\u30CE\u30E9\u30EB\u518D\u751F\u6642\u306E\u75E9\u305B\u3092\u9632\u304E\u3001\u4ED6\u30D1\u30FC\u30C8\u306FEQ\u3067\u4F4E\u57DF\u3092\u8EFD\u304F\u524A\u3063\u3066\u5468\u6CE2\u6570\u5E2F\u57DF\u3092\u30D9\u30FC\u30B9\u3068\u4F4F\u307F\u5206\u3051\u307E\u3059\uFF08frequency slotting\uFF09\u3002\u66F2\u306E\u8EF8\u306B\u306A\u308B\u30E1\u30ED\u30C7\u30A3\u30FB\u30D9\u30FC\u30B9\u306F\u4E2D\u592E\u3001\u5F69\u308A\u306E\u30B5\u30D6\u30E1\u30ED\u30FB\u4F34\u594F\u306F\u5DE6\u53F3\u3078\u6563\u3089\u3057\u3066\u5404\u30D1\u30FC\u30C8\u306E\u5C45\u5834\u6240\u3092\u5206\u3051\u307E\u3059\uFF08\u540C\u3058\u5F79\u5272\u306E\u30C8\u30E9\u30C3\u30AF\u304C\u8907\u6570\u3042\u308B\u3068\u304D\u306F\u5DE6\u53F3\u3092\u4EA4\u4E92\u306B\u632F\u308A\u5206\u3051\u307E\u3059\uFF09\u3002\u30C7\u30A3\u30EC\u30A4\u306F\u4F4E\u57DF\u306B\u639B\u3051\u308B\u3068\u7E70\u308A\u8FD4\u3057\u304C\u91CD\u306A\u308A\u30EA\u30BA\u30E0\u304C\u6FC1\u308B\u305F\u3081\u3001\u30D9\u30FC\u30B9\u30FB\u4F34\u594F\u306B\u306F\u9001\u308A\u307E\u305B\u3093\uFF08[delay]\u30D1\u30CD\u30EB\u306E\u639B\u304B\u308A\u5177\u5408\u304C\u65E2\u5B9A0%\uFF1D\u30AA\u30D5\u306A\u306E\u3067\u3001\u6709\u52B9\u5316\u3059\u308B\u307E\u3067\u306F\u7121\u97F3\uFF09\u3002\u697D\u5668\u540D\u306F\u73FE\u5728\u9078\u629E\u4E2D\u306E\u697D\u5668\u30D7\u30EA\u30BB\u30C3\u30C8\uFF08\u672A\u9078\u629E\u306A\u3089\u30B0\u30E9\u30F3\u30C9\u30D4\u30A2\u30CE\uFF09\u304B\u3089\u5F79\u5272\u306B\u5BFE\u5FDC\u3059\u308B\u3082\u306E\u3092\u5F15\u304D\u307E\u3059\u3002\u97F3\u306E\u7121\u3044\u30C8\u30E9\u30C3\u30AF\u306F\u5224\u5B9A\u3067\u304D\u306A\u3044\u305F\u3081\u5BFE\u8C61\u5916\u3067\u3059\u3002\u3042\u304F\u307E\u3067\u81EA\u52D5\u63A8\u5B9A\u306A\u306E\u3067\u3001\u610F\u56F3\u3068\u9055\u3046\u5834\u5408\u306F\u5404\u30C8\u30E9\u30C3\u30AF\u306E\u8A2D\u5B9A\u6B04\u304B\u3089\u500B\u5225\u306B\u9078\u3073\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002</small></p>
|
|
13667
13763
|
<h4>\u30E1\u30A4\u30F3\u30DC\u30FC\u30AB\u30EB\u306E\u81EA\u52D5\u5224\u5B9A</h4>
|
|
13668
13764
|
<p>\u6B4C\u8A5E\u306E\u3042\u308B\u30C8\u30E9\u30C3\u30AF\u304C\u8907\u6570\u3042\u308B\u5834\u5408\uFF08\u30CF\u30E2\u30EA\u30FB\u30B3\u30FC\u30E9\u30B9\u30FB\u639B\u3051\u58F0\u7B49\uFF09\u3001\u767A\u97F3\u6642\u9593\u304C\u6700\u3082\u9577\u3044\u30C8\u30E9\u30C3\u30AF\u3092\u300C\u30E1\u30A4\u30F3\u30DC\u30FC\u30AB\u30EB\u300D\u3068\u307F\u306A\u3057\u3001\u4ED6\u3068\u306F\u9055\u3046\u6271\u3044\u306B\u3057\u307E\u3059\u3002</p>
|
|
13669
13765
|
<ul>
|
|
13670
|
-
<li>\u30E1\u30A4\u30F3\u30DC\u30FC\u30AB\u30EB: \u97F3\u5727\u5F37\u531630%\u30FB\u30EA\
|
|
13671
|
-
<li>\u305D\u308C\u4EE5\u5916\u306E\u30DC\u30FC\u30AB\u30EB: \u97F3\u5727\u5F37\u531625%\u30FB\u30EA\u30D0\u30FC\u30D6\u9001\
|
|
13766
|
+
<li>\u30E1\u30A4\u30F3\u30DC\u30FC\u30AB\u30EB: \u81EA\u52D5\u30D3\u30D6\u30E9\u30FC\u30C8ON\u30FB\u58F0\u91CF\u3092\u65E2\u5B9A\u306E1.1\u500D\uFF08\u524D\u306B\u51FA\u3059\uFF09\u30FB\u97F3\u5727\u5F37\u531630%\u30FB\u30B9\u30C6\u30EC\u30AA\u5E45100%\uFF08\u72ED\u3081\u30FB\u4E2D\u592E\u5BC4\u308A\u3067\u30AF\u30EA\u30A2\u306B\uFF09\u30FBEQ\u4F4E\u57DF-3dB\uFF08\u30E9\u30F3\u30D6\u30EB/\u3053\u3082\u308A\u9664\u53BB\uFF09\u30FBEQ\u9AD8\u57DF+2dB\uFF08\u629C\u3051\u30FB\u30D7\u30EC\u30BC\u30F3\u30B9\uFF09\u30FB\u30C7\u30A3\u30EC\u30A4\u9001\u308A15%\uFF08\u8A9E\u5C3E\u306B\u8EFD\u3044\u30B9\u30E9\u30C3\u30D7\uFF09\u30FB\u30EA\u30D0\u30FC\u30D6\u9001\u308A25%\u30FB\u5B9A\u4F4D\u306F\u4E2D\u592E\u56FA\u5B9A</li>
|
|
13767
|
+
<li>\u305D\u308C\u4EE5\u5916\u306E\u30DC\u30FC\u30AB\u30EB\uFF08\u30CF\u30E2\u30EA\u30FB\u30B3\u30FC\u30E9\u30B9\u7B49\uFF09: \u81EA\u52D5\u30D3\u30D6\u30E9\u30FC\u30C8OFF\u30FB\u58F0\u91CF\u3092\u65E2\u5B9A\u306E0.85\u500D\u3092\u57FA\u6E96\u306B\u3001\u526F\u30DC\u30FC\u30AB\u30EB\u306E\u672C\u6570\u304C\u591A\u3044\u307B\u3069\u3055\u3089\u306B\u7D5E\u308B\uFF08\u91CD\u306A\u3063\u3066\u97F3\u5727\u304C\u7A4D\u307F\u4E0A\u304C\u308B\u5206\u3092\u7B49\u30D1\u30EF\u30FC\u5247\u3067\u76F8\u6BBA\uFF09\u30FB\u97F3\u5727\u5F37\u531625%\u30FB\u30B9\u30C6\u30EC\u30AA\u5E45120%\uFF08\u5E83\u3052\u3066\u300C\u58C1\u300D\u306E\u3088\u3046\u306A\u539A\u307F\u3092\u51FA\u3059\uFF09\u30FBEQ\u4F4E\u57DF-3dB\u30FBEQ\u9AD8\u57DF\u306F\u7121\u5909\u5316\uFF08\u660E\u308B\u304F\u3057\u3059\u304E\u308B\u3068\u524D\u306B\u51FA\u3066\u3057\u307E\u3046\u305F\u3081\uFF09\u30FB\u30C7\u30A3\u30EC\u30A4\u9001\u308A0%\uFF08\u639B\u3051\u308B\u3068\u8F2A\u90ED\u304C\u307C\u3084\u3051\u3066\u56E3\u5B50\u306B\u306A\u308B\u305F\u3081\uFF09\u30FB\u30EA\u30D0\u30FC\u30D6\u9001\u308A45%\uFF08\u5965\u3078\u99B4\u67D3\u307E\u305B\u308B\uFF09\u30FB\u5B9A\u4F4D\u306F\u5DE6\u53F3\u3078\u4EA4\u4E92\u306B\u632F\u3063\u3066\u30C0\u30D6\u30EA\u30F3\u30B0\u611F\u3092\u51FA\u3059</li>
|
|
13672
13768
|
</ul>
|
|
13673
|
-
<p style="margin-top:4px;"><small>\u300C\u524D\u306B\u51FA\u3057\u305F\u3044\u97F3\u306F\u30EA\u30D0\u30FC\u30D6\u5C11\u306A\u3081\u3001\u5965\u306B\u7F6E\u304D\u305F\u3044\u97F3\u306F\u30EA\u30D0\u30FC\u30D6\u591A\u3081\u300D\u3068\u3044\u3046\u5B9A\u77F3\u306B\u57FA\u3065\u3044\u3066\u3044\u307E\u3059\u3002EQ\u306F\
|
|
13769
|
+
<p style="margin-top:4px;"><small>\u300C\u524D\u306B\u51FA\u3057\u305F\u3044\u97F3\u306F\u58F0\u91CF\u5927\u304D\u3081\u30FB\u72ED\u3081\u30FB\u30EA\u30D0\u30FC\u30D6\u5C11\u306A\u3081\u3001\u5965\u306B\u7F6E\u304D\u305F\u3044\u97F3\u306F\u58F0\u91CF\u63A7\u3048\u3081\u30FB\u5E83\u3081\u30FB\u30EA\u30D0\u30FC\u30D6\u591A\u3081\u300D\u3068\u3044\u3046\u5B9A\u77F3\u306B\u57FA\u3065\u3044\u3066\u3044\u307E\u3059\u3002EQ\u306E\u4F4E\u57DF\u30AB\u30C3\u30C8\u306F\u30DC\u30FC\u30AB\u30EB\u3067\u307B\u307C\u666E\u904D\u7684\u306A\u5B9A\u77F3\uFF08\u5B9F\u8CEA\u7684\u306A\u30CF\u30A4\u30D1\u30B9\u30D5\u30A3\u30EB\u30BF\u306E\u4EE3\u7528\uFF09\u3067\u3059\u3002\u30D3\u30D6\u30E9\u30FC\u30C8\u3092\u30CF\u30E2\u30EA\u30FB\u30B3\u30FC\u30E9\u30B9\u3078\u639B\u3051\u306A\u3044\u306E\u306F\u3001\u8907\u6570\u306E\u58F0\u304C\u540C\u6642\u306B\u63FA\u308C\u308B\u3068\u58F0\u3054\u3068\u306E\u4F4D\u76F8\u30FB\u901F\u3055\u306E\u30BA\u30EC\u3067\u548C\u97F3\u304C\u300C\u3046\u306D\u308B\u300D\u300C\u6FC1\u308B\u300D\u305F\u3081\u3067\u3001\u5408\u5531\u3084\u30B9\u30C8\u30EA\u30F3\u30B0\u30B9\u306E\u30BB\u30AF\u30B7\u30E7\u30F3\u594F\u6CD5\u3068\u540C\u3058\u304F\u3001\u30CF\u30E2\u30EA/\u30B3\u30FC\u30E9\u30B9\u306F\u30B9\u30C8\u30EC\u30FC\u30C8\u30C8\u30FC\u30F3\u306B\u3057\u3066\u97F3\u7A0B\u306E\u8EF8\u3092\u5B89\u5B9A\u3055\u305B\u308B\u65B9\u304C\u99B4\u67D3\u307F\u307E\u3059\u3002\u30AA\u30AF\u30BF\u30FC\u30D6\u30E6\u30CB\u30BE\u30F3\uFF081\u30AA\u30AF\u30BF\u30FC\u30D6\u4E0A/\u4E0B\u3092\u91CD\u306D\u3066\u539A\u307F\u3092\u51FA\u3059\u52A0\u5DE5\uFF09\u306F\u3053\u3053\u3067\u306F\u81EA\u52D5\u9069\u7528\u3057\u307E\u305B\u3093 \u2014 \u58F0\u8CEA\u3092\u5927\u304D\u304F\u5909\u3048\u308B\u6F14\u51FA\u76EE\u7684\u306E\u52A0\u5DE5\u3067\u3042\u308A\u3001\u66F2\u306B\u3088\u3063\u3066\u5408\u3046/\u5408\u308F\u306A\u3044\u304C\u5206\u304B\u308C\u308B\u5275\u4F5C\u4E0A\u306E\u9078\u629E\uFF08\u30D0\u30E9\u30FC\u30C9\u3067\u306F\u4E0D\u81EA\u7136\u306B\u306A\u308A\u3084\u3059\u3044\u7B49\uFF09\u3067\u3001\u30DF\u30C3\u30AF\u30B9\u306E\u662F\u6B63\u3068\u306F\u6027\u8CEA\u304C\u9055\u3046\u305F\u3081\u3067\u3059\u3002\u4F7F\u3044\u305F\u3044\u5834\u5408\u306F\u5404\u30DC\u30FC\u30AB\u30EB\u30C8\u30E9\u30C3\u30AF\u306E\u8A2D\u5B9A\u6B04\u304B\u3089\u500B\u5225\u306B\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002\u300C\u3044\u3044\u611F\u3058\u306E\u521D\u671F\u5024\u300D\u3092\u4E00\u62EC\u3067\u5F53\u3066\u308B\u3060\u3051\u3067\u3001\u66F2\u3084\u597D\u307F\u306B\u5FDC\u3058\u305F\u5FAE\u8ABF\u6574\u307E\u3067\u306F\u884C\u3044\u307E\u305B\u3093\u3002\u65E2\u5B58\u306E\u8A2D\u5B9A\u306F\u4E0A\u66F8\u304D\u3055\u308C\u308B\u306E\u3067\u3001\u6C17\u306B\u5165\u3089\u306A\u3051\u308C\u3070\u5404\u30B9\u30E9\u30A4\u30C0\u30FC\u304B\u3089\u500B\u5225\u306B\u623B\u3057\u3066\u304F\u3060\u3055\u3044\u3002</small></p>
|
|
13674
13770
|
</div>
|
|
13675
13771
|
`;
|
|
13676
13772
|
var MIDI_INFO_HTML = `
|
|
@@ -13915,30 +14011,79 @@ var normalizeInstrumentName = (name) => {
|
|
|
13915
14011
|
) ?? name;
|
|
13916
14012
|
};
|
|
13917
14013
|
var AUTO_ROLE_STEPS_PER_BEAT = 48;
|
|
13918
|
-
var
|
|
14014
|
+
var AUTO_ROLE_BASE_VOLUME = {
|
|
13919
14015
|
melody: 100,
|
|
13920
14016
|
submelody: 92,
|
|
13921
14017
|
bass: 85,
|
|
13922
14018
|
chord: 72
|
|
13923
14019
|
};
|
|
13924
|
-
var
|
|
14020
|
+
var computeAutoRoleStats = (notes) => {
|
|
13925
14021
|
const avgPitch = notes.reduce((s, n) => s + n.pitch, 0) / notes.length;
|
|
13926
|
-
if (avgPitch < 48) return "bass";
|
|
13927
14022
|
const avgDur = notes.reduce((s, n) => s + n.durationSteps, 0) / notes.length;
|
|
13928
14023
|
const byStart = /* @__PURE__ */ new Map();
|
|
13929
14024
|
for (const n of notes)
|
|
13930
14025
|
byStart.set(n.startStep, (byStart.get(n.startStep) ?? 0) + 1);
|
|
13931
14026
|
let maxPoly = 0;
|
|
13932
14027
|
for (const c of byStart.values()) if (c > maxPoly) maxPoly = c;
|
|
13933
|
-
|
|
14028
|
+
const avgPoly = notes.length / byStart.size;
|
|
13934
14029
|
const minStart = Math.min(...notes.map((n) => n.startStep));
|
|
13935
14030
|
const maxEnd = Math.max(...notes.map((n) => n.startStep + n.durationSteps));
|
|
13936
14031
|
const spanBeats = Math.max(1, (maxEnd - minStart) / AUTO_ROLE_STEPS_PER_BEAT);
|
|
13937
14032
|
const notesPerBeat = notes.length / spanBeats;
|
|
13938
|
-
|
|
14033
|
+
return { avgPitch, avgDur, avgPoly, maxPoly, notesPerBeat };
|
|
14034
|
+
};
|
|
14035
|
+
var classifyTrackRole = (stats) => {
|
|
14036
|
+
if (stats.avgPitch < 48) return "bass";
|
|
14037
|
+
if (stats.maxPoly >= 2 && stats.avgDur >= AUTO_ROLE_STEPS_PER_BEAT)
|
|
14038
|
+
return "chord";
|
|
14039
|
+
if (stats.notesPerBeat < 1.2 && stats.avgDur >= AUTO_ROLE_STEPS_PER_BEAT * 1.5)
|
|
13939
14040
|
return "submelody";
|
|
13940
14041
|
return "melody";
|
|
13941
14042
|
};
|
|
14043
|
+
var computeAutoRoleVolume = (role, stats) => {
|
|
14044
|
+
let vol = AUTO_ROLE_BASE_VOLUME[role];
|
|
14045
|
+
if (role === "chord" && stats.avgPoly > 1) {
|
|
14046
|
+
vol /= Math.sqrt(stats.avgPoly);
|
|
14047
|
+
} else if (role === "bass") {
|
|
14048
|
+
const depthSemitones = Math.max(0, 48 - stats.avgPitch);
|
|
14049
|
+
vol += Math.min(12, depthSemitones * 0.5);
|
|
14050
|
+
}
|
|
14051
|
+
return clamp5(Math.round(vol), 1, 127);
|
|
14052
|
+
};
|
|
14053
|
+
var AUTO_ROLE_MIX = {
|
|
14054
|
+
melody: {
|
|
14055
|
+
compression: 35,
|
|
14056
|
+
width: 115,
|
|
14057
|
+
reverbSend: 12,
|
|
14058
|
+
delaySend: 15,
|
|
14059
|
+
eqLow: -2,
|
|
14060
|
+
eqHigh: 2
|
|
14061
|
+
},
|
|
14062
|
+
submelody: {
|
|
14063
|
+
compression: 32,
|
|
14064
|
+
width: 115,
|
|
14065
|
+
reverbSend: 15,
|
|
14066
|
+
delaySend: 8,
|
|
14067
|
+
eqLow: -3,
|
|
14068
|
+
eqHigh: 1
|
|
14069
|
+
},
|
|
14070
|
+
chord: {
|
|
14071
|
+
compression: 25,
|
|
14072
|
+
width: 118,
|
|
14073
|
+
reverbSend: 22,
|
|
14074
|
+
delaySend: 0,
|
|
14075
|
+
eqLow: -4,
|
|
14076
|
+
eqHigh: 0
|
|
14077
|
+
},
|
|
14078
|
+
bass: {
|
|
14079
|
+
compression: 40,
|
|
14080
|
+
width: 100,
|
|
14081
|
+
reverbSend: 5,
|
|
14082
|
+
delaySend: 0,
|
|
14083
|
+
eqLow: 2,
|
|
14084
|
+
eqHigh: -3
|
|
14085
|
+
}
|
|
14086
|
+
};
|
|
13942
14087
|
var mountDAW = (target, options = {}) => {
|
|
13943
14088
|
injectStyles();
|
|
13944
14089
|
const getAudioTime = options.getAudioTime ?? (() => performance.now() / 1e3);
|
|
@@ -13969,6 +14114,8 @@ var mountDAW = (target, options = {}) => {
|
|
|
13969
14114
|
});
|
|
13970
14115
|
refs.masterVolume.value = String(options.masterVolume ?? 50);
|
|
13971
14116
|
refs.masterVolumeLabel.textContent = `${options.masterVolume ?? 50}%`;
|
|
14117
|
+
refs.masterComp.value = String(options.masterCompression ?? 0);
|
|
14118
|
+
refs.masterCompLabel.textContent = `${options.masterCompression ?? 0}%`;
|
|
13972
14119
|
refs.reverbAmount.value = String(options.reverbAmount ?? 0);
|
|
13973
14120
|
refs.reverbAmountLabel.textContent = `${options.reverbAmount ?? 0}%`;
|
|
13974
14121
|
{
|
|
@@ -14006,14 +14153,38 @@ var mountDAW = (target, options = {}) => {
|
|
|
14006
14153
|
let reverbPreDelay = options.reverbPreDelay ?? DEFAULT_REVERB_PREDELAY_MS;
|
|
14007
14154
|
let delayAmount = options.delayAmount ?? 0;
|
|
14008
14155
|
let delayDivision = options.delayDivision ?? "8";
|
|
14156
|
+
let masterCompression = options.masterCompression ?? 0;
|
|
14009
14157
|
let fadeInSec = options.fadeInSec ?? 0;
|
|
14010
14158
|
let fadeOutSec = options.fadeOutSec ?? 0;
|
|
14011
14159
|
let unsubscribeClip;
|
|
14160
|
+
let observedPeakMax = 0;
|
|
14161
|
+
let observedPlayMs = 0;
|
|
14162
|
+
let peakSampleRafId = null;
|
|
14163
|
+
let peakSampleLastTs = 0;
|
|
14164
|
+
const PEAK_SAMPLE_MIN_PLAY_MS = 2e3;
|
|
14165
|
+
const samplePeakTick = (ts) => {
|
|
14166
|
+
if (peakSampleLastTs) observedPlayMs += ts - peakSampleLastTs;
|
|
14167
|
+
peakSampleLastTs = ts;
|
|
14168
|
+
const peak = options.clipMeter?.getPeakLevel() ?? 0;
|
|
14169
|
+
if (peak > observedPeakMax) observedPeakMax = peak;
|
|
14170
|
+
peakSampleRafId = requestAnimationFrame(samplePeakTick);
|
|
14171
|
+
};
|
|
14172
|
+
const startPeakSampling = () => {
|
|
14173
|
+
if (peakSampleRafId !== null || !options.clipMeter) return;
|
|
14174
|
+
peakSampleLastTs = 0;
|
|
14175
|
+
peakSampleRafId = requestAnimationFrame(samplePeakTick);
|
|
14176
|
+
};
|
|
14177
|
+
const stopPeakSampling = () => {
|
|
14178
|
+
if (peakSampleRafId !== null) cancelAnimationFrame(peakSampleRafId);
|
|
14179
|
+
peakSampleRafId = null;
|
|
14180
|
+
peakSampleLastTs = 0;
|
|
14181
|
+
};
|
|
14012
14182
|
options.onReverbChange?.(reverbAmount);
|
|
14013
14183
|
options.onReverbDecayChange?.(reverbDecay);
|
|
14014
14184
|
options.onReverbPreDelayChange?.(reverbPreDelay);
|
|
14015
14185
|
options.onDelayChange?.(delayAmount);
|
|
14016
14186
|
options.onDelayDivisionChange?.(delayDivision);
|
|
14187
|
+
options.onMasterCompressionChange?.(masterCompression);
|
|
14017
14188
|
let drumVolume = options.drumVolume ?? 80;
|
|
14018
14189
|
let currentDrumPattern = refs.drumSelect.value;
|
|
14019
14190
|
let currentDrumFont = options.drumFont ?? "FluidR3_GM_sf2_file:0";
|
|
@@ -14173,7 +14344,9 @@ var mountDAW = (target, options = {}) => {
|
|
|
14173
14344
|
trackReverbSend: 0,
|
|
14174
14345
|
trackEqLow: 0,
|
|
14175
14346
|
trackEqMid: 0,
|
|
14176
|
-
trackEqHigh: 0
|
|
14347
|
+
trackEqHigh: 0,
|
|
14348
|
+
trackPan: 64,
|
|
14349
|
+
trackDelaySend: 0
|
|
14177
14350
|
};
|
|
14178
14351
|
});
|
|
14179
14352
|
};
|
|
@@ -15046,6 +15219,7 @@ var mountDAW = (target, options = {}) => {
|
|
|
15046
15219
|
}
|
|
15047
15220
|
playbackState = "playing";
|
|
15048
15221
|
sequencer.start(fromStep);
|
|
15222
|
+
startPeakSampling();
|
|
15049
15223
|
{
|
|
15050
15224
|
const anchor = sequencer.getStartTime();
|
|
15051
15225
|
const secondsPerStepFade = 60 / bpm / 48;
|
|
@@ -15088,6 +15262,7 @@ var mountDAW = (target, options = {}) => {
|
|
|
15088
15262
|
clearSoundTimers();
|
|
15089
15263
|
options.onScheduleFade?.(null);
|
|
15090
15264
|
playbackState = "paused";
|
|
15265
|
+
stopPeakSampling();
|
|
15091
15266
|
updateTransport();
|
|
15092
15267
|
};
|
|
15093
15268
|
const reloadVoicesForModel = (model) => {
|
|
@@ -15103,6 +15278,7 @@ var mountDAW = (target, options = {}) => {
|
|
|
15103
15278
|
options.onScheduleFade?.(null);
|
|
15104
15279
|
playbackState = "stopped";
|
|
15105
15280
|
currentPlayStep = 0;
|
|
15281
|
+
stopPeakSampling();
|
|
15106
15282
|
updateTransport();
|
|
15107
15283
|
redrawAll();
|
|
15108
15284
|
};
|
|
@@ -15171,12 +15347,24 @@ var mountDAW = (target, options = {}) => {
|
|
|
15171
15347
|
<span class="dtm-label" data-dtm="track-width-label"></span>
|
|
15172
15348
|
<button class="dtm-infobtn" data-dtm="track-width-info" title="\u30B9\u30C6\u30EC\u30AA\u5E45\u306E\u89E3\u8AAC">${icon("info", 12)}</button>
|
|
15173
15349
|
</div>
|
|
15350
|
+
<div class="dtm-row">
|
|
15351
|
+
<span class="dtm-label">\u5B9A\u4F4D</span>
|
|
15352
|
+
<input type="range" class="dtm-range dtm-grow" data-dtm="track-pan" min="0" max="127" aria-label="\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u306E\u5DE6\u53F3\u306E\u5B9A\u4F4D\uFF0864=\u4E2D\u592E\u30010=\u5DE6\u3044\u3063\u3071\u3044\u3001127=\u53F3\u3044\u3063\u3071\u3044\uFF09">
|
|
15353
|
+
<span class="dtm-label" data-dtm="track-pan-label"></span>
|
|
15354
|
+
<button class="dtm-infobtn" data-dtm="track-pan-info" title="\u5B9A\u4F4D\u306E\u89E3\u8AAC">${icon("info", 12)}</button>
|
|
15355
|
+
</div>
|
|
15174
15356
|
<div class="dtm-row">
|
|
15175
15357
|
<span class="dtm-label">\u30EA\u30D0\u30FC\u30D6\u9001\u308A</span>
|
|
15176
15358
|
<input type="range" class="dtm-range dtm-grow" data-dtm="track-reverb-send" min="0" max="100" aria-label="\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u306E\u30DE\u30B9\u30BF\u30EA\u30D0\u30FC\u30D6\u3078\u306E\u9001\u308A\u91CF\uFF080=\u639B\u304B\u3089\u306A\u3044\uFF09">
|
|
15177
15359
|
<span class="dtm-label" data-dtm="track-reverb-send-label"></span>
|
|
15178
15360
|
<button class="dtm-infobtn" data-dtm="track-reverb-send-info" title="\u30EA\u30D0\u30FC\u30D6\u9001\u308A\u306E\u89E3\u8AAC">${icon("info", 12)}</button>
|
|
15179
15361
|
</div>
|
|
15362
|
+
<div class="dtm-row">
|
|
15363
|
+
<span class="dtm-label">\u30C7\u30A3\u30EC\u30A4\u9001\u308A</span>
|
|
15364
|
+
<input type="range" class="dtm-range dtm-grow" data-dtm="track-delay-send" min="0" max="100" aria-label="\u3053\u306E\u30C8\u30E9\u30C3\u30AF\u306E\u30DE\u30B9\u30BF\u30C7\u30A3\u30EC\u30A4\u3078\u306E\u9001\u308A\u91CF\uFF080=\u639B\u304B\u3089\u306A\u3044\uFF09">
|
|
15365
|
+
<span class="dtm-label" data-dtm="track-delay-send-label"></span>
|
|
15366
|
+
<button class="dtm-infobtn" data-dtm="track-delay-send-info" title="\u30C7\u30A3\u30EC\u30A4\u9001\u308A\u306E\u89E3\u8AAC">${icon("info", 12)}</button>
|
|
15367
|
+
</div>
|
|
15180
15368
|
</details>`;
|
|
15181
15369
|
refs.trackBody.querySelector(
|
|
15182
15370
|
'[data-dtm="track-fx-advanced"]'
|
|
@@ -15286,6 +15474,26 @@ var mountDAW = (target, options = {}) => {
|
|
|
15286
15474
|
trackWidthInfo.addEventListener("click", () => {
|
|
15287
15475
|
showModal("\u30B9\u30C6\u30EC\u30AA\u5E45\u306E\u89E3\u8AAC", TRACK_WIDTH_INFO_HTML);
|
|
15288
15476
|
});
|
|
15477
|
+
const trackPanInput = refs.trackBody.querySelector(
|
|
15478
|
+
'[data-dtm="track-pan"]'
|
|
15479
|
+
);
|
|
15480
|
+
const trackPanLabel = refs.trackBody.querySelector(
|
|
15481
|
+
'[data-dtm="track-pan-label"]'
|
|
15482
|
+
);
|
|
15483
|
+
const trackPanInfo = refs.trackBody.querySelector(
|
|
15484
|
+
'[data-dtm="track-pan-info"]'
|
|
15485
|
+
);
|
|
15486
|
+
const fmtTrackPan = (pan) => pan === 64 ? "C" : pan < 64 ? `L${64 - pan}` : `R${pan - 64}`;
|
|
15487
|
+
trackPanInput.value = String(active.trackPan);
|
|
15488
|
+
trackPanLabel.textContent = fmtTrackPan(active.trackPan);
|
|
15489
|
+
trackPanInput.addEventListener("input", () => {
|
|
15490
|
+
active.trackPan = Number.parseInt(trackPanInput.value, 10);
|
|
15491
|
+
trackPanLabel.textContent = fmtTrackPan(active.trackPan);
|
|
15492
|
+
options.onTrackPanChange?.(active.config.id, active.trackPan);
|
|
15493
|
+
});
|
|
15494
|
+
trackPanInfo.addEventListener("click", () => {
|
|
15495
|
+
showModal("\u5B9A\u4F4D\u306E\u89E3\u8AAC", TRACK_PAN_INFO_HTML);
|
|
15496
|
+
});
|
|
15289
15497
|
const trackReverbSendInput = refs.trackBody.querySelector(
|
|
15290
15498
|
'[data-dtm="track-reverb-send"]'
|
|
15291
15499
|
);
|
|
@@ -15308,6 +15516,25 @@ var mountDAW = (target, options = {}) => {
|
|
|
15308
15516
|
trackReverbSendInfo.addEventListener("click", () => {
|
|
15309
15517
|
showModal("\u30EA\u30D0\u30FC\u30D6\u9001\u308A\u306E\u89E3\u8AAC", TRACK_REVERBSEND_INFO_HTML);
|
|
15310
15518
|
});
|
|
15519
|
+
const trackDelaySendInput = refs.trackBody.querySelector(
|
|
15520
|
+
'[data-dtm="track-delay-send"]'
|
|
15521
|
+
);
|
|
15522
|
+
const trackDelaySendLabel = refs.trackBody.querySelector(
|
|
15523
|
+
'[data-dtm="track-delay-send-label"]'
|
|
15524
|
+
);
|
|
15525
|
+
const trackDelaySendInfo = refs.trackBody.querySelector(
|
|
15526
|
+
'[data-dtm="track-delay-send-info"]'
|
|
15527
|
+
);
|
|
15528
|
+
trackDelaySendInput.value = String(active.trackDelaySend);
|
|
15529
|
+
trackDelaySendLabel.textContent = `${active.trackDelaySend}%`;
|
|
15530
|
+
trackDelaySendInput.addEventListener("input", () => {
|
|
15531
|
+
active.trackDelaySend = Number.parseInt(trackDelaySendInput.value, 10);
|
|
15532
|
+
trackDelaySendLabel.textContent = `${active.trackDelaySend}%`;
|
|
15533
|
+
options.onTrackDelaySendChange?.(active.config.id, active.trackDelaySend);
|
|
15534
|
+
});
|
|
15535
|
+
trackDelaySendInfo.addEventListener("click", () => {
|
|
15536
|
+
showModal("\u30C7\u30A3\u30EC\u30A4\u9001\u308A\u306E\u89E3\u8AAC", TRACK_DELAYSEND_INFO_HTML);
|
|
15537
|
+
});
|
|
15311
15538
|
const instRow = document.createElement("div");
|
|
15312
15539
|
instRow.className = "dtm-row";
|
|
15313
15540
|
instRow.innerHTML = `<span class="dtm-label">\u697D\u5668</span>`;
|
|
@@ -15911,6 +16138,8 @@ var mountDAW = (target, options = {}) => {
|
|
|
15911
16138
|
const trackEqLowForMeta = {};
|
|
15912
16139
|
const trackEqMidForMeta = {};
|
|
15913
16140
|
const trackEqHighForMeta = {};
|
|
16141
|
+
const trackPanForMeta = {};
|
|
16142
|
+
const trackDelaySendForMeta = {};
|
|
15914
16143
|
trackStates.forEach((t, i2) => {
|
|
15915
16144
|
if (t.trackInstrument) trackInstrumentsForMeta[i2] = t.trackInstrument;
|
|
15916
16145
|
if (t.trackCompression !== 0)
|
|
@@ -15921,6 +16150,8 @@ var mountDAW = (target, options = {}) => {
|
|
|
15921
16150
|
if (t.trackEqLow !== 0) trackEqLowForMeta[i2] = t.trackEqLow;
|
|
15922
16151
|
if (t.trackEqMid !== 0) trackEqMidForMeta[i2] = t.trackEqMid;
|
|
15923
16152
|
if (t.trackEqHigh !== 0) trackEqHighForMeta[i2] = t.trackEqHigh;
|
|
16153
|
+
if (t.trackPan !== 64) trackPanForMeta[i2] = t.trackPan;
|
|
16154
|
+
if (t.trackDelaySend !== 0) trackDelaySendForMeta[i2] = t.trackDelaySend;
|
|
15924
16155
|
});
|
|
15925
16156
|
const trackInstMeta = Object.keys(trackInstrumentsForMeta).length > 0 ? trackInstrumentsForMeta : void 0;
|
|
15926
16157
|
const trackCompMeta = Object.keys(trackCompressionForMeta).length > 0 ? trackCompressionForMeta : void 0;
|
|
@@ -15929,6 +16160,8 @@ var mountDAW = (target, options = {}) => {
|
|
|
15929
16160
|
const trackEqLowMeta = Object.keys(trackEqLowForMeta).length > 0 ? trackEqLowForMeta : void 0;
|
|
15930
16161
|
const trackEqMidMeta = Object.keys(trackEqMidForMeta).length > 0 ? trackEqMidForMeta : void 0;
|
|
15931
16162
|
const trackEqHighMeta = Object.keys(trackEqHighForMeta).length > 0 ? trackEqHighForMeta : void 0;
|
|
16163
|
+
const trackPanMeta = Object.keys(trackPanForMeta).length > 0 ? trackPanForMeta : void 0;
|
|
16164
|
+
const trackDelaySendMeta = Object.keys(trackDelaySendForMeta).length > 0 ? trackDelaySendForMeta : void 0;
|
|
15932
16165
|
const metaLineFull = formatMmlMeta(
|
|
15933
16166
|
{
|
|
15934
16167
|
instrument: currentInstrument || void 0,
|
|
@@ -15940,6 +16173,7 @@ var mountDAW = (target, options = {}) => {
|
|
|
15940
16173
|
reverbPreDelay,
|
|
15941
16174
|
delay: delayAmount,
|
|
15942
16175
|
delayDivision,
|
|
16176
|
+
masterCompression,
|
|
15943
16177
|
fadeIn: Math.round(fadeInSec * 10),
|
|
15944
16178
|
fadeOut: Math.round(fadeOutSec * 10),
|
|
15945
16179
|
mode,
|
|
@@ -15949,7 +16183,9 @@ var mountDAW = (target, options = {}) => {
|
|
|
15949
16183
|
trackReverbSend: trackReverbSendMeta,
|
|
15950
16184
|
trackEqLow: trackEqLowMeta,
|
|
15951
16185
|
trackEqMid: trackEqMidMeta,
|
|
15952
|
-
trackEqHigh: trackEqHighMeta
|
|
16186
|
+
trackEqHigh: trackEqHighMeta,
|
|
16187
|
+
trackPan: trackPanMeta,
|
|
16188
|
+
trackDelaySend: trackDelaySendMeta
|
|
15953
16189
|
},
|
|
15954
16190
|
" "
|
|
15955
16191
|
);
|
|
@@ -15964,6 +16200,7 @@ var mountDAW = (target, options = {}) => {
|
|
|
15964
16200
|
reverbPreDelay,
|
|
15965
16201
|
delay: delayAmount,
|
|
15966
16202
|
delayDivision,
|
|
16203
|
+
masterCompression,
|
|
15967
16204
|
fadeIn: Math.round(fadeInSec * 10),
|
|
15968
16205
|
fadeOut: Math.round(fadeOutSec * 10),
|
|
15969
16206
|
mode,
|
|
@@ -15973,7 +16210,9 @@ var mountDAW = (target, options = {}) => {
|
|
|
15973
16210
|
trackReverbSend: trackReverbSendMeta,
|
|
15974
16211
|
trackEqLow: trackEqLowMeta,
|
|
15975
16212
|
trackEqMid: trackEqMidMeta,
|
|
15976
|
-
trackEqHigh: trackEqHighMeta
|
|
16213
|
+
trackEqHigh: trackEqHighMeta,
|
|
16214
|
+
trackPan: trackPanMeta,
|
|
16215
|
+
trackDelaySend: trackDelaySendMeta
|
|
15977
16216
|
},
|
|
15978
16217
|
""
|
|
15979
16218
|
);
|
|
@@ -16211,6 +16450,12 @@ var mountDAW = (target, options = {}) => {
|
|
|
16211
16450
|
refs.delayDivision.value = delayDivision;
|
|
16212
16451
|
options.onDelayDivisionChange?.(delayDivision);
|
|
16213
16452
|
}
|
|
16453
|
+
if (meta.masterCompression !== void 0) {
|
|
16454
|
+
masterCompression = meta.masterCompression;
|
|
16455
|
+
refs.masterComp.value = String(meta.masterCompression);
|
|
16456
|
+
refs.masterCompLabel.textContent = `${meta.masterCompression}%`;
|
|
16457
|
+
options.onMasterCompressionChange?.(meta.masterCompression);
|
|
16458
|
+
}
|
|
16214
16459
|
if (meta.fadeIn !== void 0) {
|
|
16215
16460
|
fadeInSec = meta.fadeIn / 10;
|
|
16216
16461
|
refs.fadeIn.value = String(fadeInSec);
|
|
@@ -16262,6 +16507,16 @@ var mountDAW = (target, options = {}) => {
|
|
|
16262
16507
|
t.trackEqHigh = eqHigh;
|
|
16263
16508
|
options.onTrackEqHighChange?.(t.config.id, eqHigh);
|
|
16264
16509
|
}
|
|
16510
|
+
const pan = meta.trackPan?.[i2] ?? 64;
|
|
16511
|
+
if (t.trackPan !== pan) {
|
|
16512
|
+
t.trackPan = pan;
|
|
16513
|
+
options.onTrackPanChange?.(t.config.id, pan);
|
|
16514
|
+
}
|
|
16515
|
+
const delaySend = meta.trackDelaySend?.[i2] ?? 0;
|
|
16516
|
+
if (t.trackDelaySend !== delaySend) {
|
|
16517
|
+
t.trackDelaySend = delaySend;
|
|
16518
|
+
options.onTrackDelaySendChange?.(t.config.id, delaySend);
|
|
16519
|
+
}
|
|
16265
16520
|
});
|
|
16266
16521
|
trackStates.forEach((t, i2) => {
|
|
16267
16522
|
if (applyActiveOnly && i2 !== activeTrackIndex) return;
|
|
@@ -16639,6 +16894,14 @@ var mountDAW = (target, options = {}) => {
|
|
|
16639
16894
|
refs.masterVolumeLabel.textContent = `${masterVolume}%`;
|
|
16640
16895
|
options.singingVoices?.setVolume(masterVolume / 100);
|
|
16641
16896
|
});
|
|
16897
|
+
refs.masterComp.addEventListener("input", () => {
|
|
16898
|
+
masterCompression = Number.parseInt(refs.masterComp.value, 10) || 0;
|
|
16899
|
+
refs.masterCompLabel.textContent = `${masterCompression}%`;
|
|
16900
|
+
options.onMasterCompressionChange?.(masterCompression);
|
|
16901
|
+
});
|
|
16902
|
+
refs.masterCompInfoBtn.addEventListener("click", () => {
|
|
16903
|
+
showModal("\u30B0\u30EB\u30FC\u30B3\u30F3\u30D7\u306E\u89E3\u8AAC", MASTER_COMP_INFO_HTML);
|
|
16904
|
+
});
|
|
16642
16905
|
refs.reverbAmount.addEventListener("input", () => {
|
|
16643
16906
|
reverbAmount = Number.parseInt(refs.reverbAmount.value, 10) || 0;
|
|
16644
16907
|
refs.reverbAmountLabel.textContent = `${reverbAmount}%`;
|
|
@@ -16688,10 +16951,31 @@ var mountDAW = (target, options = {}) => {
|
|
|
16688
16951
|
showModal("\u304A\u307E\u304B\u305B\u30DE\u30B9\u30BF\u30EA\u30F3\u30B0\u89E3\u8AAC", AUTO_MASTER_INFO_HTML);
|
|
16689
16952
|
});
|
|
16690
16953
|
refs.autoMasterBtn.addEventListener("click", () => {
|
|
16691
|
-
|
|
16692
|
-
|
|
16693
|
-
|
|
16694
|
-
|
|
16954
|
+
if (observedPlayMs >= PEAK_SAMPLE_MIN_PLAY_MS && observedPeakMax > 0) {
|
|
16955
|
+
const targetPeak = 0.5;
|
|
16956
|
+
const scale = targetPeak / observedPeakMax;
|
|
16957
|
+
const suggested = clamp5(Math.round(masterVolume * scale), 10, 100);
|
|
16958
|
+
if (suggested !== masterVolume) {
|
|
16959
|
+
masterVolume = suggested;
|
|
16960
|
+
refs.masterVolume.value = String(masterVolume);
|
|
16961
|
+
refs.masterVolumeLabel.textContent = `${masterVolume}%`;
|
|
16962
|
+
options.singingVoices?.setVolume(masterVolume / 100);
|
|
16963
|
+
}
|
|
16964
|
+
observedPeakMax = 0;
|
|
16965
|
+
observedPlayMs = 0;
|
|
16966
|
+
}
|
|
16967
|
+
masterCompression = 25;
|
|
16968
|
+
refs.masterComp.value = "25";
|
|
16969
|
+
refs.masterCompLabel.textContent = "25%";
|
|
16970
|
+
options.onMasterCompressionChange?.(25);
|
|
16971
|
+
const activeTrackCount = trackStates.filter(
|
|
16972
|
+
(t) => t.core.getNotes().length > 0
|
|
16973
|
+
).length;
|
|
16974
|
+
const densityT = clamp5((activeTrackCount - 2) / (8 - 2), 0, 1);
|
|
16975
|
+
reverbAmount = Math.round(28 - densityT * (28 - 12));
|
|
16976
|
+
refs.reverbAmount.value = String(reverbAmount);
|
|
16977
|
+
refs.reverbAmountLabel.textContent = `${reverbAmount}%`;
|
|
16978
|
+
options.onReverbChange?.(reverbAmount);
|
|
16695
16979
|
const bpmT = clamp5((bpm - 60) / (180 - 60), 0, 1);
|
|
16696
16980
|
reverbDecay = clamp5(
|
|
16697
16981
|
3 - bpmT * (3 - 0.9),
|
|
@@ -16705,8 +16989,14 @@ var mountDAW = (target, options = {}) => {
|
|
|
16705
16989
|
refs.reverbPreDelay.value = "20";
|
|
16706
16990
|
refs.reverbPreDelayLabel.textContent = "20ms";
|
|
16707
16991
|
options.onReverbPreDelayChange?.(20);
|
|
16992
|
+
if (fadeOutSec === 0) {
|
|
16993
|
+
fadeOutSec = 1.5;
|
|
16994
|
+
refs.fadeOut.value = "1.5";
|
|
16995
|
+
refs.fadeOutLabel.textContent = "1.5s";
|
|
16996
|
+
}
|
|
16708
16997
|
let mainVocalId = null;
|
|
16709
16998
|
let mainVocalScore = -1;
|
|
16999
|
+
let nonMainVocalCount = 0;
|
|
16710
17000
|
for (const t of trackStates) {
|
|
16711
17001
|
if (!t.lyricModel) continue;
|
|
16712
17002
|
const score = t.core.getNotes().reduce((sum, n) => sum + n.durationSteps, 0);
|
|
@@ -16715,34 +17005,87 @@ var mountDAW = (target, options = {}) => {
|
|
|
16715
17005
|
mainVocalId = t.config.id;
|
|
16716
17006
|
}
|
|
16717
17007
|
}
|
|
17008
|
+
for (const t of trackStates) {
|
|
17009
|
+
if (t.lyricModel && t.config.id !== mainVocalId) nonMainVocalCount++;
|
|
17010
|
+
}
|
|
16718
17011
|
const autoPreset = INSTRUMENT_PRESETS[currentInstrument] ?? INSTRUMENT_PRESETS.piano;
|
|
17012
|
+
const roleByTrackId = /* @__PURE__ */ new Map();
|
|
16719
17013
|
for (const t of trackStates) {
|
|
16720
17014
|
if (t.lyricModel) continue;
|
|
16721
17015
|
const notes = t.core.getNotes();
|
|
16722
17016
|
if (notes.length === 0) continue;
|
|
16723
|
-
const
|
|
17017
|
+
const stats = computeAutoRoleStats(notes);
|
|
17018
|
+
const role = classifyTrackRole(stats);
|
|
17019
|
+
roleByTrackId.set(t.config.id, role);
|
|
16724
17020
|
const instName = autoPreset[role];
|
|
16725
17021
|
t.trackInstrument = instName;
|
|
16726
17022
|
const trackIndex = trackStates.indexOf(t);
|
|
16727
17023
|
options.onTrackInstrumentChange?.(trackIndex, instName);
|
|
16728
|
-
const vol =
|
|
17024
|
+
const vol = computeAutoRoleVolume(role, stats);
|
|
16729
17025
|
t.volume = vol;
|
|
16730
17026
|
t.core.setVolume(vol);
|
|
16731
17027
|
}
|
|
17028
|
+
const AUTO_PAN_OFFSETS = {
|
|
17029
|
+
melody: [0],
|
|
17030
|
+
bass: [0],
|
|
17031
|
+
submelody: [18, -18, 30, -30],
|
|
17032
|
+
chord: [36, -36, 48, -48]
|
|
17033
|
+
};
|
|
17034
|
+
const panRoleCounter = /* @__PURE__ */ new Map();
|
|
17035
|
+
let vocalSideCounter = 0;
|
|
16732
17036
|
for (const t of trackStates) {
|
|
16733
17037
|
const isMainVocal = !!t.lyricModel && t.config.id === mainVocalId;
|
|
16734
|
-
const
|
|
17038
|
+
const role = roleByTrackId.get(t.config.id);
|
|
17039
|
+
const roleMix = role ? AUTO_ROLE_MIX[role] : void 0;
|
|
17040
|
+
let pan = 64;
|
|
17041
|
+
if (t.lyricModel) {
|
|
17042
|
+
pan = isMainVocal ? 64 : clamp5(64 + (vocalSideCounter++ % 2 === 0 ? 22 : -22), 0, 127);
|
|
17043
|
+
} else if (role) {
|
|
17044
|
+
const offsets = AUTO_PAN_OFFSETS[role];
|
|
17045
|
+
const n = panRoleCounter.get(role) ?? 0;
|
|
17046
|
+
panRoleCounter.set(role, n + 1);
|
|
17047
|
+
pan = clamp5(64 + offsets[n % offsets.length], 0, 127);
|
|
17048
|
+
}
|
|
17049
|
+
t.trackPan = pan;
|
|
17050
|
+
options.onTrackPanChange?.(t.config.id, pan);
|
|
17051
|
+
const comp = t.lyricModel ? isMainVocal ? 30 : 25 : roleMix?.compression ?? 35;
|
|
17052
|
+
const width = t.lyricModel ? isMainVocal ? 100 : 120 : roleMix?.width ?? 115;
|
|
16735
17053
|
t.trackCompression = comp;
|
|
16736
|
-
t.trackWidth =
|
|
17054
|
+
t.trackWidth = width;
|
|
16737
17055
|
options.onTrackCompressionChange?.(t.config.id, comp);
|
|
16738
|
-
options.onTrackWidthChange?.(t.config.id,
|
|
17056
|
+
options.onTrackWidthChange?.(t.config.id, width);
|
|
17057
|
+
if (t.lyricModel) {
|
|
17058
|
+
t.trackEqLow = -3;
|
|
17059
|
+
t.trackEqHigh = isMainVocal ? 2 : 0;
|
|
17060
|
+
options.onTrackEqLowChange?.(t.config.id, t.trackEqLow);
|
|
17061
|
+
options.onTrackEqHighChange?.(t.config.id, t.trackEqHigh);
|
|
17062
|
+
} else {
|
|
17063
|
+
const eqLow = roleMix?.eqLow ?? 0;
|
|
17064
|
+
const eqHigh = roleMix?.eqHigh ?? 0;
|
|
17065
|
+
t.trackEqLow = eqLow;
|
|
17066
|
+
t.trackEqHigh = eqHigh;
|
|
17067
|
+
options.onTrackEqLowChange?.(t.config.id, eqLow);
|
|
17068
|
+
options.onTrackEqHighChange?.(t.config.id, eqHigh);
|
|
17069
|
+
}
|
|
16739
17070
|
if (!t.lyricModel) {
|
|
16740
|
-
|
|
16741
|
-
|
|
17071
|
+
const reverbSend = roleMix?.reverbSend ?? 15;
|
|
17072
|
+
t.trackReverbSend = reverbSend;
|
|
17073
|
+
options.onTrackReverbSendChange?.(t.config.id, reverbSend);
|
|
17074
|
+
const delaySend = roleMix?.delaySend ?? 0;
|
|
17075
|
+
t.trackDelaySend = delaySend;
|
|
17076
|
+
options.onTrackDelaySendChange?.(t.config.id, delaySend);
|
|
16742
17077
|
}
|
|
16743
17078
|
if (t.lyricModel) {
|
|
16744
|
-
t.vocalVibrato =
|
|
17079
|
+
t.vocalVibrato = isMainVocal;
|
|
16745
17080
|
t.vocalReverb = isMainVocal ? 25 : 45;
|
|
17081
|
+
t.vocalDelay = isMainVocal ? 15 : 0;
|
|
17082
|
+
t.vocalVolume = isMainVocal ? Math.round(DEFAULT_VOCAL_VOLUME * 1.1) : clamp5(
|
|
17083
|
+
Math.round(
|
|
17084
|
+
DEFAULT_VOCAL_VOLUME * 0.85 / Math.sqrt(Math.max(1, nonMainVocalCount))
|
|
17085
|
+
),
|
|
17086
|
+
60,
|
|
17087
|
+
MAX_VOCAL_VOLUME
|
|
17088
|
+
);
|
|
16746
17089
|
fireLyricsChange(t);
|
|
16747
17090
|
}
|
|
16748
17091
|
}
|
|
@@ -17828,6 +18171,7 @@ var mountDAW = (target, options = {}) => {
|
|
|
17828
18171
|
sequencer.stop();
|
|
17829
18172
|
options.singingVoices?.stopStream();
|
|
17830
18173
|
unsubscribeClip?.();
|
|
18174
|
+
stopPeakSampling();
|
|
17831
18175
|
resizeObserver.disconnect();
|
|
17832
18176
|
document.removeEventListener("pointermove", onPointerMove);
|
|
17833
18177
|
document.removeEventListener("pointerup", onPointerUp);
|
|
@@ -18786,13 +19130,39 @@ var createDtmStudio = async (options = {}) => {
|
|
|
18786
19130
|
division: options.delayDivision ?? "8"
|
|
18787
19131
|
});
|
|
18788
19132
|
const setDelayAmount = (amount) => delayBus.setAmount(amount);
|
|
19133
|
+
const glueComp = audioCtx.createDynamicsCompressor();
|
|
19134
|
+
glueComp.knee.value = 6;
|
|
19135
|
+
const glueMakeup = audioCtx.createGain();
|
|
19136
|
+
finalMix.connect(glueComp);
|
|
19137
|
+
glueComp.connect(glueMakeup);
|
|
19138
|
+
const glueCompressionParams = (amount) => {
|
|
19139
|
+
const t = Math.max(0, Math.min(100, amount)) / 100;
|
|
19140
|
+
return {
|
|
19141
|
+
threshold: 0 + (-18 - 0) * t,
|
|
19142
|
+
ratio: 1 + (4 - 1) * t,
|
|
19143
|
+
attack: 0.03 + (0.01 - 0.03) * t,
|
|
19144
|
+
release: 0.3 + (0.15 - 0.3) * t,
|
|
19145
|
+
makeupDb: 2.5 * t
|
|
19146
|
+
};
|
|
19147
|
+
};
|
|
19148
|
+
const applyGlueCompression = (amount) => {
|
|
19149
|
+
const p = glueCompressionParams(amount);
|
|
19150
|
+
const now = audioCtx.currentTime;
|
|
19151
|
+
glueComp.threshold.setValueAtTime(p.threshold, now);
|
|
19152
|
+
glueComp.ratio.setValueAtTime(p.ratio, now);
|
|
19153
|
+
glueComp.attack.setValueAtTime(p.attack, now);
|
|
19154
|
+
glueComp.release.setValueAtTime(p.release, now);
|
|
19155
|
+
glueMakeup.gain.setTargetAtTime(10 ** (p.makeupDb / 20), now, 0.02);
|
|
19156
|
+
};
|
|
19157
|
+
applyGlueCompression(options.masterCompression ?? 0);
|
|
19158
|
+
const setMasterCompression = (amount) => applyGlueCompression(amount);
|
|
18789
19159
|
const safetyLimiter = audioCtx.createDynamicsCompressor();
|
|
18790
19160
|
safetyLimiter.threshold.value = -1;
|
|
18791
19161
|
safetyLimiter.knee.value = 0;
|
|
18792
19162
|
safetyLimiter.ratio.value = 20;
|
|
18793
19163
|
safetyLimiter.attack.value = 1e-3;
|
|
18794
19164
|
safetyLimiter.release.value = 0.1;
|
|
18795
|
-
|
|
19165
|
+
glueMakeup.connect(safetyLimiter);
|
|
18796
19166
|
const fadeGain = audioCtx.createGain();
|
|
18797
19167
|
fadeGain.gain.value = 1;
|
|
18798
19168
|
safetyLimiter.connect(fadeGain);
|
|
@@ -18815,13 +19185,14 @@ var createDtmStudio = async (options = {}) => {
|
|
|
18815
19185
|
fadeGain.gain.linearRampToValueAtTime(0, fadeOutEndAt);
|
|
18816
19186
|
}
|
|
18817
19187
|
};
|
|
18818
|
-
const clipMeter = createClipMeter(audioCtx,
|
|
19188
|
+
const clipMeter = createClipMeter(audioCtx, glueMakeup);
|
|
18819
19189
|
const channelStrips = /* @__PURE__ */ new Map();
|
|
18820
19190
|
const getChannelStrip = (trackId) => {
|
|
18821
19191
|
let strip = channelStrips.get(trackId);
|
|
18822
19192
|
if (!strip) {
|
|
18823
19193
|
strip = createChannelStrip(audioCtx, masterGain, {
|
|
18824
|
-
reverbBus: reverbPreDelay
|
|
19194
|
+
reverbBus: reverbPreDelay,
|
|
19195
|
+
delayBus: delayBus.input
|
|
18825
19196
|
});
|
|
18826
19197
|
channelStrips.set(trackId, strip);
|
|
18827
19198
|
}
|
|
@@ -19152,6 +19523,8 @@ var createDtmStudio = async (options = {}) => {
|
|
|
19152
19523
|
onDelayChange: setDelayAmount,
|
|
19153
19524
|
delayDivision: options.delayDivision,
|
|
19154
19525
|
onDelayDivisionChange: (division) => delayBus.setDivision(division),
|
|
19526
|
+
masterCompression: options.masterCompression,
|
|
19527
|
+
onMasterCompressionChange: setMasterCompression,
|
|
19155
19528
|
onBpmChange: (bpm) => delayBus.setBpm(bpm),
|
|
19156
19529
|
fadeInSec: options.fadeInSec,
|
|
19157
19530
|
fadeOutSec: options.fadeOutSec,
|
|
@@ -19159,9 +19532,11 @@ var createDtmStudio = async (options = {}) => {
|
|
|
19159
19532
|
onTrackCompressionChange: (trackId, amount) => getChannelStrip(trackId).setCompression(amount),
|
|
19160
19533
|
onTrackWidthChange: (trackId, width) => getChannelStrip(trackId).setWidth(width),
|
|
19161
19534
|
onTrackReverbSendChange: (trackId, amount) => getChannelStrip(trackId).setReverbSend(amount),
|
|
19535
|
+
onTrackDelaySendChange: (trackId, amount) => getChannelStrip(trackId).setDelaySend(amount),
|
|
19162
19536
|
onTrackEqLowChange: (trackId, db) => getChannelStrip(trackId).setEqLow(db),
|
|
19163
19537
|
onTrackEqMidChange: (trackId, db) => getChannelStrip(trackId).setEqMid(db),
|
|
19164
19538
|
onTrackEqHighChange: (trackId, db) => getChannelStrip(trackId).setEqHigh(db),
|
|
19539
|
+
onTrackPanChange: (trackId, pan) => getChannelStrip(trackId).setPan(panToStereo(pan)),
|
|
19165
19540
|
clipMeter,
|
|
19166
19541
|
...dawOverrides,
|
|
19167
19542
|
// dawOverrides で上書きされないよう、スプレッドの後に配置して合成する
|
|
@@ -19743,6 +20118,7 @@ var createDtmStudio = async (options = {}) => {
|
|
|
19743
20118
|
setReverbDecay,
|
|
19744
20119
|
setReverbPreDelay,
|
|
19745
20120
|
setDelayAmount,
|
|
20121
|
+
setMasterCompression,
|
|
19746
20122
|
dispose
|
|
19747
20123
|
};
|
|
19748
20124
|
};
|