@onjmin/dtm 2.1.1 → 2.1.2

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.js CHANGED
@@ -19687,6 +19687,7 @@ var mountDAW = (target, options = {}) => {
19687
19687
  redrawAll();
19688
19688
  },
19689
19689
  onEnd: (interrupted) => {
19690
+ options.onScheduleFade?.(null);
19690
19691
  if (interrupted) {
19691
19692
  playbackState = "paused";
19692
19693
  pausedPlayStep = currentPlayStep;
@@ -19778,15 +19779,20 @@ var mountDAW = (target, options = {}) => {
19778
19779
  }
19779
19780
  if (fadeOutSec > 0) {
19780
19781
  const endStep = getSongEndStepExact();
19781
- const totalDurationSec = (endStep - fromStep) * secondsPerStepFade;
19782
- if (totalDurationSec > 0) {
19783
- const fadeOutEndAt = anchor + totalDurationSec;
19784
- const earliestStart = params.fadeInEndAt ?? anchor;
19785
- params.fadeOutEndAt = fadeOutEndAt;
19786
- params.fadeOutStartAt = Math.max(
19787
- fadeOutEndAt - fadeOutSec,
19788
- earliestStart
19789
- );
19782
+ if (endStep > fromStep) {
19783
+ const totalDurationSec = (endStep - fromStep) * secondsPerStepFade;
19784
+ if (totalDurationSec > 0.1) {
19785
+ const fadeOutEndAt = anchor + totalDurationSec;
19786
+ const earliestStart = params.fadeInEndAt ?? anchor;
19787
+ const fadeOutStartAt = Math.max(
19788
+ fadeOutEndAt - fadeOutSec,
19789
+ earliestStart
19790
+ );
19791
+ if (fadeOutStartAt < fadeOutEndAt) {
19792
+ params.fadeOutStartAt = fadeOutStartAt;
19793
+ params.fadeOutEndAt = fadeOutEndAt;
19794
+ }
19795
+ }
19790
19796
  }
19791
19797
  }
19792
19798
  options.onScheduleFade?.(params);
@@ -24235,6 +24241,8 @@ var createDtmStudio = async (options = {}) => {
24235
24241
  };
24236
24242
  };
24237
24243
  const resumeAudio = () => {
24244
+ fadeGain.gain.cancelScheduledValues(audioCtx.currentTime);
24245
+ fadeGain.gain.setValueAtTime(1, audioCtx.currentTime);
24238
24246
  if (audioCtx.state === "closed") return Promise.resolve();
24239
24247
  return audioCtx.resume();
24240
24248
  };
@@ -25078,9 +25086,7 @@ var createDtmStudio = async (options = {}) => {
25078
25086
  if (!sfInst) return;
25079
25087
  const vol = options2.volume ?? 80;
25080
25088
  const dur = options2.duration ?? 1;
25081
- if (audioCtx.state === "suspended") {
25082
- await audioCtx.resume();
25083
- }
25089
+ await resumeAudio();
25084
25090
  const { midi, detuneCents } = unitsToMidiDetune(options2.pitchUnits);
25085
25091
  sfInst.play({
25086
25092
  ctx: audioCtx,
package/dist/index.mjs CHANGED
@@ -19505,6 +19505,7 @@ var mountDAW = (target, options = {}) => {
19505
19505
  redrawAll();
19506
19506
  },
19507
19507
  onEnd: (interrupted) => {
19508
+ options.onScheduleFade?.(null);
19508
19509
  if (interrupted) {
19509
19510
  playbackState = "paused";
19510
19511
  pausedPlayStep = currentPlayStep;
@@ -19596,15 +19597,20 @@ var mountDAW = (target, options = {}) => {
19596
19597
  }
19597
19598
  if (fadeOutSec > 0) {
19598
19599
  const endStep = getSongEndStepExact();
19599
- const totalDurationSec = (endStep - fromStep) * secondsPerStepFade;
19600
- if (totalDurationSec > 0) {
19601
- const fadeOutEndAt = anchor + totalDurationSec;
19602
- const earliestStart = params.fadeInEndAt ?? anchor;
19603
- params.fadeOutEndAt = fadeOutEndAt;
19604
- params.fadeOutStartAt = Math.max(
19605
- fadeOutEndAt - fadeOutSec,
19606
- earliestStart
19607
- );
19600
+ if (endStep > fromStep) {
19601
+ const totalDurationSec = (endStep - fromStep) * secondsPerStepFade;
19602
+ if (totalDurationSec > 0.1) {
19603
+ const fadeOutEndAt = anchor + totalDurationSec;
19604
+ const earliestStart = params.fadeInEndAt ?? anchor;
19605
+ const fadeOutStartAt = Math.max(
19606
+ fadeOutEndAt - fadeOutSec,
19607
+ earliestStart
19608
+ );
19609
+ if (fadeOutStartAt < fadeOutEndAt) {
19610
+ params.fadeOutStartAt = fadeOutStartAt;
19611
+ params.fadeOutEndAt = fadeOutEndAt;
19612
+ }
19613
+ }
19608
19614
  }
19609
19615
  }
19610
19616
  options.onScheduleFade?.(params);
@@ -24052,6 +24058,8 @@ var createDtmStudio = async (options = {}) => {
24052
24058
  };
24053
24059
  };
24054
24060
  const resumeAudio = () => {
24061
+ fadeGain.gain.cancelScheduledValues(audioCtx.currentTime);
24062
+ fadeGain.gain.setValueAtTime(1, audioCtx.currentTime);
24055
24063
  if (audioCtx.state === "closed") return Promise.resolve();
24056
24064
  return audioCtx.resume();
24057
24065
  };
@@ -24895,9 +24903,7 @@ var createDtmStudio = async (options = {}) => {
24895
24903
  if (!sfInst) return;
24896
24904
  const vol = options2.volume ?? 80;
24897
24905
  const dur = options2.duration ?? 1;
24898
- if (audioCtx.state === "suspended") {
24899
- await audioCtx.resume();
24900
- }
24906
+ await resumeAudio();
24901
24907
  const { midi, detuneCents } = unitsToMidiDetune(options2.pitchUnits);
24902
24908
  sfInst.play({
24903
24909
  ctx: audioCtx,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "onjmin",
3
3
  "license": "MIT",
4
4
  "name": "@onjmin/dtm",
5
- "version": "2.1.1",
5
+ "version": "2.1.2",
6
6
  "description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
7
7
  "homepage": "https://onjmin.github.io/dtm",
8
8
  "repository": {