@onjmin/dtm 0.1.72 → 0.1.74

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
@@ -271,7 +271,7 @@ async function buildNameToKeyMapping() {
271
271
  }
272
272
  var GM_INSTRUMENT_NAMES = FONT_NAME_SURIKOV.trim().split("\n").map((line) => line.slice(line.indexOf(" ") + 1));
273
273
 
274
- // node_modules/.pnpm/@onjmin+chord-parser@1.0.2/node_modules/@onjmin/chord-parser/dist/index.mjs
274
+ // node_modules/.pnpm/@onjmin+chord-parser@1.0.4/node_modules/@onjmin/chord-parser/dist/index.mjs
275
275
  var SHARP_NAMES = [
276
276
  "C",
277
277
  "C#",
@@ -480,8 +480,11 @@ var parsePitch = (input, output) => {
480
480
  const pitch = pitchMatcher.parse(input);
481
481
  if (pitch === null) err(input, "Not found pitch");
482
482
  output.pitch = pitch;
483
- const half = parseHalf(input, true);
484
- if (half !== null) output.pitch += half;
483
+ for (let i = 0; i < 2; i++) {
484
+ const half = parseHalf(input, true);
485
+ if (half === null) break;
486
+ output.pitch += half;
487
+ }
485
488
  return parseBase(input, output);
486
489
  };
487
490
  var MAJOR = [0, 4, 7];
@@ -3548,7 +3551,7 @@ var playPlacements = (placements, options) => {
3548
3551
  const seq = createSequencer({
3549
3552
  getTracks: () => seqTracks,
3550
3553
  getBpm: () => bpm,
3551
- getPlayStartStep: () => 0,
3554
+ getPlayStartStep: () => options.startStep ?? 0,
3552
3555
  getDrumPattern: () => drumPattern,
3553
3556
  getSoloTrackId: () => null,
3554
3557
  getLoop: () => options.loop ?? false,
@@ -3594,7 +3597,7 @@ var playPlacements = (placements, options) => {
3594
3597
  if (ctx.state === "suspended") resumes.push(ctx.resume());
3595
3598
  if (resumes.length > 0) await Promise.all(resumes);
3596
3599
  if (!playing) return;
3597
- seq.start(0);
3600
+ seq.start(options.startStep ?? 0);
3598
3601
  })();
3599
3602
  const stop = () => {
3600
3603
  if (!playing) return;
@@ -6981,7 +6984,7 @@ var parseToneMeta = (chords) => {
6981
6984
  return m ? m[1].toLowerCase() : null;
6982
6985
  };
6983
6986
  var parseMetronomeMeta = (chords) => {
6984
- return /^#\s*metronome(?:\s*=\s*on)?\s*$/im.test(chords);
6987
+ return !/^#\s*metronome\s*=\s*off\s*$/im.test(chords);
6985
6988
  };
6986
6989
  var _nameToKeyCache = null;
6987
6990
  var getNameToKey = async () => {
@@ -13242,7 +13245,7 @@ var playSingingMML = async (mml, options = {}) => {
13242
13245
  const seq = createSequencer({
13243
13246
  getTracks: () => seqTracks,
13244
13247
  getBpm: () => bpm,
13245
- getPlayStartStep: () => 0,
13248
+ getPlayStartStep: () => options.startStep ?? 0,
13246
13249
  getDrumPattern: () => drumPattern,
13247
13250
  getSoloTrackId: () => null,
13248
13251
  getLoop: () => options.loop ?? false,
@@ -13343,7 +13346,7 @@ var playSingingMML = async (mml, options = {}) => {
13343
13346
  Object.fromEntries([...customVocalByKey].map(([k, d]) => [k, d.url]))
13344
13347
  );
13345
13348
  }
13346
- const streamTracks = buildStreamTracks(0);
13349
+ const streamTracks = buildStreamTracks(options.startStep ?? 0);
13347
13350
  await voices.loadModels(streamTracks.map((t) => t.model));
13348
13351
  if (!playing || destroyed) {
13349
13352
  return playback;
@@ -13383,14 +13386,14 @@ var playSingingMML = async (mml, options = {}) => {
13383
13386
  loopStartSec = loopStartStep * secondsPerStep;
13384
13387
  loopLengthSec = (loopEndStep - loopStartStep) * secondsPerStep;
13385
13388
  }
13386
- seq.start(0);
13389
+ seq.start(options.startStep ?? 0);
13387
13390
  voices.setVolume(trackVolume / 100 * (masterVolume / 100));
13388
13391
  voices.startStream(streamTracks, seq.getStartTime(), {
13389
13392
  loopLengthSec,
13390
13393
  loopStartSec
13391
13394
  });
13392
13395
  } else {
13393
- seq.start(0);
13396
+ seq.start(options.startStep ?? 0);
13394
13397
  }
13395
13398
  } catch (err2) {
13396
13399
  stop();
package/dist/index.mjs CHANGED
@@ -148,7 +148,7 @@ async function buildNameToKeyMapping() {
148
148
  }
149
149
  var GM_INSTRUMENT_NAMES = FONT_NAME_SURIKOV.trim().split("\n").map((line) => line.slice(line.indexOf(" ") + 1));
150
150
 
151
- // node_modules/.pnpm/@onjmin+chord-parser@1.0.2/node_modules/@onjmin/chord-parser/dist/index.mjs
151
+ // node_modules/.pnpm/@onjmin+chord-parser@1.0.4/node_modules/@onjmin/chord-parser/dist/index.mjs
152
152
  var SHARP_NAMES = [
153
153
  "C",
154
154
  "C#",
@@ -357,8 +357,11 @@ var parsePitch = (input, output) => {
357
357
  const pitch = pitchMatcher.parse(input);
358
358
  if (pitch === null) err(input, "Not found pitch");
359
359
  output.pitch = pitch;
360
- const half = parseHalf(input, true);
361
- if (half !== null) output.pitch += half;
360
+ for (let i = 0; i < 2; i++) {
361
+ const half = parseHalf(input, true);
362
+ if (half === null) break;
363
+ output.pitch += half;
364
+ }
362
365
  return parseBase(input, output);
363
366
  };
364
367
  var MAJOR = [0, 4, 7];
@@ -3425,7 +3428,7 @@ var playPlacements = (placements, options) => {
3425
3428
  const seq = createSequencer({
3426
3429
  getTracks: () => seqTracks,
3427
3430
  getBpm: () => bpm,
3428
- getPlayStartStep: () => 0,
3431
+ getPlayStartStep: () => options.startStep ?? 0,
3429
3432
  getDrumPattern: () => drumPattern,
3430
3433
  getSoloTrackId: () => null,
3431
3434
  getLoop: () => options.loop ?? false,
@@ -3471,7 +3474,7 @@ var playPlacements = (placements, options) => {
3471
3474
  if (ctx.state === "suspended") resumes.push(ctx.resume());
3472
3475
  if (resumes.length > 0) await Promise.all(resumes);
3473
3476
  if (!playing) return;
3474
- seq.start(0);
3477
+ seq.start(options.startStep ?? 0);
3475
3478
  })();
3476
3479
  const stop = () => {
3477
3480
  if (!playing) return;
@@ -6858,7 +6861,7 @@ var parseToneMeta = (chords) => {
6858
6861
  return m ? m[1].toLowerCase() : null;
6859
6862
  };
6860
6863
  var parseMetronomeMeta = (chords) => {
6861
- return /^#\s*metronome(?:\s*=\s*on)?\s*$/im.test(chords);
6864
+ return !/^#\s*metronome\s*=\s*off\s*$/im.test(chords);
6862
6865
  };
6863
6866
  var _nameToKeyCache = null;
6864
6867
  var getNameToKey = async () => {
@@ -13119,7 +13122,7 @@ var playSingingMML = async (mml, options = {}) => {
13119
13122
  const seq = createSequencer({
13120
13123
  getTracks: () => seqTracks,
13121
13124
  getBpm: () => bpm,
13122
- getPlayStartStep: () => 0,
13125
+ getPlayStartStep: () => options.startStep ?? 0,
13123
13126
  getDrumPattern: () => drumPattern,
13124
13127
  getSoloTrackId: () => null,
13125
13128
  getLoop: () => options.loop ?? false,
@@ -13220,7 +13223,7 @@ var playSingingMML = async (mml, options = {}) => {
13220
13223
  Object.fromEntries([...customVocalByKey].map(([k, d]) => [k, d.url]))
13221
13224
  );
13222
13225
  }
13223
- const streamTracks = buildStreamTracks(0);
13226
+ const streamTracks = buildStreamTracks(options.startStep ?? 0);
13224
13227
  await voices.loadModels(streamTracks.map((t) => t.model));
13225
13228
  if (!playing || destroyed) {
13226
13229
  return playback;
@@ -13260,14 +13263,14 @@ var playSingingMML = async (mml, options = {}) => {
13260
13263
  loopStartSec = loopStartStep * secondsPerStep;
13261
13264
  loopLengthSec = (loopEndStep - loopStartStep) * secondsPerStep;
13262
13265
  }
13263
- seq.start(0);
13266
+ seq.start(options.startStep ?? 0);
13264
13267
  voices.setVolume(trackVolume / 100 * (masterVolume / 100));
13265
13268
  voices.startStream(streamTracks, seq.getStartTime(), {
13266
13269
  loopLengthSec,
13267
13270
  loopStartSec
13268
13271
  });
13269
13272
  } else {
13270
- seq.start(0);
13273
+ seq.start(options.startStep ?? 0);
13271
13274
  }
13272
13275
  } catch (err2) {
13273
13276
  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.72",
5
+ "version": "0.1.74",
6
6
  "description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
7
7
  "homepage": "https://onjmin.github.io/dtm",
8
8
  "repository": {
@@ -54,7 +54,7 @@
54
54
  "typescript": "5.8.3"
55
55
  },
56
56
  "dependencies": {
57
- "@onjmin/chord-parser": "1.0.2",
57
+ "@onjmin/chord-parser": "1.0.4",
58
58
  "@onjmin/koe": "1.0.4",
59
59
  "midi-json-parser": "8.1.74"
60
60
  },