@onjmin/dtm 0.1.71 → 0.1.73

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 CHANGED
@@ -957,6 +957,8 @@ type PlayMmlOptions = {
957
957
  onStop?: () => void;
958
958
  /** 再生中のステップ更新(1/192小節ごと)時のコールバック */
959
959
  onTick?: (step: number) => void;
960
+ /** 再生開始位置(ステップ単位)。指定すると途中から再生する。 */
961
+ startStep?: number;
960
962
  };
961
963
  type MmlPlayback = {
962
964
  /** 再生を止める(ループ中でも停止)。 */
package/dist/index.d.ts CHANGED
@@ -957,6 +957,8 @@ type PlayMmlOptions = {
957
957
  onStop?: () => void;
958
958
  /** 再生中のステップ更新(1/192小節ごと)時のコールバック */
959
959
  onTick?: (step: number) => void;
960
+ /** 再生開始位置(ステップ単位)。指定すると途中から再生する。 */
961
+ startStep?: number;
960
962
  };
961
963
  type MmlPlayback = {
962
964
  /** 再生を止める(ループ中でも停止)。 */
package/dist/index.js CHANGED
@@ -3548,7 +3548,7 @@ var playPlacements = (placements, options) => {
3548
3548
  const seq = createSequencer({
3549
3549
  getTracks: () => seqTracks,
3550
3550
  getBpm: () => bpm,
3551
- getPlayStartStep: () => 0,
3551
+ getPlayStartStep: () => options.startStep ?? 0,
3552
3552
  getDrumPattern: () => drumPattern,
3553
3553
  getSoloTrackId: () => null,
3554
3554
  getLoop: () => options.loop ?? false,
@@ -3594,7 +3594,7 @@ var playPlacements = (placements, options) => {
3594
3594
  if (ctx.state === "suspended") resumes.push(ctx.resume());
3595
3595
  if (resumes.length > 0) await Promise.all(resumes);
3596
3596
  if (!playing) return;
3597
- seq.start(0);
3597
+ seq.start(options.startStep ?? 0);
3598
3598
  })();
3599
3599
  const stop = () => {
3600
3600
  if (!playing) return;
@@ -13242,7 +13242,7 @@ var playSingingMML = async (mml, options = {}) => {
13242
13242
  const seq = createSequencer({
13243
13243
  getTracks: () => seqTracks,
13244
13244
  getBpm: () => bpm,
13245
- getPlayStartStep: () => 0,
13245
+ getPlayStartStep: () => options.startStep ?? 0,
13246
13246
  getDrumPattern: () => drumPattern,
13247
13247
  getSoloTrackId: () => null,
13248
13248
  getLoop: () => options.loop ?? false,
@@ -13253,7 +13253,10 @@ var playSingingMML = async (mml, options = {}) => {
13253
13253
  const namedIdx = TRACK_ID_BY_INDEX2.indexOf(
13254
13254
  e.trackId
13255
13255
  );
13256
- const trackIdx = namedIdx >= 0 ? namedIdx : Number(e.trackId);
13256
+ let trackIdx = namedIdx >= 0 ? namedIdx : Number(e.trackId);
13257
+ if (Number.isNaN(trackIdx) && e.trackId.startsWith("t")) {
13258
+ trackIdx = Number(e.trackId.slice(1));
13259
+ }
13257
13260
  if (lyricTracks.has(trackIdx)) return;
13258
13261
  options.onPlayNote?.(e);
13259
13262
  synth?.playNote(e);
@@ -13340,7 +13343,7 @@ var playSingingMML = async (mml, options = {}) => {
13340
13343
  Object.fromEntries([...customVocalByKey].map(([k, d]) => [k, d.url]))
13341
13344
  );
13342
13345
  }
13343
- const streamTracks = buildStreamTracks(0);
13346
+ const streamTracks = buildStreamTracks(options.startStep ?? 0);
13344
13347
  await voices.loadModels(streamTracks.map((t) => t.model));
13345
13348
  if (!playing || destroyed) {
13346
13349
  return playback;
@@ -13380,14 +13383,14 @@ var playSingingMML = async (mml, options = {}) => {
13380
13383
  loopStartSec = loopStartStep * secondsPerStep;
13381
13384
  loopLengthSec = (loopEndStep - loopStartStep) * secondsPerStep;
13382
13385
  }
13383
- seq.start(0);
13386
+ seq.start(options.startStep ?? 0);
13384
13387
  voices.setVolume(trackVolume / 100 * (masterVolume / 100));
13385
13388
  voices.startStream(streamTracks, seq.getStartTime(), {
13386
13389
  loopLengthSec,
13387
13390
  loopStartSec
13388
13391
  });
13389
13392
  } else {
13390
- seq.start(0);
13393
+ seq.start(options.startStep ?? 0);
13391
13394
  }
13392
13395
  } catch (err2) {
13393
13396
  stop();
package/dist/index.mjs CHANGED
@@ -3425,7 +3425,7 @@ var playPlacements = (placements, options) => {
3425
3425
  const seq = createSequencer({
3426
3426
  getTracks: () => seqTracks,
3427
3427
  getBpm: () => bpm,
3428
- getPlayStartStep: () => 0,
3428
+ getPlayStartStep: () => options.startStep ?? 0,
3429
3429
  getDrumPattern: () => drumPattern,
3430
3430
  getSoloTrackId: () => null,
3431
3431
  getLoop: () => options.loop ?? false,
@@ -3471,7 +3471,7 @@ var playPlacements = (placements, options) => {
3471
3471
  if (ctx.state === "suspended") resumes.push(ctx.resume());
3472
3472
  if (resumes.length > 0) await Promise.all(resumes);
3473
3473
  if (!playing) return;
3474
- seq.start(0);
3474
+ seq.start(options.startStep ?? 0);
3475
3475
  })();
3476
3476
  const stop = () => {
3477
3477
  if (!playing) return;
@@ -13119,7 +13119,7 @@ var playSingingMML = async (mml, options = {}) => {
13119
13119
  const seq = createSequencer({
13120
13120
  getTracks: () => seqTracks,
13121
13121
  getBpm: () => bpm,
13122
- getPlayStartStep: () => 0,
13122
+ getPlayStartStep: () => options.startStep ?? 0,
13123
13123
  getDrumPattern: () => drumPattern,
13124
13124
  getSoloTrackId: () => null,
13125
13125
  getLoop: () => options.loop ?? false,
@@ -13130,7 +13130,10 @@ var playSingingMML = async (mml, options = {}) => {
13130
13130
  const namedIdx = TRACK_ID_BY_INDEX2.indexOf(
13131
13131
  e.trackId
13132
13132
  );
13133
- const trackIdx = namedIdx >= 0 ? namedIdx : Number(e.trackId);
13133
+ let trackIdx = namedIdx >= 0 ? namedIdx : Number(e.trackId);
13134
+ if (Number.isNaN(trackIdx) && e.trackId.startsWith("t")) {
13135
+ trackIdx = Number(e.trackId.slice(1));
13136
+ }
13134
13137
  if (lyricTracks.has(trackIdx)) return;
13135
13138
  options.onPlayNote?.(e);
13136
13139
  synth?.playNote(e);
@@ -13217,7 +13220,7 @@ var playSingingMML = async (mml, options = {}) => {
13217
13220
  Object.fromEntries([...customVocalByKey].map(([k, d]) => [k, d.url]))
13218
13221
  );
13219
13222
  }
13220
- const streamTracks = buildStreamTracks(0);
13223
+ const streamTracks = buildStreamTracks(options.startStep ?? 0);
13221
13224
  await voices.loadModels(streamTracks.map((t) => t.model));
13222
13225
  if (!playing || destroyed) {
13223
13226
  return playback;
@@ -13257,14 +13260,14 @@ var playSingingMML = async (mml, options = {}) => {
13257
13260
  loopStartSec = loopStartStep * secondsPerStep;
13258
13261
  loopLengthSec = (loopEndStep - loopStartStep) * secondsPerStep;
13259
13262
  }
13260
- seq.start(0);
13263
+ seq.start(options.startStep ?? 0);
13261
13264
  voices.setVolume(trackVolume / 100 * (masterVolume / 100));
13262
13265
  voices.startStream(streamTracks, seq.getStartTime(), {
13263
13266
  loopLengthSec,
13264
13267
  loopStartSec
13265
13268
  });
13266
13269
  } else {
13267
- seq.start(0);
13270
+ seq.start(options.startStep ?? 0);
13268
13271
  }
13269
13272
  } catch (err2) {
13270
13273
  stop();
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.71",
5
+ "version": "0.1.73",
6
6
  "description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
7
7
  "homepage": "https://onjmin.github.io/dtm",
8
8
  "repository": {