@onjmin/dtm 0.1.70 → 0.1.72

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
@@ -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);
@@ -14222,7 +14225,7 @@ var createDtmStudio = async (options = {}) => {
14222
14225
  }
14223
14226
  }
14224
14227
  const playNote4 = (e) => {
14225
- const trackIdx = tracks.findIndex((t) => t.id === e.trackId);
14228
+ const { trackIdx, role } = resolveTrackIdxAndRole(e.trackId);
14226
14229
  const overrideKey = trackIdx >= 0 ? trackInstOverrides.get(trackIdx) : void 0;
14227
14230
  let sfInst;
14228
14231
  if (overrideKey) {
@@ -14230,7 +14233,7 @@ var createDtmStudio = async (options = {}) => {
14230
14233
  } else {
14231
14234
  sfInst = resolveSoundFont(
14232
14235
  editorPreset,
14233
- e.trackId,
14236
+ role,
14234
14237
  isAdvancedMode ? "advanced" : "simple"
14235
14238
  );
14236
14239
  }
@@ -14566,33 +14569,50 @@ var createDtmStudio = async (options = {}) => {
14566
14569
  });
14567
14570
  };
14568
14571
  const playSingingMMLInstance = (mml, opts = {}) => {
14569
- const { placements } = parseMML(mml);
14570
- const trackIndices = [...new Set(placements.map((p) => p.trackIndex))].sort(
14571
- (a, b) => a - b
14572
- );
14573
- const isAdvancedMode = trackIndices.some((idx) => idx >= 4);
14574
- const playerPreset = defaultPreset;
14575
- void loadPreset(
14576
- playerPreset,
14577
- trackIndices.map(String),
14578
- isAdvancedMode ? "advanced" : "simple"
14572
+ const parsed = parseMML(mml, {});
14573
+ const meta = parsed.meta ?? {};
14574
+ const playerPreset = meta.instrument && INSTRUMENT_PRESETS[meta.instrument] ? meta.instrument : defaultPreset;
14575
+ const isAdvancedMode = meta.mode === "advanced" || parsed.placements.some((p) => p.trackIndex >= 4);
14576
+ const trackIndices = [
14577
+ ...new Set(parsed.placements.map((p) => p.trackIndex))
14578
+ ];
14579
+ const trackIds = trackIndices.map(
14580
+ (idx) => getRoleForTrackIndex(idx, isAdvancedMode ? "advanced" : "simple")
14579
14581
  );
14580
- const playPlayerNote = (e) => {
14581
- const { role } = resolveTrackIdxAndRole(e.trackId);
14582
- let sfInst = resolveSoundFont(
14582
+ const loadTrackIds = trackIds.length > 0 ? trackIds : [...TRACK_ROLES];
14583
+ const playerTrackInstKeys = /* @__PURE__ */ new Map();
14584
+ const loadPlayerTrackInstruments = async () => {
14585
+ if (!meta.trackInstruments) return;
14586
+ await listReady;
14587
+ for (const [idxStr, name] of Object.entries(meta.trackInstruments)) {
14588
+ const key = resolveNameToKey(name);
14589
+ if (!key) continue;
14590
+ playerTrackInstKeys.set(Number(idxStr), key);
14591
+ await loadInstrument(key);
14592
+ }
14593
+ };
14594
+ void Promise.all([
14595
+ loadPreset(
14583
14596
  playerPreset,
14584
- role,
14597
+ loadTrackIds,
14585
14598
  isAdvancedMode ? "advanced" : "simple"
14586
- );
14587
- if (!sfInst) {
14588
- void loadPreset(
14589
- playerPreset,
14590
- [role],
14599
+ ),
14600
+ loadPlayerTrackInstruments()
14601
+ ]);
14602
+ const playPlayerNote = (e) => {
14603
+ const { trackIdx, role } = resolveTrackIdxAndRole(e.trackId);
14604
+ const overrideKey = playerTrackInstKeys.get(trackIdx);
14605
+ let sfInst;
14606
+ if (overrideKey) {
14607
+ sfInst = soundFonts.get(overrideKey);
14608
+ } else {
14609
+ const roleFromIdx = getRoleForTrackIndex(
14610
+ trackIdx,
14591
14611
  isAdvancedMode ? "advanced" : "simple"
14592
14612
  );
14593
14613
  sfInst = resolveSoundFont(
14594
14614
  playerPreset,
14595
- role,
14615
+ roleFromIdx,
14596
14616
  isAdvancedMode ? "advanced" : "simple"
14597
14617
  );
14598
14618
  }
package/dist/index.mjs CHANGED
@@ -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);
@@ -14098,7 +14101,7 @@ var createDtmStudio = async (options = {}) => {
14098
14101
  }
14099
14102
  }
14100
14103
  const playNote4 = (e) => {
14101
- const trackIdx = tracks.findIndex((t) => t.id === e.trackId);
14104
+ const { trackIdx, role } = resolveTrackIdxAndRole(e.trackId);
14102
14105
  const overrideKey = trackIdx >= 0 ? trackInstOverrides.get(trackIdx) : void 0;
14103
14106
  let sfInst;
14104
14107
  if (overrideKey) {
@@ -14106,7 +14109,7 @@ var createDtmStudio = async (options = {}) => {
14106
14109
  } else {
14107
14110
  sfInst = resolveSoundFont(
14108
14111
  editorPreset,
14109
- e.trackId,
14112
+ role,
14110
14113
  isAdvancedMode ? "advanced" : "simple"
14111
14114
  );
14112
14115
  }
@@ -14442,33 +14445,50 @@ var createDtmStudio = async (options = {}) => {
14442
14445
  });
14443
14446
  };
14444
14447
  const playSingingMMLInstance = (mml, opts = {}) => {
14445
- const { placements } = parseMML(mml);
14446
- const trackIndices = [...new Set(placements.map((p) => p.trackIndex))].sort(
14447
- (a, b) => a - b
14448
- );
14449
- const isAdvancedMode = trackIndices.some((idx) => idx >= 4);
14450
- const playerPreset = defaultPreset;
14451
- void loadPreset(
14452
- playerPreset,
14453
- trackIndices.map(String),
14454
- isAdvancedMode ? "advanced" : "simple"
14448
+ const parsed = parseMML(mml, {});
14449
+ const meta = parsed.meta ?? {};
14450
+ const playerPreset = meta.instrument && INSTRUMENT_PRESETS[meta.instrument] ? meta.instrument : defaultPreset;
14451
+ const isAdvancedMode = meta.mode === "advanced" || parsed.placements.some((p) => p.trackIndex >= 4);
14452
+ const trackIndices = [
14453
+ ...new Set(parsed.placements.map((p) => p.trackIndex))
14454
+ ];
14455
+ const trackIds = trackIndices.map(
14456
+ (idx) => getRoleForTrackIndex(idx, isAdvancedMode ? "advanced" : "simple")
14455
14457
  );
14456
- const playPlayerNote = (e) => {
14457
- const { role } = resolveTrackIdxAndRole(e.trackId);
14458
- let sfInst = resolveSoundFont(
14458
+ const loadTrackIds = trackIds.length > 0 ? trackIds : [...TRACK_ROLES];
14459
+ const playerTrackInstKeys = /* @__PURE__ */ new Map();
14460
+ const loadPlayerTrackInstruments = async () => {
14461
+ if (!meta.trackInstruments) return;
14462
+ await listReady;
14463
+ for (const [idxStr, name] of Object.entries(meta.trackInstruments)) {
14464
+ const key = resolveNameToKey(name);
14465
+ if (!key) continue;
14466
+ playerTrackInstKeys.set(Number(idxStr), key);
14467
+ await loadInstrument(key);
14468
+ }
14469
+ };
14470
+ void Promise.all([
14471
+ loadPreset(
14459
14472
  playerPreset,
14460
- role,
14473
+ loadTrackIds,
14461
14474
  isAdvancedMode ? "advanced" : "simple"
14462
- );
14463
- if (!sfInst) {
14464
- void loadPreset(
14465
- playerPreset,
14466
- [role],
14475
+ ),
14476
+ loadPlayerTrackInstruments()
14477
+ ]);
14478
+ const playPlayerNote = (e) => {
14479
+ const { trackIdx, role } = resolveTrackIdxAndRole(e.trackId);
14480
+ const overrideKey = playerTrackInstKeys.get(trackIdx);
14481
+ let sfInst;
14482
+ if (overrideKey) {
14483
+ sfInst = soundFonts.get(overrideKey);
14484
+ } else {
14485
+ const roleFromIdx = getRoleForTrackIndex(
14486
+ trackIdx,
14467
14487
  isAdvancedMode ? "advanced" : "simple"
14468
14488
  );
14469
14489
  sfInst = resolveSoundFont(
14470
14490
  playerPreset,
14471
- role,
14491
+ roleFromIdx,
14472
14492
  isAdvancedMode ? "advanced" : "simple"
14473
14493
  );
14474
14494
  }
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.70",
5
+ "version": "0.1.72",
6
6
  "description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
7
7
  "homepage": "https://onjmin.github.io/dtm",
8
8
  "repository": {