@onjmin/dtm 0.1.13 → 0.1.14

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
@@ -861,8 +861,13 @@ declare const getMidiBPM: (midi: unknown) => number;
861
861
  */
862
862
  declare const extractMidiPlacements: (midi: unknown, selectedTrackIndices: number[]) => MidiExtraction;
863
863
  /**
864
- * 上級者モード用:MIDIトラックインデックス N DAW トラック trackIds[N] へ直接マッピング。
865
- * 自動分類なし。選択された MIDI トラック K のノートは DAW トラック K に入る。
864
+ * advancedモード用:選択された MIDI トラックを選択順に DAW トラックへ上から詰める
865
+ * (k番目に選んだトラック trackIds[k])。自動分類なし。
866
+ *
867
+ * MIDIの実トラック番号ではなく「選択順の位置」で割り当てるため、先頭のテンポ/コンダクタ
868
+ * トラックや、空・ドラムだけのトラックが混ざっていても DAW レーンがずれない
869
+ * (これらは選択リストに出ない/選ばれないので位置を消費しない)。
870
+ * ドラム(ch10 = channel 9)のノートはスキップする。
866
871
  */
867
872
  declare const extractMidiPlacementsByTrack: (midi: unknown, selectedIndices: number[], trackIds: string[]) => MidiExtraction;
868
873
  type ExportMidiOptions = {
package/dist/index.d.ts CHANGED
@@ -861,8 +861,13 @@ declare const getMidiBPM: (midi: unknown) => number;
861
861
  */
862
862
  declare const extractMidiPlacements: (midi: unknown, selectedTrackIndices: number[]) => MidiExtraction;
863
863
  /**
864
- * 上級者モード用:MIDIトラックインデックス N DAW トラック trackIds[N] へ直接マッピング。
865
- * 自動分類なし。選択された MIDI トラック K のノートは DAW トラック K に入る。
864
+ * advancedモード用:選択された MIDI トラックを選択順に DAW トラックへ上から詰める
865
+ * (k番目に選んだトラック trackIds[k])。自動分類なし。
866
+ *
867
+ * MIDIの実トラック番号ではなく「選択順の位置」で割り当てるため、先頭のテンポ/コンダクタ
868
+ * トラックや、空・ドラムだけのトラックが混ざっていても DAW レーンがずれない
869
+ * (これらは選択リストに出ない/選ばれないので位置を消費しない)。
870
+ * ドラム(ch10 = channel 9)のノートはスキップする。
866
871
  */
867
872
  declare const extractMidiPlacementsByTrack: (midi: unknown, selectedIndices: number[], trackIds: string[]) => MidiExtraction;
868
873
  type ExportMidiOptions = {
package/dist/index.js CHANGED
@@ -3077,13 +3077,11 @@ var extractMidiPlacementsByTrack = (midi, selectedIndices, trackIds) => {
3077
3077
  const bpm = getMidiBPM(midi);
3078
3078
  const ticksPerStep = ticksPerBeat / STEPS_PER_BEAT;
3079
3079
  const placements = [];
3080
- const selectedSet = new Set(selectedIndices);
3081
- for (let midiIdx = 0; midiIdx < track.length; midiIdx++) {
3082
- if (!selectedSet.has(midiIdx)) continue;
3083
- if (midiIdx >= trackIds.length) continue;
3084
- const trackId = trackIds[midiIdx];
3080
+ selectedIndices.forEach((midiIdx, lane) => {
3081
+ if (lane >= trackIds.length) return;
3085
3082
  const trackData = track[midiIdx];
3086
- if (!trackData) continue;
3083
+ if (!trackData) return;
3084
+ const trackId = trackIds[lane];
3087
3085
  const active = [];
3088
3086
  let currentTime = 0;
3089
3087
  for (const event of trackData.event) {
@@ -3118,7 +3116,7 @@ var extractMidiPlacementsByTrack = (midi, selectedIndices, trackIds) => {
3118
3116
  velocity: note.velocity
3119
3117
  });
3120
3118
  }
3121
- }
3119
+ });
3122
3120
  return { placements, bpm };
3123
3121
  };
3124
3122
  var to2byte = (n) => [(n & 65280) >> 8, n & 255];
@@ -3159,6 +3157,7 @@ var exportMIDI = (options) => {
3159
3157
  const midiTracks = [];
3160
3158
  tracks.forEach((track, ch) => {
3161
3159
  if (track.notes.length === 0) return;
3160
+ const channel = ch < 9 ? ch : ch + 1 & 15;
3162
3161
  const events = [];
3163
3162
  for (const n of track.notes) {
3164
3163
  const startTick = Math.round(n.startStep * tickPerStep);
@@ -3168,8 +3167,8 @@ var exportMIDI = (options) => {
3168
3167
  const vel = Math.round(
3169
3168
  (n.velocity ?? DEFAULT_VELOCITY) * (track.volume ?? 100) / 100
3170
3169
  );
3171
- events.push({ t: startTick, m: [144 | ch & 15, n.pitch, vel] });
3172
- events.push({ t: endTick, m: [144 | ch & 15, n.pitch, 0] });
3170
+ events.push({ t: startTick, m: [144 | channel, n.pitch, vel] });
3171
+ events.push({ t: endTick, m: [144 | channel, n.pitch, 0] });
3173
3172
  }
3174
3173
  events.sort((a, b) => a.t - b.t);
3175
3174
  midiTracks.push(events);
package/dist/index.mjs CHANGED
@@ -2972,13 +2972,11 @@ var extractMidiPlacementsByTrack = (midi, selectedIndices, trackIds) => {
2972
2972
  const bpm = getMidiBPM(midi);
2973
2973
  const ticksPerStep = ticksPerBeat / STEPS_PER_BEAT;
2974
2974
  const placements = [];
2975
- const selectedSet = new Set(selectedIndices);
2976
- for (let midiIdx = 0; midiIdx < track.length; midiIdx++) {
2977
- if (!selectedSet.has(midiIdx)) continue;
2978
- if (midiIdx >= trackIds.length) continue;
2979
- const trackId = trackIds[midiIdx];
2975
+ selectedIndices.forEach((midiIdx, lane) => {
2976
+ if (lane >= trackIds.length) return;
2980
2977
  const trackData = track[midiIdx];
2981
- if (!trackData) continue;
2978
+ if (!trackData) return;
2979
+ const trackId = trackIds[lane];
2982
2980
  const active = [];
2983
2981
  let currentTime = 0;
2984
2982
  for (const event of trackData.event) {
@@ -3013,7 +3011,7 @@ var extractMidiPlacementsByTrack = (midi, selectedIndices, trackIds) => {
3013
3011
  velocity: note.velocity
3014
3012
  });
3015
3013
  }
3016
- }
3014
+ });
3017
3015
  return { placements, bpm };
3018
3016
  };
3019
3017
  var to2byte = (n) => [(n & 65280) >> 8, n & 255];
@@ -3054,6 +3052,7 @@ var exportMIDI = (options) => {
3054
3052
  const midiTracks = [];
3055
3053
  tracks.forEach((track, ch) => {
3056
3054
  if (track.notes.length === 0) return;
3055
+ const channel = ch < 9 ? ch : ch + 1 & 15;
3057
3056
  const events = [];
3058
3057
  for (const n of track.notes) {
3059
3058
  const startTick = Math.round(n.startStep * tickPerStep);
@@ -3063,8 +3062,8 @@ var exportMIDI = (options) => {
3063
3062
  const vel = Math.round(
3064
3063
  (n.velocity ?? DEFAULT_VELOCITY) * (track.volume ?? 100) / 100
3065
3064
  );
3066
- events.push({ t: startTick, m: [144 | ch & 15, n.pitch, vel] });
3067
- events.push({ t: endTick, m: [144 | ch & 15, n.pitch, 0] });
3065
+ events.push({ t: startTick, m: [144 | channel, n.pitch, vel] });
3066
+ events.push({ t: endTick, m: [144 | channel, n.pitch, 0] });
3068
3067
  }
3069
3068
  events.sort((a, b) => a.t - b.t);
3070
3069
  midiTracks.push(events);
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.13",
5
+ "version": "0.1.14",
6
6
  "description": "MMLを中間言語に用いた、モバイルファーストなDAW / ピアノロール打ち込みコンポーネント",
7
7
  "homepage": "https://onjmin.github.io/dtm",
8
8
  "repository": {