@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 +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +13 -10
- package/dist/index.mjs +13 -10
- package/package.json +2 -2
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.
|
|
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
|
-
|
|
484
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
361
|
-
|
|
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
|
|
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.
|
|
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.
|
|
57
|
+
"@onjmin/chord-parser": "1.0.4",
|
|
58
58
|
"@onjmin/koe": "1.0.4",
|
|
59
59
|
"midi-json-parser": "8.1.74"
|
|
60
60
|
},
|