@onjmin/dtm 0.1.82 → 0.1.83

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.mjs CHANGED
@@ -1138,128 +1138,201 @@ var CHORD_INFO_HTML = `
1138
1138
  // src/drum-config.ts
1139
1139
  var DRUM_FONT = "FluidR3_GM_sf2_file";
1140
1140
  var DRUM_KEYS = {
1141
- kick: 36,
1142
- snare: 38,
1143
- clap: 39,
1144
- rimshot: 37,
1145
- hihatClosed: 42,
1146
- hihatPedal: 44,
1147
- hihatOpen: 46,
1148
- tomLow: 45,
1149
- tomMid: 47,
1150
- tomHigh: 50,
1151
- crash: 49,
1152
- ride: 51,
1153
- splash: 55,
1141
+ bassDrum1: 36,
1142
+ acousticSnare: 38,
1143
+ handClap: 39,
1144
+ sideStick: 37,
1145
+ closedHihat: 42,
1146
+ pedalHihat: 44,
1147
+ openHihat: 46,
1148
+ lowTom: 45,
1149
+ lowMidTom: 47,
1150
+ highTom: 50,
1151
+ crashCymbal1: 49,
1152
+ rideCymbal1: 51,
1153
+ splashCymbal: 55,
1154
1154
  tambourine: 54
1155
1155
  };
1156
+ var normalizeDrumPatterns = (patterns) => {
1157
+ const normalized = {};
1158
+ for (const [k, v] of Object.entries(patterns)) {
1159
+ if (Array.isArray(v) || v && Array.isArray(v.pattern) === false && Array.isArray(v)) {
1160
+ normalized[k] = { label: k, pattern: v };
1161
+ } else {
1162
+ normalized[k] = v;
1163
+ }
1164
+ }
1165
+ return normalized;
1166
+ };
1167
+ var resolveDrumPattern = (name, dict, currentBar) => {
1168
+ const def = dict[name];
1169
+ if (!def) return null;
1170
+ const patternObj = def.pattern;
1171
+ if (Array.isArray(patternObj) && patternObj.length > 0 && "ranges" in patternObj[0]) {
1172
+ const songDef = patternObj;
1173
+ const instructions = songDef.filter(
1174
+ (i) => i.ranges.some(([s, e]) => currentBar >= s && currentBar <= e)
1175
+ );
1176
+ if (instructions.length > 0) {
1177
+ return instructions.flatMap((i) => {
1178
+ const maxStep = Math.max(...i.pattern.map((p) => p.step), 0);
1179
+ const loopLengthBars = i.patternBars ?? Math.max(1, Math.ceil((maxStep + 1) / 192));
1180
+ const range = i.ranges.find(
1181
+ ([s, e]) => currentBar >= s && currentBar <= e
1182
+ );
1183
+ const startBar = range ? range[0] : 1;
1184
+ const barInLoop = (currentBar - startBar) % loopLengthBars;
1185
+ const stepOffset = barInLoop * 192;
1186
+ return i.pattern.filter((p) => p.step >= stepOffset && p.step < stepOffset + 192).map((p) => ({ ...p, step: p.step - stepOffset }));
1187
+ });
1188
+ }
1189
+ }
1190
+ return patternObj ?? null;
1191
+ };
1156
1192
  var DRUM_PATTERNS = {
1157
1193
  // 4つ打ち:より重厚に。1拍目の頭にだけ軽くオープンハイハットを混ぜるのもアリ
1158
- "4beat": [
1159
- { step: 0, pitch: DRUM_KEYS.kick, velocity: 1 },
1160
- { step: 48, pitch: DRUM_KEYS.kick, velocity: 0.9 },
1161
- { step: 96, pitch: DRUM_KEYS.kick, velocity: 1 },
1162
- { step: 144, pitch: DRUM_KEYS.kick, velocity: 0.9 }
1163
- ],
1194
+ "4beat": {
1195
+ label: "4\u3064\u6253\u3061",
1196
+ pattern: [
1197
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1198
+ { step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
1199
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1200
+ { step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }
1201
+ ]
1202
+ },
1164
1203
  // 8ビート:クローズドハイハットに強弱をつけ、スネアにクラップを薄く重ねる
1165
- "8beat": [
1166
- { step: 0, pitch: DRUM_KEYS.kick, velocity: 1 },
1167
- { step: 0, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1168
- { step: 24, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 },
1169
- { step: 48, pitch: DRUM_KEYS.snare, velocity: 1 },
1170
- { step: 48, pitch: DRUM_KEYS.clap, velocity: 0.6 },
1171
- { step: 48, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1172
- { step: 72, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 },
1173
- { step: 96, pitch: DRUM_KEYS.kick, velocity: 0.9 },
1174
- { step: 96, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1175
- { step: 120, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 },
1176
- { step: 144, pitch: DRUM_KEYS.snare, velocity: 1 },
1177
- { step: 144, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1178
- { step: 168, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 }
1179
- ],
1204
+ "8beat": {
1205
+ label: "8\u30D3\u30FC\u30C8",
1206
+ pattern: [
1207
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1208
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1209
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 },
1210
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1211
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.6 },
1212
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1213
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 },
1214
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
1215
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1216
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 },
1217
+ { step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1218
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1219
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 }
1220
+ ]
1221
+ },
1180
1222
  // 16ビート:キックのダブル(96, 108)を活かしつつ、ハイハットの強弱を細かく設定
1181
- "16beat": [
1182
- { step: 0, pitch: DRUM_KEYS.kick, velocity: 1 },
1183
- { step: 0, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1184
- { step: 12, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1185
- { step: 24, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1186
- { step: 36, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1187
- { step: 48, pitch: DRUM_KEYS.snare, velocity: 1 },
1188
- { step: 48, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1189
- { step: 60, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1190
- { step: 72, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1191
- { step: 84, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1192
- { step: 96, pitch: DRUM_KEYS.kick, velocity: 0.9 },
1193
- { step: 96, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1194
- { step: 108, pitch: DRUM_KEYS.kick, velocity: 0.7 },
1195
- { step: 108, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1196
- { step: 120, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1197
- { step: 132, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1198
- { step: 144, pitch: DRUM_KEYS.snare, velocity: 1 },
1199
- { step: 144, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1200
- { step: 156, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1201
- { step: 168, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1202
- { step: 180, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 }
1203
- ],
1223
+ "16beat": {
1224
+ label: "16\u30D3\u30FC\u30C8",
1225
+ pattern: [
1226
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1227
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1228
+ { step: 12, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1229
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1230
+ { step: 36, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1231
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1232
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1233
+ { step: 60, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1234
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1235
+ { step: 84, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1236
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
1237
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1238
+ { step: 108, pitch: DRUM_KEYS.bassDrum1, velocity: 0.7 },
1239
+ { step: 108, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1240
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1241
+ { step: 132, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1242
+ { step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1243
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1244
+ { step: 156, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1245
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1246
+ { step: 180, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 }
1247
+ ]
1248
+ },
1204
1249
  // シャッフル:跳ねるタイミングのベロシティを落として、グルーヴ感を強調
1205
- shuffle: [
1206
- { step: 0, pitch: DRUM_KEYS.kick, velocity: 1 },
1207
- { step: 0, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1208
- { step: 32, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 },
1209
- { step: 48, pitch: DRUM_KEYS.snare, velocity: 1 },
1210
- { step: 48, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1211
- { step: 80, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 },
1212
- { step: 96, pitch: DRUM_KEYS.kick, velocity: 0.9 },
1213
- { step: 96, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1214
- { step: 128, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 },
1215
- { step: 144, pitch: DRUM_KEYS.snare, velocity: 1 },
1216
- { step: 144, pitch: DRUM_KEYS.hihatClosed, velocity: 0.8 },
1217
- { step: 176, pitch: DRUM_KEYS.hihatClosed, velocity: 0.5 }
1218
- ],
1250
+ shuffle: {
1251
+ label: "\u30B7\u30E3\u30C3\u30D5\u30EB",
1252
+ pattern: [
1253
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1254
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1255
+ { step: 32, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 },
1256
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1257
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1258
+ { step: 80, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 },
1259
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
1260
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1261
+ { step: 128, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 },
1262
+ { step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1263
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
1264
+ { step: 176, pitch: DRUM_KEYS.closedHihat, velocity: 0.5 }
1265
+ ]
1266
+ },
1219
1267
  // ダンス/EDM:スネアをClapに変更。キックとハイハットの対比を最大化
1220
- dance: [
1221
- { step: 0, pitch: DRUM_KEYS.kick, velocity: 1 },
1222
- { step: 24, pitch: DRUM_KEYS.hihatOpen, velocity: 0.7 },
1223
- { step: 48, pitch: DRUM_KEYS.kick, velocity: 1 },
1224
- { step: 48, pitch: DRUM_KEYS.clap, velocity: 1 },
1225
- { step: 72, pitch: DRUM_KEYS.hihatOpen, velocity: 0.7 },
1226
- { step: 96, pitch: DRUM_KEYS.kick, velocity: 1 },
1227
- { step: 120, pitch: DRUM_KEYS.hihatOpen, velocity: 0.7 },
1228
- { step: 144, pitch: DRUM_KEYS.kick, velocity: 1 },
1229
- { step: 144, pitch: DRUM_KEYS.clap, velocity: 1 },
1230
- { step: 168, pitch: DRUM_KEYS.hihatOpen, velocity: 0.7 }
1231
- ],
1268
+ dance: {
1269
+ label: "\u30C0\u30F3\u30B9/EDM",
1270
+ pattern: [
1271
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1272
+ { step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.7 },
1273
+ { step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1274
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 1 },
1275
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.7 },
1276
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1277
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.7 },
1278
+ { step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1279
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 1 },
1280
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.7 }
1281
+ ]
1282
+ },
1232
1283
  // ボサノバ/チル系:リムショット(37)とハイハットの組み合わせ
1233
- bossa: [
1234
- { step: 0, pitch: DRUM_KEYS.kick, velocity: 0.9 },
1235
- { step: 0, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1236
- { step: 24, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1237
- { step: 48, pitch: DRUM_KEYS.rimshot, velocity: 0.8 },
1238
- { step: 48, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1239
- { step: 72, pitch: DRUM_KEYS.kick, velocity: 0.7 },
1240
- { step: 72, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1241
- { step: 96, pitch: DRUM_KEYS.kick, velocity: 0.9 },
1242
- { step: 96, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1243
- { step: 120, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 },
1244
- { step: 144, pitch: DRUM_KEYS.rimshot, velocity: 0.8 },
1245
- { step: 144, pitch: DRUM_KEYS.hihatClosed, velocity: 0.6 },
1246
- { step: 168, pitch: DRUM_KEYS.hihatClosed, velocity: 0.4 }
1247
- ],
1284
+ bossa: {
1285
+ label: "\u30DC\u30B5\u30CE\u30D0/\u30C1\u30EB",
1286
+ pattern: [
1287
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
1288
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1289
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1290
+ { step: 48, pitch: DRUM_KEYS.sideStick, velocity: 0.8 },
1291
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1292
+ { step: 72, pitch: DRUM_KEYS.bassDrum1, velocity: 0.7 },
1293
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1294
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
1295
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1296
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 },
1297
+ { step: 144, pitch: DRUM_KEYS.sideStick, velocity: 0.8 },
1298
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
1299
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.4 }
1300
+ ]
1301
+ },
1248
1302
  // ファンク/ディスコ:タンバリン(54)でスピード感を出す
1249
- disco: [
1250
- { step: 0, pitch: DRUM_KEYS.kick, velocity: 1 },
1251
- { step: 0, pitch: DRUM_KEYS.hihatClosed, velocity: 0.7 },
1252
- { step: 24, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
1253
- { step: 48, pitch: DRUM_KEYS.snare, velocity: 1 },
1254
- { step: 48, pitch: DRUM_KEYS.hihatClosed, velocity: 0.7 },
1255
- { step: 72, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
1256
- { step: 96, pitch: DRUM_KEYS.kick, velocity: 1 },
1257
- { step: 96, pitch: DRUM_KEYS.hihatClosed, velocity: 0.7 },
1258
- { step: 120, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
1259
- { step: 144, pitch: DRUM_KEYS.snare, velocity: 1 },
1260
- { step: 144, pitch: DRUM_KEYS.hihatClosed, velocity: 0.7 },
1261
- { step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
1262
- ]
1303
+ disco: {
1304
+ label: "\u30D5\u30A1\u30F3\u30AF/\u30C7\u30A3\u30B9\u30B3",
1305
+ pattern: [
1306
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1307
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.7 },
1308
+ { step: 24, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
1309
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1310
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.7 },
1311
+ { step: 72, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
1312
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 1 },
1313
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.7 },
1314
+ { step: 120, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
1315
+ { step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
1316
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.7 },
1317
+ { step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
1318
+ ]
1319
+ }
1320
+ };
1321
+ var getDrumPatternKeys = (name, dict) => {
1322
+ const normalizedDict = normalizeDrumPatterns(dict);
1323
+ const def = normalizedDict[name];
1324
+ if (!def) return [];
1325
+ const patternObj = def.pattern;
1326
+ const keys = /* @__PURE__ */ new Set();
1327
+ if (Array.isArray(patternObj) && patternObj.length > 0 && "ranges" in patternObj[0]) {
1328
+ const songDef = patternObj;
1329
+ for (const i of songDef) {
1330
+ for (const p of i.pattern) keys.add(p.pitch);
1331
+ }
1332
+ } else if (Array.isArray(patternObj)) {
1333
+ for (const p of patternObj) keys.add(p.pitch);
1334
+ }
1335
+ return Array.from(keys);
1263
1336
  };
1264
1337
 
1265
1338
  // src/chords.ts
@@ -2769,7 +2842,7 @@ var PITCH_MAP = {
2769
2842
  b: 11
2770
2843
  };
2771
2844
  var clamp2 = (value, lo, hi) => Math.min(hi, Math.max(lo, value));
2772
- var META_DIRECTIVE = /#(inst|drum|volume|drumvolume|mode)=([\w-]+)/gi;
2845
+ var META_DIRECTIVE = /#(inst|drum|drumfont|volume|drumvolume|mode)=([\w-]+)/gi;
2773
2846
  var TRACK_INST_DIRECTIVE = /#t(\d+)inst=([^#;\r\n]+)/gi;
2774
2847
  var parseMmlMeta = (mml) => {
2775
2848
  const meta = {};
@@ -2777,6 +2850,7 @@ var parseMmlMeta = (mml) => {
2777
2850
  const key = m[1].toLowerCase();
2778
2851
  if (key === "inst") meta.instrument = m[2];
2779
2852
  else if (key === "drum") meta.drum = m[2];
2853
+ else if (key === "drumfont") meta.drumFont = m[2];
2780
2854
  else if (key === "volume") {
2781
2855
  const v = Number.parseInt(m[2], 10);
2782
2856
  if (!Number.isNaN(v)) meta.volume = v;
@@ -2804,6 +2878,7 @@ var formatMmlMeta = (meta, space = "") => {
2804
2878
  const parts = [];
2805
2879
  if (meta.instrument) parts.push(`#inst=${meta.instrument}`);
2806
2880
  if (meta.drum) parts.push(`#drum=${meta.drum}`);
2881
+ if (meta.drumFont) parts.push(`#drumfont=${meta.drumFont}`);
2807
2882
  if (meta.volume !== void 0) parts.push(`#volume=${meta.volume}`);
2808
2883
  if (meta.drumVolume !== void 0)
2809
2884
  parts.push(`#drumvolume=${meta.drumVolume}`);
@@ -3188,10 +3263,11 @@ var createSequencer = (options) => {
3188
3263
  duration: ev.duration
3189
3264
  });
3190
3265
  }
3191
- const pattern = options.getDrumPattern();
3266
+ const { stepsPerBar } = options;
3267
+ const currentStep = getWrappedPlayStep(time, sps);
3268
+ const currentBar = Math.floor(currentStep / stepsPerBar) + 1;
3269
+ const pattern = options.getDrumPattern(currentBar);
3192
3270
  if (pattern && pattern.length > 0) {
3193
- const { stepsPerBar } = options;
3194
- const currentStep = getWrappedPlayStep(time, sps);
3195
3271
  const currentStepInBar = currentStep % stepsPerBar;
3196
3272
  const nextStep = currentStepInBar + 4;
3197
3273
  const crossedBar = currentStepInBar < 4;
@@ -3209,10 +3285,10 @@ var createSequencer = (options) => {
3209
3285
  }
3210
3286
  }
3211
3287
  if (time >= 0) {
3212
- const currentStep = getWrappedPlayStep(time, sps);
3288
+ const currentStep2 = getWrappedPlayStep(time, sps);
3213
3289
  if (options.cues && options.cues.length > 0 && options.onCue) {
3214
3290
  const bpm = options.getBpm();
3215
- const stepsPerBar = options.stepsPerBar;
3291
+ const stepsPerBar2 = options.stepsPerBar;
3216
3292
  const isCueCrossed = (cueStep, prevStep, currStep) => {
3217
3293
  if (currStep >= prevStep) {
3218
3294
  return cueStep > prevStep && cueStep <= currStep;
@@ -3223,13 +3299,13 @@ var createSequencer = (options) => {
3223
3299
  }
3224
3300
  };
3225
3301
  for (const cue of options.cues) {
3226
- const cueStep = resolveLoopPoint(cue.time, bpm, stepsPerBar, sps);
3227
- if (isCueCrossed(cueStep, lastPlayStep, currentStep)) {
3302
+ const cueStep = resolveLoopPoint(cue.time, bpm, stepsPerBar2, sps);
3303
+ if (isCueCrossed(cueStep, lastPlayStep, currentStep2)) {
3228
3304
  options.onCue(cue.id);
3229
3305
  }
3230
3306
  }
3231
3307
  }
3232
- lastPlayStep = currentStep;
3308
+ lastPlayStep = currentStep2;
3233
3309
  }
3234
3310
  if (!isLooping) {
3235
3311
  const last = timeline[timeline.length - 1];
@@ -3239,56 +3315,2254 @@ var createSequencer = (options) => {
3239
3315
  stop();
3240
3316
  options.onEnd(false);
3241
3317
  }
3242
- }
3243
- };
3244
- const animate = () => {
3245
- if (!active) return;
3246
- const sps = secondsPerStep();
3247
- const time = options.getAudioTime() - startTime;
3248
- options.onTick(getWrappedPlayStep(time, sps));
3249
- animationId = requestAnimationFrame(animate);
3250
- };
3251
- const stop = () => {
3252
- if (intervalId !== null) {
3253
- clearInterval(intervalId);
3254
- intervalId = null;
3255
- }
3256
- if (animationId !== null) {
3257
- cancelAnimationFrame(animationId);
3258
- animationId = null;
3259
- }
3260
- active = false;
3261
- };
3262
- const START_DELAY = 0.1;
3263
- const start = (fromStep) => {
3264
- stop();
3265
- fromStepValue = fromStep ?? options.getPlayStartStep();
3266
- buildTimeline(fromStepValue);
3267
- if (timeline.length === 0 && !options.getDrumPattern()?.length) return;
3268
- active = true;
3269
- startTime = options.getAudioTime() + START_DELAY;
3270
- const sps = secondsPerStep();
3271
- nowIndex = 0;
3272
- while (nowIndex < timeline.length) {
3273
- const noteStartStep = fromStepValue + timeline[nowIndex].when / sps;
3274
- if (noteStartStep >= fromStepValue - 1e-4) {
3275
- break;
3318
+ }
3319
+ };
3320
+ const animate = () => {
3321
+ if (!active) return;
3322
+ const sps = secondsPerStep();
3323
+ const time = options.getAudioTime() - startTime;
3324
+ options.onTick(getWrappedPlayStep(time, sps));
3325
+ animationId = requestAnimationFrame(animate);
3326
+ };
3327
+ const stop = () => {
3328
+ if (intervalId !== null) {
3329
+ clearInterval(intervalId);
3330
+ intervalId = null;
3331
+ }
3332
+ if (animationId !== null) {
3333
+ cancelAnimationFrame(animationId);
3334
+ animationId = null;
3335
+ }
3336
+ active = false;
3337
+ };
3338
+ const START_DELAY = 0.1;
3339
+ const start = (fromStep) => {
3340
+ stop();
3341
+ fromStepValue = fromStep ?? options.getPlayStartStep();
3342
+ buildTimeline(fromStepValue);
3343
+ if (timeline.length === 0 && !options.getDrumPattern(1)?.length) return;
3344
+ active = true;
3345
+ startTime = options.getAudioTime() + START_DELAY;
3346
+ const sps = secondsPerStep();
3347
+ nowIndex = 0;
3348
+ while (nowIndex < timeline.length) {
3349
+ const noteStartStep = fromStepValue + timeline[nowIndex].when / sps;
3350
+ if (noteStartStep >= fromStepValue - 1e-4) {
3351
+ break;
3352
+ }
3353
+ nowIndex++;
3354
+ }
3355
+ loopBase = 0;
3356
+ lastPlayStep = fromStepValue - 1e-4;
3357
+ lastRealTime = -1;
3358
+ lastAudioTime = -1;
3359
+ intervalId = setInterval(scheduleTick, TICK_INTERVAL_MS);
3360
+ animationId = requestAnimationFrame(animate);
3361
+ };
3362
+ return {
3363
+ start,
3364
+ stop,
3365
+ isActive: () => active,
3366
+ getStartTime: () => startTime
3367
+ };
3368
+ };
3369
+
3370
+ // src/song-drum-config.ts
3371
+ var SONG_DRUM_PATTERNS = {
3372
+ mimizuki: {
3373
+ label: "\u6D77\u9B3C\u6708",
3374
+ font: "Chaos_sf2_file:0",
3375
+ pattern: [
3376
+ {
3377
+ ranges: [
3378
+ [1, 31],
3379
+ [33, 52],
3380
+ [57, 71],
3381
+ [73, 104]
3382
+ ],
3383
+ pattern: [
3384
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.8 },
3385
+ { step: 88, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
3386
+ ]
3387
+ },
3388
+ {
3389
+ ranges: [[1, 52]],
3390
+ pattern: [
3391
+ { step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.8 },
3392
+ { step: 40, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
3393
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3394
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.8 },
3395
+ { step: 136, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
3396
+ { step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 }
3397
+ ]
3398
+ },
3399
+ {
3400
+ ranges: [
3401
+ [1, 7],
3402
+ [9, 52]
3403
+ ],
3404
+ pattern: [
3405
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.8 },
3406
+ { step: 184, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
3407
+ ]
3408
+ },
3409
+ {
3410
+ ranges: [[56, 104]],
3411
+ pattern: [
3412
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.8 },
3413
+ { step: 136, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
3414
+ { step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3415
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.8 },
3416
+ { step: 184, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
3417
+ ]
3418
+ },
3419
+ {
3420
+ ranges: [[57, 104]],
3421
+ pattern: [
3422
+ { step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.8 },
3423
+ { step: 40, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
3424
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 }
3425
+ ]
3426
+ },
3427
+ {
3428
+ ranges: [
3429
+ [1, 1],
3430
+ [5, 5],
3431
+ [9, 9],
3432
+ [13, 13],
3433
+ [17, 17],
3434
+ [21, 21],
3435
+ [25, 25],
3436
+ [29, 29],
3437
+ [32, 33],
3438
+ [37, 37],
3439
+ [41, 41],
3440
+ [45, 45],
3441
+ [49, 49],
3442
+ [53, 53],
3443
+ [57, 57],
3444
+ [61, 61],
3445
+ [65, 65],
3446
+ [69, 69],
3447
+ [72, 73],
3448
+ [77, 77],
3449
+ [81, 81],
3450
+ [85, 85],
3451
+ [89, 89],
3452
+ [93, 93],
3453
+ [97, 97],
3454
+ [101, 101]
3455
+ ],
3456
+ pattern: [{ step: 0, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.8 }]
3457
+ },
3458
+ {
3459
+ ranges: [
3460
+ [32, 32],
3461
+ [72, 72]
3462
+ ],
3463
+ pattern: [
3464
+ { step: 72, pitch: DRUM_KEYS.lowTom, velocity: 0.8 },
3465
+ { step: 84, pitch: 43, velocity: 0.8 },
3466
+ { step: 96, pitch: 41, velocity: 0.8 },
3467
+ { step: 112, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3468
+ { step: 112, pitch: DRUM_KEYS.highTom, velocity: 0.3 },
3469
+ { step: 116, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3470
+ { step: 116, pitch: DRUM_KEYS.highTom, velocity: 0.3 },
3471
+ { step: 120, pitch: DRUM_KEYS.sideStick, velocity: 0.8 },
3472
+ { step: 120, pitch: DRUM_KEYS.highTom, velocity: 0.8 },
3473
+ { step: 136, pitch: DRUM_KEYS.sideStick, velocity: 0.5 },
3474
+ { step: 136, pitch: DRUM_KEYS.highTom, velocity: 0.5 },
3475
+ { step: 144, pitch: DRUM_KEYS.sideStick, velocity: 0.8 },
3476
+ { step: 144, pitch: 48, velocity: 0.8 },
3477
+ { step: 152, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.1 },
3478
+ { step: 160, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3479
+ { step: 160, pitch: 48, velocity: 0.3 },
3480
+ { step: 160, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.3 },
3481
+ { step: 168, pitch: DRUM_KEYS.sideStick, velocity: 0.6 },
3482
+ { step: 168, pitch: DRUM_KEYS.lowMidTom, velocity: 0.8 },
3483
+ { step: 168, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.4 },
3484
+ { step: 176, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3485
+ { step: 176, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.5 },
3486
+ { step: 184, pitch: DRUM_KEYS.sideStick, velocity: 0.5 },
3487
+ { step: 184, pitch: DRUM_KEYS.lowMidTom, velocity: 0.3 },
3488
+ { step: 184, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.7 }
3489
+ ]
3490
+ },
3491
+ {
3492
+ ranges: [
3493
+ [56, 56],
3494
+ [64, 64],
3495
+ [80, 80],
3496
+ [88, 88]
3497
+ ],
3498
+ pattern: [
3499
+ { step: 112, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3500
+ { step: 112, pitch: DRUM_KEYS.highTom, velocity: 0.3 },
3501
+ { step: 116, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3502
+ { step: 116, pitch: DRUM_KEYS.highTom, velocity: 0.3 },
3503
+ { step: 120, pitch: DRUM_KEYS.sideStick, velocity: 0.8 },
3504
+ { step: 120, pitch: DRUM_KEYS.highTom, velocity: 0.8 },
3505
+ { step: 136, pitch: DRUM_KEYS.sideStick, velocity: 0.5 },
3506
+ { step: 136, pitch: DRUM_KEYS.highTom, velocity: 0.5 },
3507
+ { step: 144, pitch: DRUM_KEYS.sideStick, velocity: 0.8 },
3508
+ { step: 144, pitch: 48, velocity: 0.8 },
3509
+ { step: 152, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.1 },
3510
+ { step: 160, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3511
+ { step: 160, pitch: 48, velocity: 0.3 },
3512
+ { step: 160, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.3 },
3513
+ { step: 168, pitch: DRUM_KEYS.sideStick, velocity: 0.6 },
3514
+ { step: 168, pitch: DRUM_KEYS.lowMidTom, velocity: 0.8 },
3515
+ { step: 168, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.4 },
3516
+ { step: 176, pitch: DRUM_KEYS.sideStick, velocity: 0.3 },
3517
+ { step: 176, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.5 },
3518
+ { step: 184, pitch: DRUM_KEYS.sideStick, velocity: 0.5 },
3519
+ { step: 184, pitch: DRUM_KEYS.lowMidTom, velocity: 0.3 },
3520
+ { step: 184, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.7 }
3521
+ ]
3522
+ }
3523
+ ]
3524
+ },
3525
+ budou_ga_kage_kara_nozoiterunda: {
3526
+ label: "\u30D6\u30C9\u30A6\u304C\u304B\u3052\u304B\u3089\u306E\u305E\u3044\u3066\u308B\u3093\u3060",
3527
+ font: "FluidR3_GM_sf2_file:0",
3528
+ pattern: [
3529
+ {
3530
+ ranges: [[1, 91]],
3531
+ pattern: [{ step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 }]
3532
+ },
3533
+ {
3534
+ ranges: [
3535
+ [5, 47],
3536
+ [49, 88]
3537
+ ],
3538
+ pattern: [{ step: 24, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 }]
3539
+ },
3540
+ {
3541
+ ranges: [
3542
+ [13, 47],
3543
+ [57, 88]
3544
+ ],
3545
+ pattern: [
3546
+ { step: 72, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3547
+ { step: 120, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3548
+ { step: 168, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 }
3549
+ ]
3550
+ },
3551
+ {
3552
+ ranges: [[37, 92]],
3553
+ pattern: [
3554
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3555
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 }
3556
+ ]
3557
+ },
3558
+ {
3559
+ ranges: [[37, 91]],
3560
+ pattern: [{ step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 }]
3561
+ },
3562
+ {
3563
+ ranges: [[45, 92]],
3564
+ pattern: [
3565
+ { step: 0, pitch: 53, velocity: 0.8 },
3566
+ { step: 36, pitch: 67, velocity: 0.5 },
3567
+ { step: 72, pitch: 67, velocity: 0.5 }
3568
+ ]
3569
+ },
3570
+ {
3571
+ ranges: [[45, 91]],
3572
+ pattern: [
3573
+ { step: 144, pitch: 68, velocity: 0.5 },
3574
+ { step: 168, pitch: 60, velocity: 0.8 },
3575
+ { step: 168, pitch: 68, velocity: 0.5 },
3576
+ { step: 180, pitch: 68, velocity: 0.5 }
3577
+ ]
3578
+ },
3579
+ {
3580
+ ranges: [[57, 92]],
3581
+ pattern: [
3582
+ { step: 24, pitch: 67, velocity: 0.5 },
3583
+ { step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3584
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3585
+ { step: 48, pitch: 53, velocity: 0.8 },
3586
+ { step: 60, pitch: 68, velocity: 0.5 },
3587
+ { step: 96, pitch: 60, velocity: 0.8 }
3588
+ ]
3589
+ },
3590
+ {
3591
+ ranges: [[57, 91]],
3592
+ pattern: [
3593
+ { step: 120, pitch: 67, velocity: 0.5 },
3594
+ { step: 132, pitch: 60, velocity: 0.8 }
3595
+ ]
3596
+ },
3597
+ {
3598
+ ranges: [[1, 29]],
3599
+ pattern: [{ step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 }]
3600
+ },
3601
+ {
3602
+ ranges: [[1, 28]],
3603
+ pattern: [{ step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 }]
3604
+ },
3605
+ {
3606
+ ranges: [[4, 28]],
3607
+ pattern: [
3608
+ { step: 0, pitch: 53, velocity: 0.8 },
3609
+ { step: 36, pitch: 67, velocity: 0.5 },
3610
+ { step: 72, pitch: 67, velocity: 0.5 },
3611
+ { step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3612
+ { step: 144, pitch: 68, velocity: 0.5 },
3613
+ { step: 168, pitch: 60, velocity: 0.8 },
3614
+ { step: 168, pitch: 68, velocity: 0.5 },
3615
+ { step: 180, pitch: 68, velocity: 0.5 }
3616
+ ]
3617
+ },
3618
+ {
3619
+ ranges: [[13, 28]],
3620
+ pattern: [
3621
+ { step: 24, pitch: 67, velocity: 0.5 },
3622
+ { step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3623
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3624
+ { step: 48, pitch: 53, velocity: 0.8 },
3625
+ { step: 60, pitch: 68, velocity: 0.5 },
3626
+ { step: 96, pitch: 60, velocity: 0.8 },
3627
+ { step: 120, pitch: 67, velocity: 0.5 },
3628
+ { step: 132, pitch: 60, velocity: 0.8 }
3629
+ ]
3630
+ },
3631
+ {
3632
+ ranges: [
3633
+ [5, 11],
3634
+ [49, 55]
3635
+ ],
3636
+ pattern: [
3637
+ { step: 24, pitch: 67, velocity: 0.5 },
3638
+ { step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3639
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3640
+ { step: 48, pitch: 53, velocity: 0.8 },
3641
+ { step: 60, pitch: 68, velocity: 0.5 },
3642
+ { step: 72, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3643
+ { step: 96, pitch: 60, velocity: 0.8 },
3644
+ { step: 120, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3645
+ { step: 120, pitch: 67, velocity: 0.5 },
3646
+ { step: 132, pitch: 60, velocity: 0.8 },
3647
+ { step: 168, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 }
3648
+ ]
3649
+ },
3650
+ {
3651
+ ranges: [[37, 47]],
3652
+ pattern: [
3653
+ { step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3654
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 }
3655
+ ]
3656
+ },
3657
+ {
3658
+ ranges: [[29, 36]],
3659
+ pattern: [
3660
+ { step: 48, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3661
+ { step: 72, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3662
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3663
+ { step: 144, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3664
+ { step: 168, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 }
3665
+ ]
3666
+ },
3667
+ {
3668
+ ranges: [[1, 3]],
3669
+ pattern: [{ step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 }]
3670
+ },
3671
+ {
3672
+ ranges: [[45, 47]],
3673
+ pattern: [
3674
+ { step: 24, pitch: 67, velocity: 0.5 },
3675
+ { step: 48, pitch: 53, velocity: 0.8 },
3676
+ { step: 60, pitch: 68, velocity: 0.5 },
3677
+ { step: 96, pitch: 60, velocity: 0.8 },
3678
+ { step: 120, pitch: 67, velocity: 0.5 },
3679
+ { step: 132, pitch: 60, velocity: 0.8 }
3680
+ ]
3681
+ },
3682
+ {
3683
+ ranges: [
3684
+ [4, 4],
3685
+ [48, 48]
3686
+ ],
3687
+ pattern: [
3688
+ { step: 0, pitch: 67, velocity: 0.5 },
3689
+ { step: 36, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3690
+ { step: 36, pitch: 53, velocity: 0.8 },
3691
+ { step: 72, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3692
+ { step: 72, pitch: 53, velocity: 0.8 },
3693
+ { step: 120, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3694
+ { step: 120, pitch: 60, velocity: 0.8 },
3695
+ { step: 120, pitch: 68, velocity: 0.5 },
3696
+ { step: 144, pitch: 60, velocity: 0.8 },
3697
+ { step: 168, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3698
+ { step: 180, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 }
3699
+ ]
3700
+ },
3701
+ {
3702
+ ranges: [
3703
+ [12, 12],
3704
+ [56, 56]
3705
+ ],
3706
+ pattern: [
3707
+ { step: 0, pitch: 67, velocity: 0.5 },
3708
+ { step: 0, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3709
+ { step: 0, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3710
+ { step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3711
+ { step: 36, pitch: 53, velocity: 0.8 },
3712
+ { step: 36, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3713
+ { step: 60, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3714
+ { step: 60, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3715
+ { step: 72, pitch: 53, velocity: 0.8 },
3716
+ { step: 72, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3717
+ { step: 96, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3718
+ { step: 120, pitch: 60, velocity: 0.8 },
3719
+ { step: 120, pitch: 68, velocity: 0.5 },
3720
+ { step: 144, pitch: 60, velocity: 0.8 }
3721
+ ]
3722
+ },
3723
+ {
3724
+ ranges: [
3725
+ [13, 13],
3726
+ [21, 21],
3727
+ [57, 57],
3728
+ [65, 65],
3729
+ [73, 73],
3730
+ [81, 81]
3731
+ ],
3732
+ pattern: [{ step: 0, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.8 }]
3733
+ },
3734
+ {
3735
+ ranges: [[29, 29]],
3736
+ pattern: [
3737
+ { step: 0, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.8 },
3738
+ { step: 32, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3739
+ { step: 40, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3740
+ { step: 128, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3741
+ { step: 136, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 }
3742
+ ]
3743
+ },
3744
+ {
3745
+ ranges: [
3746
+ [30, 30],
3747
+ [32, 32],
3748
+ [34, 34]
3749
+ ],
3750
+ pattern: [
3751
+ { step: 0, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3752
+ { step: 8, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3753
+ { step: 16, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3754
+ { step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3755
+ { step: 84, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3756
+ { step: 96, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3757
+ { step: 120, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3758
+ { step: 132, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3759
+ { step: 156, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3760
+ { step: 180, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 }
3761
+ ]
3762
+ },
3763
+ {
3764
+ ranges: [
3765
+ [31, 31],
3766
+ [33, 33],
3767
+ [35, 35]
3768
+ ],
3769
+ pattern: [
3770
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3771
+ { step: 32, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3772
+ { step: 40, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3773
+ { step: 128, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3774
+ { step: 136, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 }
3775
+ ]
3776
+ },
3777
+ {
3778
+ ranges: [[36, 36]],
3779
+ pattern: [
3780
+ { step: 0, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3781
+ { step: 8, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3782
+ { step: 16, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3783
+ { step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3784
+ { step: 84, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3785
+ { step: 96, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3786
+ { step: 102, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3787
+ { step: 108, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3788
+ { step: 114, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3789
+ { step: 120, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
3790
+ { step: 126, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3791
+ { step: 132, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3792
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3793
+ { step: 156, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3794
+ { step: 168, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3795
+ { step: 172, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3796
+ { step: 176, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3797
+ { step: 180, pitch: DRUM_KEYS.pedalHihat, velocity: 0.8 },
3798
+ { step: 180, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3799
+ { step: 184, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
3800
+ { step: 188, pitch: DRUM_KEYS.handClap, velocity: 0.8 }
3801
+ ]
3802
+ }
3803
+ ]
3804
+ },
3805
+ hamari_au_karada_wa: {
3806
+ label: "\u5D4C\u308A\u5408\u3046\u4F53\u306F",
3807
+ font: "FluidR3_GM_sf2_file:0",
3808
+ pattern: [
3809
+ {
3810
+ ranges: [
3811
+ [7, 51],
3812
+ [53, 99]
3813
+ ],
3814
+ pattern: [{ step: 144, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 }]
3815
+ },
3816
+ {
3817
+ ranges: [[35, 67]],
3818
+ pattern: [
3819
+ { step: 0, pitch: 35, velocity: 0.8 },
3820
+ { step: 48, pitch: 35, velocity: 0.8 },
3821
+ { step: 96, pitch: 35, velocity: 0.8 }
3822
+ ]
3823
+ },
3824
+ {
3825
+ ranges: [[69, 100]],
3826
+ pattern: [
3827
+ { step: 0, pitch: 35, velocity: 0.8 },
3828
+ { step: 24, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3829
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3830
+ { step: 48, pitch: 35, velocity: 0.8 },
3831
+ { step: 72, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3832
+ { step: 96, pitch: 35, velocity: 0.8 },
3833
+ { step: 96, pitch: 67, velocity: 0.8 }
3834
+ ]
3835
+ },
3836
+ {
3837
+ ranges: [
3838
+ [35, 51],
3839
+ [53, 67]
3840
+ ],
3841
+ pattern: [
3842
+ { step: 24, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3843
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3844
+ { step: 72, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3845
+ { step: 120, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3846
+ { step: 144, pitch: 35, velocity: 0.8 },
3847
+ { step: 168, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 }
3848
+ ]
3849
+ },
3850
+ {
3851
+ ranges: [[69, 99]],
3852
+ pattern: [
3853
+ { step: 120, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3854
+ { step: 144, pitch: 35, velocity: 0.8 },
3855
+ { step: 144, pitch: 67, velocity: 0.8 },
3856
+ { step: 168, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 }
3857
+ ]
3858
+ },
3859
+ {
3860
+ ranges: [[6, 33]],
3861
+ pattern: [
3862
+ { step: 120, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3863
+ { step: 168, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 }
3864
+ ]
3865
+ },
3866
+ {
3867
+ ranges: [[7, 33]],
3868
+ pattern: [
3869
+ { step: 0, pitch: 35, velocity: 0.8 },
3870
+ { step: 24, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3871
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3872
+ { step: 48, pitch: 35, velocity: 0.8 },
3873
+ { step: 72, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3874
+ { step: 96, pitch: 35, velocity: 0.8 },
3875
+ { step: 144, pitch: 35, velocity: 0.8 }
3876
+ ]
3877
+ },
3878
+ {
3879
+ ranges: [
3880
+ [11, 18],
3881
+ [35, 50]
3882
+ ],
3883
+ pattern: [
3884
+ { step: 96, pitch: 67, velocity: 0.8 },
3885
+ { step: 144, pitch: 67, velocity: 0.8 }
3886
+ ]
3887
+ },
3888
+ {
3889
+ ranges: [
3890
+ [23, 26],
3891
+ [57, 60]
3892
+ ],
3893
+ pattern: [
3894
+ { step: 0, pitch: 68, velocity: 0.8 },
3895
+ { step: 48, pitch: 67, velocity: 0.8 },
3896
+ { step: 120, pitch: 68, velocity: 0.8 },
3897
+ { step: 144, pitch: 67, velocity: 0.8 }
3898
+ ]
3899
+ },
3900
+ {
3901
+ ranges: [
3902
+ [3, 7],
3903
+ [19, 19],
3904
+ [23, 23],
3905
+ [27, 27],
3906
+ [31, 31],
3907
+ [53, 53],
3908
+ [57, 57],
3909
+ [61, 61],
3910
+ [65, 65]
3911
+ ],
3912
+ pattern: [{ step: 0, pitch: 57, velocity: 0.8 }]
3913
+ },
3914
+ {
3915
+ ranges: [
3916
+ [31, 33],
3917
+ [65, 67]
3918
+ ],
3919
+ pattern: [
3920
+ { step: 24, pitch: 77, velocity: 0.8 },
3921
+ { step: 60, pitch: 77, velocity: 0.8 },
3922
+ { step: 96, pitch: 77, velocity: 0.8 },
3923
+ { step: 132, pitch: 77, velocity: 0.8 }
3924
+ ]
3925
+ },
3926
+ {
3927
+ ranges: [[3, 5]],
3928
+ pattern: [{ step: 96, pitch: 57, velocity: 0.8 }]
3929
+ },
3930
+ {
3931
+ ranges: [
3932
+ [31, 32],
3933
+ [65, 66]
3934
+ ],
3935
+ pattern: [{ step: 168, pitch: 77, velocity: 0.8 }]
3936
+ },
3937
+ {
3938
+ ranges: [[1, 2]],
3939
+ pattern: [
3940
+ { step: 0, pitch: 62, velocity: 0.8 },
3941
+ { step: 48, pitch: 62, velocity: 0.8 },
3942
+ { step: 96, pitch: 62, velocity: 0.8 }
3943
+ ]
3944
+ },
3945
+ {
3946
+ ranges: [[1, 1]],
3947
+ pattern: [{ step: 144, pitch: 62, velocity: 0.8 }]
3948
+ },
3949
+ {
3950
+ ranges: [[2, 2]],
3951
+ pattern: [
3952
+ { step: 36, pitch: 62, velocity: 0.8 },
3953
+ { step: 72, pitch: 62, velocity: 0.8 }
3954
+ ]
3955
+ },
3956
+ {
3957
+ ranges: [[6, 6]],
3958
+ pattern: [
3959
+ { step: 48, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
3960
+ { step: 108, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3961
+ { step: 120, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3962
+ { step: 132, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3963
+ { step: 168, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 },
3964
+ { step: 180, pitch: DRUM_KEYS.acousticSnare, velocity: 0.8 }
3965
+ ]
3966
+ },
3967
+ {
3968
+ ranges: [
3969
+ [11, 11],
3970
+ [35, 35],
3971
+ [43, 43],
3972
+ [69, 69],
3973
+ [77, 77],
3974
+ [85, 85],
3975
+ [93, 93]
3976
+ ],
3977
+ pattern: [
3978
+ { step: 0, pitch: 57, velocity: 0.8 },
3979
+ { step: 24, pitch: 77, velocity: 0.8 },
3980
+ { step: 48, pitch: 77, velocity: 0.8 },
3981
+ { step: 96, pitch: 77, velocity: 0.8 },
3982
+ { step: 96, pitch: 53, velocity: 0.8 },
3983
+ { step: 132, pitch: 77, velocity: 0.8 },
3984
+ { step: 168, pitch: 77, velocity: 0.8 }
3985
+ ]
3986
+ },
3987
+ {
3988
+ ranges: [
3989
+ [12, 12],
3990
+ [14, 14],
3991
+ [16, 16],
3992
+ [18, 18],
3993
+ [36, 36],
3994
+ [38, 38],
3995
+ [40, 40],
3996
+ [42, 42],
3997
+ [44, 44],
3998
+ [46, 46],
3999
+ [48, 48],
4000
+ [50, 50],
4001
+ [70, 70],
4002
+ [72, 72],
4003
+ [74, 74],
4004
+ [76, 76],
4005
+ [78, 78],
4006
+ [80, 80],
4007
+ [82, 82],
4008
+ [84, 84],
4009
+ [86, 86],
4010
+ [88, 88],
4011
+ [90, 90],
4012
+ [92, 92],
4013
+ [94, 94],
4014
+ [96, 96],
4015
+ [98, 98]
4016
+ ],
4017
+ pattern: [
4018
+ { step: 12, pitch: 77, velocity: 0.8 },
4019
+ { step: 36, pitch: 77, velocity: 0.8 },
4020
+ { step: 72, pitch: 77, velocity: 0.8 },
4021
+ { step: 120, pitch: 77, velocity: 0.8 },
4022
+ { step: 156, pitch: 77, velocity: 0.8 }
4023
+ ]
4024
+ },
4025
+ {
4026
+ ranges: [
4027
+ [13, 13],
4028
+ [17, 17],
4029
+ [37, 37],
4030
+ [41, 41],
4031
+ [45, 45],
4032
+ [49, 49],
4033
+ [71, 71],
4034
+ [75, 75],
4035
+ [79, 79],
4036
+ [83, 83],
4037
+ [87, 87],
4038
+ [91, 91],
4039
+ [95, 95],
4040
+ [99, 99]
4041
+ ],
4042
+ pattern: [
4043
+ { step: 24, pitch: 77, velocity: 0.8 },
4044
+ { step: 48, pitch: 77, velocity: 0.8 },
4045
+ { step: 96, pitch: 77, velocity: 0.8 },
4046
+ { step: 132, pitch: 77, velocity: 0.8 },
4047
+ { step: 168, pitch: 77, velocity: 0.8 }
4048
+ ]
4049
+ },
4050
+ {
4051
+ ranges: [
4052
+ [15, 15],
4053
+ [39, 39],
4054
+ [47, 47],
4055
+ [73, 73],
4056
+ [81, 81],
4057
+ [89, 89],
4058
+ [97, 97]
4059
+ ],
4060
+ pattern: [
4061
+ { step: 0, pitch: 57, velocity: 0.8 },
4062
+ { step: 24, pitch: 77, velocity: 0.8 },
4063
+ { step: 48, pitch: 77, velocity: 0.8 },
4064
+ { step: 96, pitch: 77, velocity: 0.8 },
4065
+ { step: 132, pitch: 77, velocity: 0.8 },
4066
+ { step: 168, pitch: 77, velocity: 0.8 }
4067
+ ]
4068
+ },
4069
+ {
4070
+ ranges: [
4071
+ [22, 22],
4072
+ [56, 56]
4073
+ ],
4074
+ pattern: [
4075
+ { step: 72, pitch: 77, velocity: 0.8 },
4076
+ { step: 96, pitch: 77, velocity: 0.8 },
4077
+ { step: 144, pitch: 77, velocity: 0.8 }
4078
+ ]
4079
+ },
4080
+ {
4081
+ ranges: [
4082
+ [26, 26],
4083
+ [60, 60]
4084
+ ],
4085
+ pattern: [
4086
+ { step: 96, pitch: 77, velocity: 0.8 },
4087
+ { step: 132, pitch: 77, velocity: 0.8 },
4088
+ { step: 168, pitch: 77, velocity: 0.8 }
4089
+ ]
4090
+ },
4091
+ {
4092
+ ranges: [
4093
+ [33, 33],
4094
+ [67, 67]
4095
+ ],
4096
+ pattern: [{ step: 144, pitch: 110, velocity: 1 }]
4097
+ },
4098
+ {
4099
+ ranges: [
4100
+ [34, 34],
4101
+ [68, 68]
4102
+ ],
4103
+ pattern: [
4104
+ { step: 0, pitch: 83, velocity: 0.8 },
4105
+ { step: 48, pitch: 83, velocity: 0.8 },
4106
+ { step: 96, pitch: 83, velocity: 0.8 }
4107
+ ]
4108
+ },
4109
+ {
4110
+ ranges: [[100, 100]],
4111
+ pattern: [
4112
+ { step: 12, pitch: 77, velocity: 0.8 },
4113
+ { step: 36, pitch: 77, velocity: 0.8 },
4114
+ { step: 72, pitch: 77, velocity: 0.8 }
4115
+ ]
4116
+ }
4117
+ ]
4118
+ },
4119
+ vecolite: {
4120
+ label: "vecolite",
4121
+ font: "Chaos_sf2_file:0",
4122
+ pattern: [
4123
+ {
4124
+ ranges: [
4125
+ [1, 49],
4126
+ [51, 53],
4127
+ [55, 56],
4128
+ [58, 75]
4129
+ ],
4130
+ pattern: [{ step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }]
4131
+ },
4132
+ {
4133
+ ranges: [
4134
+ [8, 31],
4135
+ [60, 75]
4136
+ ],
4137
+ pattern: [{ step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }]
4138
+ },
4139
+ {
4140
+ ranges: [
4141
+ [9, 24],
4142
+ [33, 43]
4143
+ ],
4144
+ pattern: [{ step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }]
4145
+ },
4146
+ {
4147
+ ranges: [
4148
+ [9, 12],
4149
+ [18, 32],
4150
+ [42, 48]
4151
+ ],
4152
+ pattern: [{ step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }]
4153
+ },
4154
+ {
4155
+ ranges: [[9, 31]],
4156
+ pattern: [{ step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }]
4157
+ },
4158
+ {
4159
+ ranges: [
4160
+ [10, 16],
4161
+ [18, 25],
4162
+ [34, 40]
4163
+ ],
4164
+ pattern: [{ step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }]
4165
+ },
4166
+ {
4167
+ ranges: [[33, 47]],
4168
+ pattern: [
4169
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4170
+ { step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }
4171
+ ]
4172
+ },
4173
+ {
4174
+ ranges: [
4175
+ [9, 15],
4176
+ [33, 39]
4177
+ ],
4178
+ pattern: [
4179
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4180
+ { step: 88, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4181
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4182
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4183
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4184
+ { step: 120, pitch: 48, velocity: 0.9 }
4185
+ ]
4186
+ },
4187
+ {
4188
+ ranges: [
4189
+ [61, 67],
4190
+ [69, 75]
4191
+ ],
4192
+ pattern: [
4193
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4194
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4195
+ { step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4196
+ { step: 40, pitch: DRUM_KEYS.sideStick, velocity: 0.9 }
4197
+ ]
4198
+ },
4199
+ {
4200
+ ranges: [
4201
+ [24, 31],
4202
+ [72, 75]
4203
+ ],
4204
+ pattern: [{ step: 136, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }]
4205
+ },
4206
+ {
4207
+ ranges: [
4208
+ [61, 66],
4209
+ [69, 74]
4210
+ ],
4211
+ pattern: [{ step: 24, pitch: DRUM_KEYS.handClap, velocity: 0.9 }]
4212
+ },
4213
+ {
4214
+ ranges: [
4215
+ [61, 63],
4216
+ [65, 67],
4217
+ [69, 71],
4218
+ [73, 75]
4219
+ ],
4220
+ pattern: [
4221
+ { step: 16, pitch: 40, velocity: 0.5 },
4222
+ { step: 40, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }
4223
+ ]
4224
+ },
4225
+ {
4226
+ ranges: [[1, 8]],
4227
+ pattern: [
4228
+ { step: 120, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4229
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4230
+ ]
4231
+ },
4232
+ {
4233
+ ranges: [[2, 9]],
4234
+ pattern: [{ step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }]
4235
+ },
4236
+ {
4237
+ ranges: [
4238
+ [10, 12],
4239
+ [18, 20],
4240
+ [22, 25]
4241
+ ],
4242
+ pattern: [
4243
+ { step: 0, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4244
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4245
+ ]
4246
+ },
4247
+ {
4248
+ ranges: [[17, 24]],
4249
+ pattern: [
4250
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4251
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4252
+ ]
4253
+ },
4254
+ {
4255
+ ranges: [[25, 32]],
4256
+ pattern: [{ step: 40, pitch: DRUM_KEYS.sideStick, velocity: 0.9 }]
4257
+ },
4258
+ {
4259
+ ranges: [[26, 33]],
4260
+ pattern: [{ step: 0, pitch: 41, velocity: 0.9 }]
4261
+ },
4262
+ {
4263
+ ranges: [[68, 75]],
4264
+ pattern: [
4265
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4266
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4267
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4268
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4269
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4270
+ { step: 120, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4271
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4272
+ ]
4273
+ },
4274
+ {
4275
+ ranges: [
4276
+ [14, 16],
4277
+ [34, 36],
4278
+ [38, 40]
4279
+ ],
4280
+ pattern: [
4281
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4282
+ { step: 0, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4283
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4284
+ ]
4285
+ },
4286
+ {
4287
+ ranges: [[25, 31]],
4288
+ pattern: [
4289
+ { step: 48, pitch: 41, velocity: 0.9 },
4290
+ { step: 64, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4291
+ { step: 72, pitch: 40, velocity: 0.9 },
4292
+ { step: 72, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4293
+ { step: 88, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4294
+ { step: 88, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4295
+ { step: 96, pitch: 41, velocity: 0.9 },
4296
+ { step: 96, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4297
+ { step: 112, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4298
+ { step: 120, pitch: 40, velocity: 0.9 },
4299
+ { step: 120, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4300
+ { step: 136, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4301
+ { step: 136, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4302
+ { step: 144, pitch: 41, velocity: 0.9 },
4303
+ { step: 144, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4304
+ { step: 160, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4305
+ { step: 168, pitch: 40, velocity: 0.9 },
4306
+ { step: 168, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4307
+ { step: 184, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4308
+ { step: 184, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 }
4309
+ ]
4310
+ },
4311
+ {
4312
+ ranges: [[26, 32]],
4313
+ pattern: [
4314
+ { step: 0, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4315
+ { step: 16, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4316
+ { step: 24, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4317
+ { step: 40, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4318
+ { step: 40, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 }
4319
+ ]
4320
+ },
4321
+ {
4322
+ ranges: [[60, 66]],
4323
+ pattern: [
4324
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4325
+ { step: 64, pitch: 40, velocity: 0.5 },
4326
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4327
+ { step: 88, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4328
+ { step: 88, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4329
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4330
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4331
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4332
+ { step: 120, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4333
+ { step: 136, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4334
+ { step: 136, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4335
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4336
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4337
+ ]
4338
+ },
4339
+ {
4340
+ ranges: [[68, 74]],
4341
+ pattern: [{ step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }]
4342
+ },
4343
+ {
4344
+ ranges: [
4345
+ [17, 19],
4346
+ [21, 24]
4347
+ ],
4348
+ pattern: [
4349
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4350
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4351
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4352
+ { step: 120, pitch: 48, velocity: 0.9 },
4353
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4354
+ ]
4355
+ },
4356
+ {
4357
+ ranges: [
4358
+ [9, 11],
4359
+ [33, 35]
4360
+ ],
4361
+ pattern: [
4362
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4363
+ { step: 168, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4364
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4365
+ { step: 184, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }
4366
+ ]
4367
+ },
4368
+ {
4369
+ ranges: [
4370
+ [13, 15],
4371
+ [37, 39]
4372
+ ],
4373
+ pattern: [
4374
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4375
+ { step: 168, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4376
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4377
+ ]
4378
+ },
4379
+ {
4380
+ ranges: [
4381
+ [26, 28],
4382
+ [30, 32]
4383
+ ],
4384
+ pattern: [{ step: 24, pitch: 40, velocity: 0.9 }]
4385
+ },
4386
+ {
4387
+ ranges: [
4388
+ [42, 44],
4389
+ [46, 48]
4390
+ ],
4391
+ pattern: [
4392
+ { step: 0, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4393
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4394
+ { step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4395
+ ]
4396
+ },
4397
+ {
4398
+ ranges: [
4399
+ [60, 62],
4400
+ [64, 66]
4401
+ ],
4402
+ pattern: [
4403
+ { step: 184, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4404
+ { step: 184, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4405
+ ]
4406
+ },
4407
+ {
4408
+ ranges: [
4409
+ [17, 17],
4410
+ [21, 21],
4411
+ [41, 41],
4412
+ [45, 45],
4413
+ [49, 49],
4414
+ [58, 60],
4415
+ [67, 68]
4416
+ ],
4417
+ pattern: [{ step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }]
4418
+ },
4419
+ {
4420
+ ranges: [[41, 43]],
4421
+ pattern: [
4422
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4423
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4424
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4425
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4426
+ { step: 120, pitch: 48, velocity: 0.9 },
4427
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4428
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4429
+ ]
4430
+ },
4431
+ {
4432
+ ranges: [[45, 47]],
4433
+ pattern: [
4434
+ { step: 48, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4435
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4436
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4437
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4438
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4439
+ { step: 120, pitch: 48, velocity: 0.9 },
4440
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4441
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4442
+ ]
4443
+ },
4444
+ {
4445
+ ranges: [[56, 58]],
4446
+ pattern: [
4447
+ { step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4448
+ { step: 160, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4449
+ ]
4450
+ },
4451
+ {
4452
+ ranges: [[57, 59]],
4453
+ pattern: [{ step: 16, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }]
4454
+ },
4455
+ {
4456
+ ranges: [[68, 70]],
4457
+ pattern: [
4458
+ { step: 64, pitch: 40, velocity: 0.5 },
4459
+ { step: 88, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4460
+ { step: 88, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4461
+ { step: 136, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4462
+ { step: 136, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4463
+ { step: 184, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4464
+ { step: 184, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4465
+ ]
4466
+ },
4467
+ {
4468
+ ranges: [[72, 74]],
4469
+ pattern: [
4470
+ { step: 64, pitch: 40, velocity: 0.5 },
4471
+ { step: 88, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4472
+ { step: 88, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4473
+ { step: 136, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4474
+ { step: 184, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4475
+ { step: 184, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4476
+ ]
4477
+ },
4478
+ {
4479
+ ranges: [[56, 57]],
4480
+ pattern: [
4481
+ { step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4482
+ { step: 168, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4483
+ ]
4484
+ },
4485
+ {
4486
+ ranges: [[58, 59]],
4487
+ pattern: [
4488
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4489
+ { step: 48, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4490
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4491
+ ]
4492
+ },
4493
+ {
4494
+ ranges: [[1, 1]],
4495
+ pattern: [{ step: 48, pitch: DRUM_KEYS.splashCymbal, velocity: 0.9 }]
4496
+ },
4497
+ {
4498
+ ranges: [[4, 4]],
4499
+ pattern: [
4500
+ { step: 84, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4501
+ { step: 144, pitch: DRUM_KEYS.highTom, velocity: 0.9 },
4502
+ { step: 160, pitch: 48, velocity: 0.9 },
4503
+ { step: 184, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 }
4504
+ ]
4505
+ },
4506
+ {
4507
+ ranges: [[5, 5]],
4508
+ pattern: [
4509
+ { step: 16, pitch: DRUM_KEYS.lowTom, velocity: 0.9 },
4510
+ { step: 24, pitch: 43, velocity: 0.9 },
4511
+ { step: 40, pitch: 43, velocity: 0.9 },
4512
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4513
+ ]
4514
+ },
4515
+ {
4516
+ ranges: [[8, 8]],
4517
+ pattern: [
4518
+ { step: 84, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4519
+ { step: 180, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }
4520
+ ]
4521
+ },
4522
+ {
4523
+ ranges: [[9, 9]],
4524
+ pattern: [
4525
+ { step: 0, pitch: 40, velocity: 0.9 },
4526
+ { step: 8, pitch: 40, velocity: 0.9 },
4527
+ { step: 16, pitch: 40, velocity: 0.9 },
4528
+ { step: 24, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4529
+ { step: 48, pitch: DRUM_KEYS.splashCymbal, velocity: 0.9 }
4530
+ ]
4531
+ },
4532
+ {
4533
+ ranges: [
4534
+ [10, 10],
4535
+ [14, 14],
4536
+ [18, 18],
4537
+ [22, 22],
4538
+ [34, 34],
4539
+ [38, 38],
4540
+ [42, 42],
4541
+ [44, 44],
4542
+ [46, 46]
4543
+ ],
4544
+ pattern: [{ step: 24, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 }]
4545
+ },
4546
+ {
4547
+ ranges: [
4548
+ [11, 11],
4549
+ [15, 15],
4550
+ [35, 35],
4551
+ [39, 39]
4552
+ ],
4553
+ pattern: [
4554
+ { step: 16, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4555
+ { step: 40, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4556
+ ]
4557
+ },
4558
+ {
4559
+ ranges: [
4560
+ [12, 12],
4561
+ [36, 36]
4562
+ ],
4563
+ pattern: [
4564
+ { step: 24, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4565
+ { step: 144, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4566
+ ]
4567
+ },
4568
+ {
4569
+ ranges: [
4570
+ [13, 13],
4571
+ [37, 37]
4572
+ ],
4573
+ pattern: [
4574
+ { step: 16, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4575
+ { step: 24, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4576
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4577
+ ]
4578
+ },
4579
+ {
4580
+ ranges: [
4581
+ [16, 16],
4582
+ [40, 40]
4583
+ ],
4584
+ pattern: [
4585
+ { step: 24, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4586
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4587
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4588
+ { step: 88, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4589
+ { step: 96, pitch: 40, velocity: 0.9 },
4590
+ { step: 120, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4591
+ { step: 136, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4592
+ { step: 144, pitch: 52, velocity: 0.9 }
4593
+ ]
4594
+ },
4595
+ {
4596
+ ranges: [
4597
+ [19, 19],
4598
+ [43, 43]
4599
+ ],
4600
+ pattern: [
4601
+ { step: 16, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4602
+ { step: 40, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4603
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4604
+ ]
4605
+ },
4606
+ {
4607
+ ranges: [[20, 20]],
4608
+ pattern: [
4609
+ { step: 24, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4610
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4611
+ { step: 32, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4612
+ { step: 40, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4613
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4614
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4615
+ ]
4616
+ },
4617
+ {
4618
+ ranges: [
4619
+ [23, 23],
4620
+ [47, 47]
4621
+ ],
4622
+ pattern: [{ step: 16, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 }]
4623
+ },
4624
+ {
4625
+ ranges: [[24, 24]],
4626
+ pattern: [
4627
+ { step: 24, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4628
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4629
+ { step: 72, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4630
+ { step: 88, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4631
+ { step: 88, pitch: 40, velocity: 0.9 },
4632
+ { step: 112, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4633
+ { step: 120, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4634
+ { step: 136, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4635
+ { step: 152, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4636
+ { step: 160, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4637
+ { step: 168, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4638
+ { step: 176, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4639
+ { step: 176, pitch: 40, velocity: 0.9 },
4640
+ { step: 184, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 }
4641
+ ]
4642
+ },
4643
+ {
4644
+ ranges: [[25, 25]],
4645
+ pattern: [
4646
+ { step: 8, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4647
+ { step: 16, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4648
+ { step: 16, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4649
+ { step: 16, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4650
+ { step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4651
+ { step: 24, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4652
+ { step: 48, pitch: 52, velocity: 0.9 }
4653
+ ]
4654
+ },
4655
+ {
4656
+ ranges: [
4657
+ [26, 26],
4658
+ [30, 30]
4659
+ ],
4660
+ pattern: [{ step: 48, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 }]
4661
+ },
4662
+ {
4663
+ ranges: [
4664
+ [27, 27],
4665
+ [31, 31]
4666
+ ],
4667
+ pattern: [{ step: 48, pitch: 52, velocity: 0.9 }]
4668
+ },
4669
+ {
4670
+ ranges: [[28, 28]],
4671
+ pattern: [
4672
+ { step: 48, pitch: DRUM_KEYS.rideCymbal1, velocity: 0.9 },
4673
+ { step: 136, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4674
+ { step: 160, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4675
+ ]
4676
+ },
4677
+ {
4678
+ ranges: [[29, 29]],
4679
+ pattern: [
4680
+ { step: 0, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4681
+ { step: 16, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4682
+ { step: 24, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4683
+ { step: 40, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4684
+ { step: 48, pitch: 52, velocity: 0.9 }
4685
+ ]
4686
+ },
4687
+ {
4688
+ ranges: [[32, 32]],
4689
+ pattern: [
4690
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4691
+ { step: 48, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4692
+ { step: 144, pitch: DRUM_KEYS.highTom, velocity: 0.9 },
4693
+ { step: 160, pitch: 48, velocity: 0.9 },
4694
+ { step: 168, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4695
+ { step: 176, pitch: DRUM_KEYS.lowTom, velocity: 0.9 },
4696
+ { step: 184, pitch: 43, velocity: 0.9 }
4697
+ ]
4698
+ },
4699
+ {
4700
+ ranges: [[33, 33]],
4701
+ pattern: [
4702
+ { step: 16, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4703
+ { step: 16, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4704
+ { step: 24, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4705
+ { step: 24, pitch: DRUM_KEYS.lowTom, velocity: 0.9 },
4706
+ { step: 32, pitch: 43, velocity: 0.9 },
4707
+ { step: 40, pitch: 41, velocity: 0.9 },
4708
+ { step: 48, pitch: DRUM_KEYS.splashCymbal, velocity: 0.9 }
4709
+ ]
4710
+ },
4711
+ {
4712
+ ranges: [[48, 48]],
4713
+ pattern: [
4714
+ { step: 24, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4715
+ { step: 48, pitch: DRUM_KEYS.splashCymbal, velocity: 0.9 },
4716
+ { step: 48, pitch: 48, velocity: 0.9 }
4717
+ ]
4718
+ },
4719
+ {
4720
+ ranges: [[51, 51]],
4721
+ pattern: [
4722
+ { step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4723
+ { step: 48, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4724
+ ]
4725
+ },
4726
+ {
4727
+ ranges: [[52, 52]],
4728
+ pattern: [
4729
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4730
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4731
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4732
+ { step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4733
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4734
+ ]
4735
+ },
4736
+ {
4737
+ ranges: [[53, 53]],
4738
+ pattern: [
4739
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4740
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4741
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4742
+ ]
4743
+ },
4744
+ {
4745
+ ranges: [[55, 55]],
4746
+ pattern: [{ step: 48, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }]
4747
+ },
4748
+ {
4749
+ ranges: [[56, 56]],
4750
+ pattern: [
4751
+ { step: 48, pitch: 41, velocity: 0.9 },
4752
+ { step: 64, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4753
+ { step: 72, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4754
+ { step: 112, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4755
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4756
+ { step: 144, pitch: 41, velocity: 0.9 }
4757
+ ]
4758
+ },
4759
+ {
4760
+ ranges: [[57, 57]],
4761
+ pattern: [
4762
+ { step: 24, pitch: 40, velocity: 0.9 },
4763
+ { step: 32, pitch: 40, velocity: 0.9 },
4764
+ { step: 40, pitch: 40, velocity: 0.9 },
4765
+ { step: 48, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4766
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4767
+ { step: 72, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4768
+ { step: 72, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4769
+ { step: 112, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4770
+ { step: 112, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4771
+ { step: 112, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4772
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4773
+ { step: 144, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4774
+ ]
4775
+ },
4776
+ {
4777
+ ranges: [[58, 58]],
4778
+ pattern: [
4779
+ { step: 8, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4780
+ { step: 40, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4781
+ { step: 88, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4782
+ { step: 88, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4783
+ { step: 88, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4784
+ { step: 120, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4785
+ { step: 120, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4786
+ { step: 120, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4787
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4788
+ { step: 152, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4789
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4790
+ { step: 176, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4791
+ { step: 184, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 }
4792
+ ]
4793
+ },
4794
+ {
4795
+ ranges: [[59, 59]],
4796
+ pattern: [
4797
+ { step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4798
+ { step: 24, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4799
+ { step: 24, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4800
+ { step: 24, pitch: DRUM_KEYS.pedalHihat, velocity: 0.9 },
4801
+ { step: 40, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4802
+ { step: 40, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4803
+ { step: 40, pitch: DRUM_KEYS.pedalHihat, velocity: 0.9 },
4804
+ { step: 40, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4805
+ { step: 96, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4806
+ { step: 144, pitch: DRUM_KEYS.openHihat, velocity: 0.9 }
4807
+ ]
4808
+ },
4809
+ {
4810
+ ranges: [[60, 60]],
4811
+ pattern: [
4812
+ { step: 0, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4813
+ { step: 0, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4814
+ { step: 16, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4815
+ { step: 24, pitch: 52, velocity: 0.9 }
4816
+ ]
4817
+ },
4818
+ {
4819
+ ranges: [
4820
+ [61, 61],
4821
+ [65, 65],
4822
+ [69, 69],
4823
+ [73, 73]
4824
+ ],
4825
+ pattern: [{ step: 160, pitch: DRUM_KEYS.handClap, velocity: 0.9 }]
4826
+ },
4827
+ {
4828
+ ranges: [[63, 63]],
4829
+ pattern: [
4830
+ { step: 160, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4831
+ { step: 168, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4832
+ { step: 184, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4833
+ { step: 184, pitch: 40, velocity: 0.9 }
4834
+ ]
4835
+ },
4836
+ {
4837
+ ranges: [[64, 64]],
4838
+ pattern: [
4839
+ { step: 0, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4840
+ { step: 8, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4841
+ { step: 16, pitch: DRUM_KEYS.acousticSnare, velocity: 1 },
4842
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4843
+ ]
4844
+ },
4845
+ {
4846
+ ranges: [[67, 67]],
4847
+ pattern: [
4848
+ { step: 24, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4849
+ { step: 32, pitch: 40, velocity: 0.9 },
4850
+ { step: 40, pitch: DRUM_KEYS.pedalHihat, velocity: 0.9 },
4851
+ { step: 48, pitch: DRUM_KEYS.openHihat, velocity: 0.9 },
4852
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4853
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4854
+ { step: 88, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4855
+ { step: 112, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4856
+ { step: 120, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4857
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4858
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4859
+ { step: 184, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 }
4860
+ ]
4861
+ },
4862
+ {
4863
+ ranges: [[68, 68]],
4864
+ pattern: [
4865
+ { step: 16, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4866
+ { step: 16, pitch: DRUM_KEYS.closedHihat, velocity: 0.9 },
4867
+ { step: 24, pitch: DRUM_KEYS.bassDrum1, velocity: 0.9 },
4868
+ { step: 24, pitch: 52, velocity: 0.9 }
4869
+ ]
4870
+ },
4871
+ {
4872
+ ranges: [[71, 71]],
4873
+ pattern: [
4874
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4875
+ { step: 168, pitch: DRUM_KEYS.handClap, velocity: 0.9 }
4876
+ ]
4877
+ },
4878
+ {
4879
+ ranges: [[72, 72]],
4880
+ pattern: [
4881
+ { step: 16, pitch: 40, velocity: 0.9 },
4882
+ { step: 24, pitch: 52, velocity: 0.9 },
4883
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4884
+ ]
4885
+ },
4886
+ {
4887
+ ranges: [[75, 75]],
4888
+ pattern: [
4889
+ { step: 24, pitch: DRUM_KEYS.acousticSnare, velocity: 0.9 },
4890
+ { step: 32, pitch: 40, velocity: 0.9 },
4891
+ { step: 40, pitch: DRUM_KEYS.pedalHihat, velocity: 0.9 },
4892
+ { step: 48, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 },
4893
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4894
+ { step: 48, pitch: DRUM_KEYS.highTom, velocity: 0.9 },
4895
+ { step: 64, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4896
+ { step: 64, pitch: 48, velocity: 0.9 },
4897
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4898
+ { step: 72, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4899
+ { step: 88, pitch: DRUM_KEYS.pedalHihat, velocity: 0.9 },
4900
+ { step: 88, pitch: DRUM_KEYS.lowTom, velocity: 0.9 },
4901
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4902
+ { step: 96, pitch: 48, velocity: 0.9 },
4903
+ { step: 112, pitch: DRUM_KEYS.sideStick, velocity: 0.9 },
4904
+ { step: 112, pitch: DRUM_KEYS.lowMidTom, velocity: 0.9 },
4905
+ { step: 120, pitch: DRUM_KEYS.lowTom, velocity: 0.9 },
4906
+ { step: 120, pitch: DRUM_KEYS.splashCymbal, velocity: 0.9 },
4907
+ { step: 128, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4908
+ { step: 136, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4909
+ { step: 136, pitch: 43, velocity: 0.9 },
4910
+ { step: 136, pitch: DRUM_KEYS.pedalHihat, velocity: 0.9 },
4911
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.9 },
4912
+ { step: 144, pitch: 52, velocity: 0.9 },
4913
+ { step: 144, pitch: 41, velocity: 0.9 },
4914
+ { step: 144, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.9 }
4915
+ ]
4916
+ }
4917
+ ]
4918
+ },
4919
+ tsuchi_he_to_shizumu_kagerou: {
4920
+ label: "\u3064\u3061\u3078\u3068\u3057\u305A\u3080\u30AB\u30B2\u30ED\u30A6",
4921
+ font: "FluidR3_GM_sf2_file:11",
4922
+ pattern: [
4923
+ {
4924
+ ranges: [[8, 85]],
4925
+ pattern: [{ step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }]
4926
+ },
4927
+ {
4928
+ ranges: [
4929
+ [2, 9],
4930
+ [15, 52],
4931
+ [54, 85]
4932
+ ],
4933
+ pattern: [{ step: 0, pitch: 35, velocity: 0.8 }]
4934
+ },
4935
+ {
4936
+ ranges: [
4937
+ [8, 46],
4938
+ [50, 85]
4939
+ ],
4940
+ pattern: [{ step: 96, pitch: 35, velocity: 0.8 }]
4941
+ },
4942
+ {
4943
+ ranges: [
4944
+ [24, 37],
4945
+ [63, 76],
4946
+ [102, 115],
4947
+ [117, 130]
4948
+ ],
4949
+ pattern: [
4950
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
4951
+ { step: 120, pitch: 60, velocity: 0.8 },
4952
+ { step: 144, pitch: 35, velocity: 0.8 },
4953
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
4954
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
4955
+ { step: 168, pitch: 60, velocity: 0.8 }
4956
+ ]
4957
+ },
4958
+ {
4959
+ ranges: [[94, 131]],
4960
+ pattern: [
4961
+ { step: 0, pitch: 35, velocity: 0.8 },
4962
+ { step: 96, pitch: 35, velocity: 0.8 }
4963
+ ]
4964
+ },
4965
+ {
4966
+ ranges: [[102, 131]],
4967
+ pattern: [
4968
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
4969
+ { step: 48, pitch: 35, velocity: 0.8 },
4970
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
4971
+ { step: 48, pitch: 60, velocity: 0.8 },
4972
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
4973
+ ]
4974
+ },
4975
+ {
4976
+ ranges: [[24, 49]],
4977
+ pattern: [
4978
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
4979
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.8 }
4980
+ ]
4981
+ },
4982
+ {
4983
+ ranges: [[24, 46]],
4984
+ pattern: [
4985
+ { step: 48, pitch: 35, velocity: 0.8 },
4986
+ { step: 48, pitch: 60, velocity: 0.8 }
4987
+ ]
4988
+ },
4989
+ {
4990
+ ranges: [[63, 85]],
4991
+ pattern: [
4992
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
4993
+ { step: 48, pitch: 35, velocity: 0.8 }
4994
+ ]
4995
+ },
4996
+ {
4997
+ ranges: [
4998
+ [8, 22],
4999
+ [78, 85]
5000
+ ],
5001
+ pattern: [
5002
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5003
+ { step: 144, pitch: 35, velocity: 0.8 },
5004
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
5005
+ ]
5006
+ },
5007
+ {
5008
+ ranges: [[39, 60]],
5009
+ pattern: [{ step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.8 }]
5010
+ },
5011
+ {
5012
+ ranges: [[63, 84]],
5013
+ pattern: [
5014
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5015
+ { step: 48, pitch: 60, velocity: 0.8 }
5016
+ ]
5017
+ },
5018
+ {
5019
+ ranges: [[2, 22]],
5020
+ pattern: [{ step: 48, pitch: 35, velocity: 0.8 }]
5021
+ },
5022
+ {
5023
+ ranges: [
5024
+ [8, 9],
5025
+ [15, 22],
5026
+ [51, 52],
5027
+ [54, 61]
5028
+ ],
5029
+ pattern: [{ step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }]
5030
+ },
5031
+ {
5032
+ ranges: [
5033
+ [8, 21],
5034
+ [98, 100]
5035
+ ],
5036
+ pattern: [
5037
+ { step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5038
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.8 }
5039
+ ]
5040
+ },
5041
+ {
5042
+ ranges: [
5043
+ [16, 22],
5044
+ [55, 61]
5045
+ ],
5046
+ pattern: [
5047
+ { step: 0, pitch: 77, velocity: 0.8 },
5048
+ { step: 24, pitch: 76, velocity: 0.8 },
5049
+ { step: 48, pitch: 77, velocity: 0.8 },
5050
+ { step: 72, pitch: 76, velocity: 0.8 },
5051
+ { step: 168, pitch: 76, velocity: 0.8 }
5052
+ ]
5053
+ },
5054
+ {
5055
+ ranges: [
5056
+ [50, 61],
5057
+ [95, 95]
5058
+ ],
5059
+ pattern: [{ step: 144, pitch: 35, velocity: 0.8 }]
5060
+ },
5061
+ {
5062
+ ranges: [
5063
+ [8, 15],
5064
+ [51, 54]
5065
+ ],
5066
+ pattern: [
5067
+ { step: 48, pitch: 60, velocity: 0.8 },
5068
+ { step: 120, pitch: 60, velocity: 0.8 },
5069
+ { step: 168, pitch: 60, velocity: 0.8 }
5070
+ ]
5071
+ },
5072
+ {
5073
+ ranges: [[39, 49]],
5074
+ pattern: [
5075
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5076
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
5077
+ ]
5078
+ },
5079
+ {
5080
+ ranges: [[51, 61]],
5081
+ pattern: [
5082
+ { step: 48, pitch: 35, velocity: 0.8 },
5083
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5084
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
5085
+ ]
5086
+ },
5087
+ {
5088
+ ranges: [[51, 60]],
5089
+ pattern: [{ step: 48, pitch: DRUM_KEYS.handClap, velocity: 0.8 }]
5090
+ },
5091
+ {
5092
+ ranges: [[39, 46]],
5093
+ pattern: [
5094
+ { step: 120, pitch: 60, velocity: 0.8 },
5095
+ { step: 144, pitch: 35, velocity: 0.8 },
5096
+ { step: 168, pitch: 60, velocity: 0.8 }
5097
+ ]
5098
+ },
5099
+ {
5100
+ ranges: [[78, 84]],
5101
+ pattern: [
5102
+ { step: 120, pitch: 60, velocity: 0.8 },
5103
+ { step: 144, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5104
+ { step: 168, pitch: 60, velocity: 0.8 }
5105
+ ]
5106
+ },
5107
+ {
5108
+ ranges: [[86, 92]],
5109
+ pattern: [{ step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.8 }]
5110
+ },
5111
+ {
5112
+ ranges: [[2, 7]],
5113
+ pattern: [
5114
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
5115
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 }
5116
+ ]
5117
+ },
5118
+ {
5119
+ ranges: [[2, 6]],
5120
+ pattern: [
5121
+ { step: 96, pitch: 35, velocity: 0.8 },
5122
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 },
5123
+ { step: 144, pitch: 35, velocity: 0.8 },
5124
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.6 }
5125
+ ]
5126
+ },
5127
+ {
5128
+ ranges: [[97, 100]],
5129
+ pattern: [
5130
+ { step: 48, pitch: 35, velocity: 0.8 },
5131
+ { step: 144, pitch: 35, velocity: 0.8 }
5132
+ ]
5133
+ },
5134
+ {
5135
+ ranges: [[11, 13]],
5136
+ pattern: [
5137
+ { step: 0, pitch: 35, velocity: 0.8 },
5138
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
5139
+ ]
5140
+ },
5141
+ {
5142
+ ranges: [[47, 49]],
5143
+ pattern: [{ step: 120, pitch: 35, velocity: 0.8 }]
5144
+ },
5145
+ {
5146
+ ranges: [[100, 101]],
5147
+ pattern: [{ step: 0, pitch: DRUM_KEYS.handClap, velocity: 0.8 }]
5148
+ },
5149
+ {
5150
+ ranges: [[1, 1]],
5151
+ pattern: [
5152
+ { step: 0, pitch: 62, velocity: 0.8 },
5153
+ { step: 48, pitch: 62, velocity: 0.8 },
5154
+ { step: 96, pitch: 62, velocity: 0.8 },
5155
+ { step: 144, pitch: 62, velocity: 0.8 }
5156
+ ]
5157
+ },
5158
+ {
5159
+ ranges: [
5160
+ [8, 8],
5161
+ [47, 47],
5162
+ [86, 86]
5163
+ ],
5164
+ pattern: [{ step: 0, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.8 }]
5165
+ },
5166
+ {
5167
+ ranges: [
5168
+ [15, 15],
5169
+ [54, 54]
5170
+ ],
5171
+ pattern: [
5172
+ { step: 96, pitch: 60, velocity: 0.8 },
5173
+ { step: 144, pitch: 60, velocity: 0.8 }
5174
+ ]
5175
+ },
5176
+ {
5177
+ ranges: [
5178
+ [16, 16],
5179
+ [55, 55]
5180
+ ],
5181
+ pattern: [
5182
+ { step: 0, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.8 },
5183
+ { step: 96, pitch: 77, velocity: 0.8 },
5184
+ { step: 120, pitch: 77, velocity: 0.8 },
5185
+ { step: 144, pitch: 76, velocity: 0.8 }
5186
+ ]
5187
+ },
5188
+ {
5189
+ ranges: [
5190
+ [17, 17],
5191
+ [19, 19],
5192
+ [21, 21],
5193
+ [56, 56],
5194
+ [58, 58],
5195
+ [60, 60]
5196
+ ],
5197
+ pattern: [
5198
+ { step: 84, pitch: 77, velocity: 0.8 },
5199
+ { step: 108, pitch: 77, velocity: 0.8 },
5200
+ { step: 120, pitch: 76, velocity: 0.8 },
5201
+ { step: 144, pitch: 77, velocity: 0.8 }
5202
+ ]
5203
+ },
5204
+ {
5205
+ ranges: [
5206
+ [18, 18],
5207
+ [20, 20],
5208
+ [22, 22],
5209
+ [57, 57],
5210
+ [59, 59],
5211
+ [61, 61]
5212
+ ],
5213
+ pattern: [
5214
+ { step: 96, pitch: 77, velocity: 0.8 },
5215
+ { step: 120, pitch: 77, velocity: 0.8 },
5216
+ { step: 144, pitch: 76, velocity: 0.8 }
5217
+ ]
5218
+ },
5219
+ {
5220
+ ranges: [
5221
+ [23, 23],
5222
+ [62, 62]
5223
+ ],
5224
+ pattern: [
5225
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5226
+ { step: 0, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5227
+ { step: 36, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5228
+ { step: 36, pitch: 35, velocity: 0.8 },
5229
+ { step: 36, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5230
+ { step: 72, pitch: 35, velocity: 0.8 },
5231
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5232
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5233
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.8 }
5234
+ ]
5235
+ },
5236
+ {
5237
+ ranges: [
5238
+ [24, 24],
5239
+ [39, 39],
5240
+ [63, 63],
5241
+ [78, 78],
5242
+ [117, 117]
5243
+ ],
5244
+ pattern: [{ step: 0, pitch: DRUM_KEYS.openHihat, velocity: 0.8 }]
5245
+ },
5246
+ {
5247
+ ranges: [[50, 50]],
5248
+ pattern: [
5249
+ { step: 0, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5250
+ { step: 0, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5251
+ { step: 36, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5252
+ { step: 36, pitch: 35, velocity: 0.8 },
5253
+ { step: 36, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5254
+ { step: 72, pitch: 35, velocity: 0.8 },
5255
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5256
+ { step: 96, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5257
+ { step: 120, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5258
+ { step: 144, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5259
+ { step: 168, pitch: 35, velocity: 0.8 }
5260
+ ]
5261
+ },
5262
+ {
5263
+ ranges: [[100, 100]],
5264
+ pattern: [
5265
+ { step: 96, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5266
+ { step: 120, pitch: 35, velocity: 0.8 },
5267
+ { step: 120, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5268
+ { step: 168, pitch: 35, velocity: 0.8 },
5269
+ { step: 168, pitch: DRUM_KEYS.handClap, velocity: 0.8 }
5270
+ ]
5271
+ },
5272
+ {
5273
+ ranges: [[101, 101]],
5274
+ pattern: [
5275
+ { step: 36, pitch: 35, velocity: 0.8 },
5276
+ { step: 36, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5277
+ { step: 72, pitch: 35, velocity: 0.8 },
5278
+ { step: 72, pitch: DRUM_KEYS.handClap, velocity: 0.8 },
5279
+ { step: 96, pitch: 60, velocity: 0 },
5280
+ { step: 108, pitch: 60, velocity: 0.1 },
5281
+ { step: 120, pitch: 60, velocity: 0.3 },
5282
+ { step: 132, pitch: 60, velocity: 0.3 },
5283
+ { step: 144, pitch: 60, velocity: 0.5 },
5284
+ { step: 156, pitch: 60, velocity: 0.6 },
5285
+ { step: 168, pitch: 60, velocity: 0.7 },
5286
+ { step: 180, pitch: 60, velocity: 0.8 }
5287
+ ]
5288
+ },
5289
+ {
5290
+ ranges: [[102, 102]],
5291
+ pattern: [
5292
+ { step: 0, pitch: DRUM_KEYS.crashCymbal1, velocity: 0.8 },
5293
+ { step: 0, pitch: DRUM_KEYS.openHihat, velocity: 0.8 }
5294
+ ]
5295
+ }
5296
+ ]
5297
+ },
5298
+ asayake: {
5299
+ label: "\u3042\u3055\u3084\u3051\u3082\u3086\u3046\u3084\u3051\u3082\u306A\u3044\u3093\u3060",
5300
+ font: "FluidR3_GM_sf2_file:11",
5301
+ pattern: [
5302
+ {
5303
+ ranges: [[1, 101]],
5304
+ pattern: [{ step: 48, pitch: 56, velocity: 0.8 }]
5305
+ },
5306
+ {
5307
+ ranges: [[2, 101]],
5308
+ pattern: [
5309
+ { step: 0, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
5310
+ { step: 24, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5311
+ { step: 36, pitch: 56, velocity: 0.8 },
5312
+ { step: 48, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
5313
+ { step: 48, pitch: 40, velocity: 0.8 },
5314
+ { step: 72, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5315
+ { step: 72, pitch: 56, velocity: 0.8 },
5316
+ { step: 96, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
5317
+ { step: 120, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 },
5318
+ { step: 144, pitch: DRUM_KEYS.bassDrum1, velocity: 0.8 },
5319
+ { step: 144, pitch: 40, velocity: 0.8 },
5320
+ { step: 168, pitch: DRUM_KEYS.closedHihat, velocity: 0.8 }
5321
+ ]
5322
+ },
5323
+ {
5324
+ ranges: [
5325
+ [1, 6],
5326
+ [17, 18],
5327
+ [21, 46],
5328
+ [57, 58],
5329
+ [61, 101]
5330
+ ],
5331
+ pattern: [{ step: 0, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }]
5332
+ },
5333
+ {
5334
+ ranges: [
5335
+ [1, 5],
5336
+ [19, 45],
5337
+ [59, 101]
5338
+ ],
5339
+ pattern: [{ step: 96, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }]
5340
+ },
5341
+ {
5342
+ ranges: [
5343
+ [1, 4],
5344
+ [14, 20],
5345
+ [22, 28],
5346
+ [30, 36],
5347
+ [38, 44],
5348
+ [54, 60],
5349
+ [62, 68],
5350
+ [70, 76],
5351
+ [78, 84],
5352
+ [86, 92],
5353
+ [94, 100]
5354
+ ],
5355
+ pattern: [
5356
+ { step: 132, pitch: 56, velocity: 0.8 },
5357
+ { step: 144, pitch: 56, velocity: 0.8 },
5358
+ { step: 168, pitch: 56, velocity: 0.8 }
5359
+ ]
5360
+ },
5361
+ {
5362
+ ranges: [
5363
+ [5, 14],
5364
+ [45, 54]
5365
+ ],
5366
+ pattern: [{ step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }]
5367
+ },
5368
+ {
5369
+ ranges: [
5370
+ [7, 13],
5371
+ [15, 16],
5372
+ [47, 53],
5373
+ [55, 56]
5374
+ ],
5375
+ pattern: [{ step: 48, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }]
5376
+ },
5377
+ {
5378
+ ranges: [
5379
+ [6, 12],
5380
+ [46, 52]
5381
+ ],
5382
+ pattern: [
5383
+ { step: 120, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5384
+ { step: 132, pitch: 56, velocity: 0.8 },
5385
+ { step: 144, pitch: 56, velocity: 0.8 },
5386
+ { step: 168, pitch: 56, velocity: 0.8 }
5387
+ ]
5388
+ },
5389
+ {
5390
+ ranges: [
5391
+ [3, 3],
5392
+ [19, 21],
5393
+ [23, 23],
5394
+ [27, 27],
5395
+ [31, 31],
5396
+ [35, 35],
5397
+ [39, 39],
5398
+ [43, 43],
5399
+ [59, 61],
5400
+ [63, 63],
5401
+ [67, 67],
5402
+ [71, 71],
5403
+ [75, 75],
5404
+ [79, 79],
5405
+ [83, 83],
5406
+ [87, 87],
5407
+ [91, 91],
5408
+ [95, 95],
5409
+ [99, 99]
5410
+ ],
5411
+ pattern: [
5412
+ { step: 48, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5413
+ { step: 144, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5414
+ ]
5415
+ },
5416
+ {
5417
+ ranges: [
5418
+ [15, 17],
5419
+ [55, 57]
5420
+ ],
5421
+ pattern: [
5422
+ { step: 96, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5423
+ { step: 144, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5424
+ ]
5425
+ },
5426
+ {
5427
+ ranges: [[1, 1]],
5428
+ pattern: [
5429
+ { step: 0, pitch: 56, velocity: 0.8 },
5430
+ { step: 48, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5431
+ { step: 96, pitch: 56, velocity: 0.8 },
5432
+ { step: 132, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5433
+ { step: 144, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5434
+ { step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5435
+ ]
5436
+ },
5437
+ {
5438
+ ranges: [
5439
+ [2, 2],
5440
+ [6, 6],
5441
+ [22, 22],
5442
+ [26, 26],
5443
+ [30, 30],
5444
+ [34, 34],
5445
+ [38, 38],
5446
+ [42, 42],
5447
+ [46, 46],
5448
+ [62, 62],
5449
+ [66, 66],
5450
+ [70, 70],
5451
+ [74, 74],
5452
+ [78, 78],
5453
+ [82, 82],
5454
+ [86, 86],
5455
+ [90, 90],
5456
+ [94, 94],
5457
+ [98, 98]
5458
+ ],
5459
+ pattern: [{ step: 0, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 }]
5460
+ },
5461
+ {
5462
+ ranges: [
5463
+ [5, 5],
5464
+ [45, 45]
5465
+ ],
5466
+ pattern: [
5467
+ { step: 48, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5468
+ { step: 84, pitch: 56, velocity: 0.8 },
5469
+ { step: 132, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5470
+ { step: 144, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5471
+ ]
5472
+ },
5473
+ {
5474
+ ranges: [
5475
+ [10, 10],
5476
+ [50, 50]
5477
+ ],
5478
+ pattern: [
5479
+ { step: 0, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5480
+ { step: 0, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 }
5481
+ ]
5482
+ },
5483
+ {
5484
+ ranges: [
5485
+ [13, 13],
5486
+ [53, 53]
5487
+ ],
5488
+ pattern: [
5489
+ { step: 0, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5490
+ { step: 84, pitch: 56, velocity: 0.8 },
5491
+ { step: 96, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5492
+ { step: 132, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5493
+ { step: 144, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5494
+ ]
5495
+ },
5496
+ {
5497
+ ranges: [
5498
+ [14, 14],
5499
+ [54, 54]
5500
+ ],
5501
+ pattern: [
5502
+ { step: 0, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
5503
+ { step: 120, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5504
+ ]
5505
+ },
5506
+ {
5507
+ ranges: [
5508
+ [18, 18],
5509
+ [58, 58]
5510
+ ],
5511
+ pattern: [
5512
+ { step: 0, pitch: DRUM_KEYS.splashCymbal, velocity: 0.8 },
5513
+ { step: 120, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5514
+ { step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5515
+ ]
5516
+ },
5517
+ {
5518
+ ranges: [
5519
+ [21, 21],
5520
+ [61, 61]
5521
+ ],
5522
+ pattern: [
5523
+ { step: 84, pitch: 56, velocity: 0.8 },
5524
+ { step: 132, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5525
+ { step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5526
+ ]
5527
+ },
5528
+ {
5529
+ ranges: [
5530
+ [25, 25],
5531
+ [33, 33],
5532
+ [41, 41],
5533
+ [65, 65],
5534
+ [73, 73],
5535
+ [81, 81],
5536
+ [89, 89],
5537
+ [97, 97]
5538
+ ],
5539
+ pattern: [
5540
+ { step: 48, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5541
+ { step: 132, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5542
+ { step: 144, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5543
+ { step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5544
+ ]
5545
+ },
5546
+ {
5547
+ ranges: [
5548
+ [29, 29],
5549
+ [37, 37],
5550
+ [69, 69],
5551
+ [77, 77],
5552
+ [85, 85],
5553
+ [93, 93],
5554
+ [101, 101]
5555
+ ],
5556
+ pattern: [
5557
+ { step: 48, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5558
+ { step: 84, pitch: 56, velocity: 0.8 },
5559
+ { step: 132, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5560
+ { step: 144, pitch: DRUM_KEYS.tambourine, velocity: 0.8 },
5561
+ { step: 168, pitch: DRUM_KEYS.tambourine, velocity: 0.8 }
5562
+ ]
3276
5563
  }
3277
- nowIndex++;
3278
- }
3279
- loopBase = 0;
3280
- lastPlayStep = fromStepValue - 1e-4;
3281
- lastRealTime = -1;
3282
- lastAudioTime = -1;
3283
- intervalId = setInterval(scheduleTick, TICK_INTERVAL_MS);
3284
- animationId = requestAnimationFrame(animate);
3285
- };
3286
- return {
3287
- start,
3288
- stop,
3289
- isActive: () => active,
3290
- getStartTime: () => startTime
3291
- };
5564
+ ]
5565
+ }
3292
5566
  };
3293
5567
 
3294
5568
  // src/synth.ts
@@ -3396,8 +5670,12 @@ var STEPS_PER_BAR = 192;
3396
5670
  var TRACK_ID_BY_INDEX = ["melody", "submelody", "bass", "chord"];
3397
5671
  var playPlacements = (placements, options) => {
3398
5672
  const bpm = options.bpm;
3399
- const drumPatternDict = options.drumPatterns ?? DRUM_PATTERNS;
3400
- const drumPattern = options.metaDrum ? drumPatternDict[options.metaDrum] ?? null : null;
5673
+ const drumPatternDict = {
5674
+ ...DRUM_PATTERNS,
5675
+ ...SONG_DRUM_PATTERNS,
5676
+ ...normalizeDrumPatterns(options.drumPatterns ?? {})
5677
+ };
5678
+ const drumPatternName = options.metaDrum ?? "none";
3401
5679
  let masterVolume = options.metaVolume ?? options.volume ?? 100;
3402
5680
  const drumVolume = options.metaDrumVolume ?? 80;
3403
5681
  const trackIndices = [...new Set(placements.map((p) => p.trackIndex))].sort(
@@ -3429,7 +5707,7 @@ var playPlacements = (placements, options) => {
3429
5707
  getTracks: () => seqTracks,
3430
5708
  getBpm: () => bpm,
3431
5709
  getPlayStartStep: () => options.startStep ?? 0,
3432
- getDrumPattern: () => drumPattern,
5710
+ getDrumPattern: (currentBar) => resolveDrumPattern(drumPatternName, drumPatternDict, currentBar),
3433
5711
  getSoloTrackId: () => null,
3434
5712
  getLoop: () => options.loop ?? false,
3435
5713
  cues: options.cues,
@@ -4251,6 +6529,7 @@ var DAW_CSS = `
4251
6529
  }
4252
6530
  .dtm-output-row { display: flex; gap: 8px; align-items: flex-start; margin-top: 6px; }
4253
6531
  .dtm-output-row pre { flex: 1; }
6532
+ .dtm-output-scroll { max-height: 240px; overflow-y: auto; }
4254
6533
 
4255
6534
  /* \u2500\u2500\u2500 \u30ED\u30FC\u30C7\u30A3\u30F3\u30B0\u30AA\u30FC\u30D0\u30FC\u30EC\u30A4 \u2500\u2500\u2500 */
4256
6535
  .dtm-overlay {
@@ -5503,8 +7782,12 @@ var mountMmlPlayer = (target, mml, options = {}) => {
5503
7782
  parseCustomVocals(mml).map((d) => [d.key, d])
5504
7783
  );
5505
7784
  const bpm = parsedBpm ?? options.defaultBpm ?? DEFAULT_BPM;
5506
- const drumPatternDict = options.drumPatterns ?? DRUM_PATTERNS;
5507
- const drumPattern = meta.drum ? drumPatternDict[meta.drum] ?? null : null;
7785
+ const drumPatternDict = {
7786
+ ...DRUM_PATTERNS,
7787
+ ...SONG_DRUM_PATTERNS,
7788
+ ...normalizeDrumPatterns(options.drumPatterns ?? {})
7789
+ };
7790
+ const drumPatternName = meta.drum ?? "none";
5508
7791
  const trackVolume = meta.volume ?? options.volume ?? 100;
5509
7792
  let masterVolume = options.masterVolume ?? 100;
5510
7793
  const drumVolume = meta.drumVolume ?? 80;
@@ -6319,7 +8602,7 @@ var mountMmlPlayer = (target, mml, options = {}) => {
6319
8602
  getTracks: () => seqTracks,
6320
8603
  getBpm: () => bpm,
6321
8604
  getPlayStartStep: () => 0,
6322
- getDrumPattern: () => drumPattern,
8605
+ getDrumPattern: (currentBar) => resolveDrumPattern(drumPatternName, drumPatternDict, currentBar),
6323
8606
  getSoloTrackId: () => null,
6324
8607
  getAudioTime,
6325
8608
  onPlayNote: (e) => {
@@ -7675,7 +9958,7 @@ var mountChordPlayer = (target, chords, options = {}) => {
7675
9958
  if (beatAbsSec > now + METRONOME_PLAN_AHEAD) break;
7676
9959
  if (beatAbsSec >= now - 0.01) {
7677
9960
  const isDownbeat = beat % 4 === 0;
7678
- const pitch = isDownbeat ? DRUM_KEYS.kick : DRUM_KEYS.hihatClosed;
9961
+ const pitch = isDownbeat ? DRUM_KEYS.bassDrum1 : DRUM_KEYS.closedHihat;
7679
9962
  const velocity = (isDownbeat ? 0.7 : 0.45) * (masterVolume / 100);
7680
9963
  const wafDrum = _drumCache.get(pitch);
7681
9964
  if (wafDrum) {
@@ -7717,7 +10000,7 @@ var mountChordPlayer = (target, chords, options = {}) => {
7717
10000
  metronomeStartPlaySec = playOffsetSec;
7718
10001
  metronomeNextBeat = Math.ceil(playOffsetSec / secondsPerBeat);
7719
10002
  }
7720
- for (const p of [DRUM_KEYS.kick, DRUM_KEYS.hihatClosed]) {
10003
+ for (const p of [DRUM_KEYS.bassDrum1, DRUM_KEYS.closedHihat]) {
7721
10004
  if (!_drumCache.has(p)) loadDrumFont(ctx, p);
7722
10005
  }
7723
10006
  scheduleMetronomeBeats(ctx, cutGain);
@@ -8067,15 +10350,15 @@ var mountChordPlayer = (target, chords, options = {}) => {
8067
10350
  var q = (root, sel) => root.querySelector(sel);
8068
10351
  var buildUI = (target, options) => {
8069
10352
  const {
8070
- drumPatternNames,
10353
+ drumPatterns,
8071
10354
  defaultDrumPattern,
8072
10355
  defaultBpm,
8073
10356
  showMidi,
8074
10357
  showMidiSearch
8075
10358
  } = options;
8076
10359
  const drumOptions = [`<option value="none">\u306A\u3057</option>`].concat(
8077
- drumPatternNames.map(
8078
- (name) => `<option value="${name}" ${name === defaultDrumPattern ? "selected" : ""}>${name}</option>`
10360
+ drumPatterns.map(
10361
+ (p) => `<option value="${p.value}" ${p.value === defaultDrumPattern ? "selected" : ""}>${p.label}</option>`
8079
10362
  )
8080
10363
  ).join("");
8081
10364
  target.innerHTML = `
@@ -8170,6 +10453,21 @@ var buildUI = (target, options) => {
8170
10453
  <span class="dtm-label">\u30EA\u30BA\u30E0</span>
8171
10454
  <select class="dtm-select" data-dtm="drum-select">${drumOptions}</select>
8172
10455
  </div>
10456
+ <div class="dtm-row">
10457
+ <span class="dtm-label">\u97F3\u6E90</span>
10458
+ <select class="dtm-select" data-dtm="drum-font-select">
10459
+ ${[
10460
+ "Chaos_sf2_file",
10461
+ "FluidR3_GM_sf2_file",
10462
+ "JCLive_sf2_file",
10463
+ "SBLive_sf2"
10464
+ ].flatMap(
10465
+ (font) => [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(
10466
+ (id) => `<option value="${font}:${id}">${font} (${id})</option>`
10467
+ )
10468
+ ).join("")}
10469
+ </select>
10470
+ </div>
8173
10471
  <div class="dtm-row">
8174
10472
  <span class="dtm-label">\u97F3\u91CF</span>
8175
10473
  <input type="range" class="dtm-range dtm-grow" data-dtm="drum-volume" value="80" min="0" max="100">
@@ -8245,6 +10543,9 @@ var buildUI = (target, options) => {
8245
10543
  <button class="dtm-btn dtm-btn--accent" data-dtm="export-midi">MIDI\u51FA\u529B</button>
8246
10544
  <button class="dtm-btn dtm-btn--success" data-dtm="generate-mml">MML\u751F\u6210</button>
8247
10545
  </div>
10546
+ <div class="dtm-row">
10547
+ <button class="dtm-btn dtm-btn--primary" data-dtm="drum-json-export" title="\u8AAD\u307F\u8FBC\u3093\u3060MIDI\u306E\u30C9\u30E9\u30E0\u5B9A\u7FA9\u3092JSON\u51FA\u529B">\u30C9\u30E9\u30E0JSON\u51FA\u529B</button>
10548
+ </div>
8248
10549
  <label class="dtm-checkbox-label">
8249
10550
  <input type="checkbox" class="dtm-checkbox" data-dtm="decompose-chord">
8250
10551
  <span>\u548C\u97F3\u5206\u89E3\u30E2\u30FC\u30C9\uFF08\u5358\u97F3\u30C8\u30E9\u30C3\u30AF\u306B\u6700\u9069\u5206\u5272\uFF09</span>
@@ -8265,6 +10566,13 @@ var buildUI = (target, options) => {
8265
10566
  <option value="128">128\u5C0F\u7BC0</option>
8266
10567
  </select>
8267
10568
  </div>
10569
+ <div class="dtm-output dtm-hidden" data-dtm="drum-json-output">
10570
+ <p class="dtm-label" data-dtm="drum-json-status"></p>
10571
+ <div class="dtm-output-row">
10572
+ <pre class="dtm-output-scroll"><code data-dtm="drum-json-text"></code></pre>
10573
+ <button class="dtm-btn dtm-btn--primary dtm-btn--icon" data-dtm="drum-json-copy" title="\u30B3\u30D4\u30FC">${icon("copy")}</button>
10574
+ </div>
10575
+ </div>
8268
10576
  <div class="dtm-output dtm-hidden" data-dtm="output-container">
8269
10577
  <p class="dtm-label" data-dtm="output-status"></p>
8270
10578
  <div class="dtm-output-label">\u6539\u884C\u3042\u308A\u7248</div>
@@ -8332,6 +10640,7 @@ var buildUI = (target, options) => {
8332
10640
  trackTabs: sel("track-tabs"),
8333
10641
  trackBody: sel("track-body"),
8334
10642
  drumSelect: sel("drum-select"),
10643
+ drumFontSelect: sel("drum-font-select"),
8335
10644
  drumVolume: sel("drum-volume"),
8336
10645
  drumVolumeLabel: sel("drum-volume-label"),
8337
10646
  midiInput: sel("midi-input"),
@@ -8351,6 +10660,11 @@ var buildUI = (target, options) => {
8351
10660
  macroHarmonic: sel("macro-harmonic"),
8352
10661
  macroMono: sel("macro-mono"),
8353
10662
  exportMidiBtn: sel("export-midi"),
10663
+ drumJsonExportBtn: sel("drum-json-export"),
10664
+ drumJsonOutput: sel("drum-json-output"),
10665
+ drumJsonStatus: sel("drum-json-status"),
10666
+ drumJsonText: sel("drum-json-text"),
10667
+ drumJsonCopyBtn: sel("drum-json-copy"),
8354
10668
  generateMmlBtn: sel("generate-mml"),
8355
10669
  decomposeChordToggle: sel("decompose-chord"),
8356
10670
  ignoreChordHeavyToggle: sel("ignore-chord-heavy"),
@@ -8793,6 +11107,15 @@ var extractMidiPlacements = (midi, selectedTrackIndices) => {
8793
11107
  });
8794
11108
  }
8795
11109
  }
11110
+ if (placements.length > 0) {
11111
+ const minStartStep = Math.min(...placements.map((p) => p.startStep));
11112
+ const stepsPerBar = STEPS_PER_BEAT3 * 4;
11113
+ const emptyBars = Math.floor(minStartStep / stepsPerBar);
11114
+ if (emptyBars > 0) {
11115
+ const shift = emptyBars * stepsPerBar;
11116
+ for (const p of placements) p.startStep -= shift;
11117
+ }
11118
+ }
8796
11119
  return { placements, bpm };
8797
11120
  };
8798
11121
  var isPlausibleMidiTranscription = (midi, selectedIndices) => {
@@ -8857,6 +11180,15 @@ var extractMidiPlacementsByTrack = (midi, selectedIndices, trackIds) => {
8857
11180
  });
8858
11181
  }
8859
11182
  });
11183
+ if (placements.length > 0) {
11184
+ const minStartStep = Math.min(...placements.map((p) => p.startStep));
11185
+ const stepsPerBar = STEPS_PER_BEAT3 * 4;
11186
+ const emptyBars = Math.floor(minStartStep / stepsPerBar);
11187
+ if (emptyBars > 0) {
11188
+ const shift = emptyBars * stepsPerBar;
11189
+ for (const p of placements) p.startStep -= shift;
11190
+ }
11191
+ }
8860
11192
  return { placements, bpm };
8861
11193
  };
8862
11194
  var to2byte = (n) => [(n & 65280) >> 8, n & 255];
@@ -8891,7 +11223,7 @@ var trackChunks = (arr, func) => {
8891
11223
  arr.push(...a);
8892
11224
  };
8893
11225
  var exportMIDI = (options) => {
8894
- const { tracks, drumPattern, drumVolume = 80, bpm, stepsPerBar } = options;
11226
+ const { tracks, getDrumPattern, drumVolume = 80, bpm, stepsPerBar } = options;
8895
11227
  const div = 480;
8896
11228
  const tickPerStep = div / STEPS_PER_BEAT3;
8897
11229
  const midiTracks = [];
@@ -8913,16 +11245,18 @@ var exportMIDI = (options) => {
8913
11245
  events.sort((a, b) => a.t - b.t);
8914
11246
  midiTracks.push(events);
8915
11247
  });
8916
- if (drumPattern && drumPattern.length > 0) {
8917
- const maxStep = Math.max(
8918
- ...tracks.filter((t) => t.notes.length > 0).map(
8919
- (t) => Math.max(...t.notes.map((n) => n.startStep + n.durationSteps))
8920
- ),
8921
- stepsPerBar
8922
- );
8923
- const drumEvents = [];
8924
- const numBars = Math.ceil(maxStep / stepsPerBar);
8925
- for (let bar = 0; bar < numBars; bar++) {
11248
+ const maxStep = Math.max(
11249
+ ...tracks.filter((t) => t.notes.length > 0).map(
11250
+ (t) => Math.max(...t.notes.map((n) => n.startStep + n.durationSteps))
11251
+ ),
11252
+ stepsPerBar
11253
+ );
11254
+ const drumEvents = [];
11255
+ const numBars = Math.ceil(maxStep / stepsPerBar);
11256
+ for (let bar = 0; bar < numBars; bar++) {
11257
+ const currentBar = bar + 1;
11258
+ const drumPattern = getDrumPattern ? getDrumPattern(currentBar) : null;
11259
+ if (drumPattern && drumPattern.length > 0) {
8926
11260
  const barStart = bar * stepsPerBar;
8927
11261
  for (const drum of drumPattern) {
8928
11262
  const step = barStart + drum.step;
@@ -8940,9 +11274,9 @@ var exportMIDI = (options) => {
8940
11274
  });
8941
11275
  }
8942
11276
  }
8943
- drumEvents.sort((a, b) => a.t - b.t);
8944
- if (drumEvents.length > 0) midiTracks.push(drumEvents);
8945
11277
  }
11278
+ drumEvents.sort((a, b) => a.t - b.t);
11279
+ if (drumEvents.length > 0) midiTracks.push(drumEvents);
8946
11280
  const arr = [];
8947
11281
  headerChunks(arr, midiTracks.length + 1, div);
8948
11282
  trackChunks(arr, (a) => {
@@ -8959,6 +11293,135 @@ var exportMIDI = (options) => {
8959
11293
  }
8960
11294
  return new Blob([new Uint8Array(arr).buffer], { type: "audio/midi" });
8961
11295
  };
11296
+ var extractDrumPatternFromNotes = (rawNotes, drumFont = "FluidR3_GM_sf2_file:0") => {
11297
+ if (rawNotes.length === 0)
11298
+ return { json: "[]", patternDef: { label: "\u62BD\u51FA\u30C9\u30E9\u30E0", pattern: [] } };
11299
+ rawNotes.sort((a, b) => a.step - b.step);
11300
+ const stepsPerBar = STEPS_PER_BEAT3 * 4;
11301
+ if (rawNotes.length > 0) {
11302
+ const emptyBars = Math.floor(rawNotes[0].step / stepsPerBar);
11303
+ if (emptyBars > 0) {
11304
+ const shift = emptyBars * stepsPerBar;
11305
+ for (const note of rawNotes) note.step -= shift;
11306
+ }
11307
+ }
11308
+ const noteRanges = {};
11309
+ for (const note of rawNotes) {
11310
+ const b = Math.floor(note.step / stepsPerBar) + 1;
11311
+ const stepInBar = note.step % stepsPerBar;
11312
+ const key = `${stepInBar}_${note.pitch}_${note.velocity}`;
11313
+ if (!noteRanges[key]) noteRanges[key] = [];
11314
+ if (noteRanges[key][noteRanges[key].length - 1] !== b) {
11315
+ noteRanges[key].push(b);
11316
+ }
11317
+ }
11318
+ const rangeMap = {};
11319
+ for (const key in noteRanges) {
11320
+ const bList = noteRanges[key];
11321
+ let start = bList[0];
11322
+ let prev = bList[0];
11323
+ const parts = key.split("_");
11324
+ const noteObj = { step: +parts[0], pitch: +parts[1], velocity: +parts[2] };
11325
+ for (let i = 1; i <= bList.length; i++) {
11326
+ if (i === bList.length || bList[i] !== prev + 1) {
11327
+ const rKey = `${start}-${prev}`;
11328
+ if (!rangeMap[rKey]) rangeMap[rKey] = [];
11329
+ rangeMap[rKey].push(noteObj);
11330
+ if (i < bList.length) {
11331
+ start = bList[i];
11332
+ prev = bList[i];
11333
+ }
11334
+ } else {
11335
+ prev = bList[i];
11336
+ }
11337
+ }
11338
+ }
11339
+ const patternMap = {};
11340
+ for (const rKey in rangeMap) {
11341
+ const [s, e] = rKey.split("-");
11342
+ const pattern = rangeMap[rKey].sort((a, b) => a.step - b.step);
11343
+ const pKey = JSON.stringify(pattern);
11344
+ if (!patternMap[pKey]) patternMap[pKey] = [];
11345
+ patternMap[pKey].push([+s, +e]);
11346
+ }
11347
+ const instructions = [];
11348
+ for (const pKey in patternMap) {
11349
+ const ranges = patternMap[pKey];
11350
+ ranges.sort((a, b) => a[0] - b[0]);
11351
+ instructions.push({
11352
+ ranges,
11353
+ pattern: JSON.parse(pKey)
11354
+ });
11355
+ }
11356
+ instructions.sort((a, b) => {
11357
+ const durA = a.ranges.reduce(
11358
+ (sum, r) => sum + (r[1] - r[0]),
11359
+ 0
11360
+ );
11361
+ const durB = b.ranges.reduce(
11362
+ (sum, r) => sum + (r[1] - r[0]),
11363
+ 0
11364
+ );
11365
+ if (durA !== durB) return durB - durA;
11366
+ return a.ranges[0][0] - b.ranges[0][0];
11367
+ });
11368
+ const json = buildDrumPatternJson(instructions, drumFont);
11369
+ const patternDef = {
11370
+ label: "\u62BD\u51FA\u30C9\u30E9\u30E0",
11371
+ pattern: instructions
11372
+ };
11373
+ return { json, patternDef };
11374
+ };
11375
+ var buildDrumPatternJson = (instructions, drumFont) => {
11376
+ const pitchToDrumKey = Object.entries(DRUM_KEYS).reduce(
11377
+ (acc, [key, val]) => {
11378
+ acc[val] = `DRUM_KEYS.${key}`;
11379
+ return acc;
11380
+ },
11381
+ {}
11382
+ );
11383
+ const instructionStrings = instructions.map((inst) => {
11384
+ const rangesStr = `[${inst.ranges.map((r) => `[${r[0]}, ${r[1]}]`).join(", ")}]`;
11385
+ const patternLines = inst.pattern.map((n) => {
11386
+ const pitchStr = pitchToDrumKey[n.pitch] ?? n.pitch;
11387
+ return ` { step: ${n.step}, pitch: ${pitchStr}, velocity: ${n.velocity} },`;
11388
+ }).join("\n");
11389
+ return ` {
11390
+ ranges: ${rangesStr},
11391
+ pattern: [
11392
+ ${patternLines}
11393
+ ],
11394
+ }`;
11395
+ });
11396
+ const patternStr = `[
11397
+ ${instructionStrings.join(",\n")}
11398
+ ]`;
11399
+ return ` extracted_song: {
11400
+ label: "\u62BD\u51FA\u30C9\u30E9\u30E0",
11401
+ font: "${drumFont}",
11402
+ pattern: ${patternStr}
11403
+ },`;
11404
+ };
11405
+ var extractMidiDrumPattern = (midi, drumFont = "FluidR3_GM_sf2_file:0") => {
11406
+ const { tracks, division } = midi;
11407
+ const ticksPerBeat = division;
11408
+ const rawNotes = [];
11409
+ for (const track of tracks) {
11410
+ let currentTime = 0;
11411
+ for (const event of track) {
11412
+ currentTime += event.delta;
11413
+ if (event.channel === 9 && event.noteOn && event.noteOn.velocity > 0) {
11414
+ const step = Math.round(currentTime * STEPS_PER_BEAT3 / ticksPerBeat);
11415
+ rawNotes.push({
11416
+ step,
11417
+ pitch: event.noteOn.noteNumber,
11418
+ velocity: Math.round(event.noteOn.velocity / 127 * 10) / 10
11419
+ });
11420
+ }
11421
+ }
11422
+ }
11423
+ return extractDrumPatternFromNotes(rawNotes, drumFont);
11424
+ };
8962
11425
 
8963
11426
  // src/midi-search.ts
8964
11427
  var MidiSearchClient = class {
@@ -10083,14 +12546,22 @@ var mountDAW = (target, options = {}) => {
10083
12546
  const trackConfigs = options.tracks ?? DEFAULT_TRACKS;
10084
12547
  const mode = options.mode ?? (trackConfigs.length > TRACKS_SIMPLE.length ? "advanced" : "simple");
10085
12548
  const isAdvanced = mode === "advanced";
10086
- const drumPatterns = options.drumPatterns ?? DRUM_PATTERNS;
12549
+ const userPatterns = normalizeDrumPatterns(options.drumPatterns ?? {});
12550
+ const drumPatterns = {
12551
+ ...DRUM_PATTERNS,
12552
+ ...SONG_DRUM_PATTERNS,
12553
+ ...userPatterns
12554
+ };
10087
12555
  const showMidi = !!options.parseMidi;
10088
12556
  const showChord = !isAdvanced;
10089
12557
  const midiSearchClient = options.midiSearch ? new MidiSearchClient(options.midiSearch) : void 0;
10090
12558
  const showMidiSearch = !!midiSearchClient?.enabled;
10091
12559
  const refs = buildUI(target, {
10092
12560
  tracks: trackConfigs,
10093
- drumPatternNames: Object.keys(drumPatterns),
12561
+ drumPatterns: Object.entries(drumPatterns).map(([key, def]) => ({
12562
+ value: key,
12563
+ label: def.label
12564
+ })),
10094
12565
  defaultDrumPattern: drumPatterns.dance ? "dance" : Object.keys(drumPatterns)[0] ?? "none",
10095
12566
  defaultBpm: options.defaultBpm ?? DEFAULT_BPM,
10096
12567
  showMidi,
@@ -10116,6 +12587,8 @@ var mountDAW = (target, options = {}) => {
10116
12587
  options.singingVoices?.setVolume(masterVolume / 100);
10117
12588
  let drumVolume = options.drumVolume ?? 80;
10118
12589
  let currentDrumPattern = refs.drumSelect.value;
12590
+ let currentDrumFont = options.drumFont ?? "FluidR3_GM_sf2_file:0";
12591
+ refs.drumFontSelect.value = currentDrumFont;
10119
12592
  let currentInstrument = "";
10120
12593
  let activeTrackId = options.initialActiveTrack ?? trackConfigs[0].id;
10121
12594
  let activeToolMode = "pen";
@@ -10942,7 +13415,7 @@ var mountDAW = (target, options = {}) => {
10942
13415
  })),
10943
13416
  getBpm: () => bpm,
10944
13417
  getPlayStartStep: () => playStartStep,
10945
- getDrumPattern: () => drumPatterns[currentDrumPattern] ?? null,
13418
+ getDrumPattern: (currentBar) => resolveDrumPattern(currentDrumPattern, drumPatterns, currentBar),
10946
13419
  getSoloTrackId: () => isSolo ? activeTrackId : null,
10947
13420
  getAudioTime,
10948
13421
  onPlayNote: (e) => {
@@ -11075,6 +13548,12 @@ var mountDAW = (target, options = {}) => {
11075
13548
  playbackState = "paused";
11076
13549
  updateTransport();
11077
13550
  };
13551
+ const reloadVoicesForModel = (model) => {
13552
+ const voices = options.singingVoices;
13553
+ if (!voices || !model || playbackState !== "playing") return;
13554
+ pause();
13555
+ void play();
13556
+ };
11078
13557
  const stop = () => {
11079
13558
  sequencer.stop();
11080
13559
  options.singingVoices?.stopStream();
@@ -11399,6 +13878,7 @@ var mountDAW = (target, options = {}) => {
11399
13878
  syncInstDisabled();
11400
13879
  syncVelocityDisabled();
11401
13880
  fireLyricsChange(active);
13881
+ reloadVoicesForModel(active.lyricModel);
11402
13882
  });
11403
13883
  lyricCustomGuide.addEventListener("click", () => {
11404
13884
  showModal("\u30AB\u30B9\u30BF\u30E0\u97F3\u58F0(.koe)\u306E\u4F7F\u3044\u65B9", KOE_INFO_HTML);
@@ -11440,6 +13920,7 @@ var mountDAW = (target, options = {}) => {
11440
13920
  active.lyricModel = key;
11441
13921
  fireLyricsChange(active);
11442
13922
  updateTrackPanel();
13923
+ reloadVoicesForModel(key);
11443
13924
  });
11444
13925
  lyricOctaveSel.addEventListener("change", () => {
11445
13926
  active.vocalOctave = Number.parseInt(lyricOctaveSel.value, 10);
@@ -11748,6 +14229,11 @@ var mountDAW = (target, options = {}) => {
11748
14229
  currentInstrument = meta.instrument;
11749
14230
  options.onInstrumentChange?.(meta.instrument);
11750
14231
  }
14232
+ if (meta.drumFont) {
14233
+ currentDrumFont = meta.drumFont;
14234
+ refs.drumFontSelect.value = meta.drumFont;
14235
+ options.onDrumFontChange?.(meta.drumFont);
14236
+ }
11751
14237
  if (meta.drum && drumPatterns[meta.drum]) {
11752
14238
  currentDrumPattern = meta.drum;
11753
14239
  refs.drumSelect.value = meta.drum;
@@ -11761,7 +14247,7 @@ var mountDAW = (target, options = {}) => {
11761
14247
  if (meta.drumVolume !== void 0) {
11762
14248
  drumVolume = meta.drumVolume;
11763
14249
  refs.drumVolume.value = String(meta.drumVolume);
11764
- refs.drumVolumeLabel.textContent = `${meta.drumVolume}%`;
14250
+ refs.drumVolumeLabel.textContent = `${drumVolume}%`;
11765
14251
  }
11766
14252
  }
11767
14253
  trackStates.forEach((t, i) => {
@@ -11935,7 +14421,7 @@ var mountDAW = (target, options = {}) => {
11935
14421
  notes: t.core.getNotes(),
11936
14422
  volume: t.volume
11937
14423
  })),
11938
- drumPattern: drumPatterns[currentDrumPattern],
14424
+ getDrumPattern: (currentBar) => resolveDrumPattern(currentDrumPattern, drumPatterns, currentBar),
11939
14425
  drumVolume,
11940
14426
  bpm,
11941
14427
  stepsPerBar: renderConfig.stepsPerBar
@@ -12109,6 +14595,10 @@ var mountDAW = (target, options = {}) => {
12109
14595
  currentDrumPattern = refs.drumSelect.value;
12110
14596
  options.onDrumChange?.(currentDrumPattern);
12111
14597
  });
14598
+ refs.drumFontSelect.addEventListener("change", () => {
14599
+ currentDrumFont = refs.drumFontSelect.value;
14600
+ options.onDrumFontChange?.(currentDrumFont);
14601
+ });
12112
14602
  refs.drumVolume.addEventListener("input", () => {
12113
14603
  drumVolume = Number.parseInt(refs.drumVolume.value, 10) || 0;
12114
14604
  refs.drumVolumeLabel.textContent = `${drumVolume}%`;
@@ -12345,6 +14835,23 @@ var mountDAW = (target, options = {}) => {
12345
14835
  };
12346
14836
  let pendingMidi = null;
12347
14837
  let detectedTracks = [];
14838
+ let extractedMidiDrum = null;
14839
+ const applyExtractedDrumPattern = (patternDef) => {
14840
+ extractedMidiDrum = patternDef.pattern;
14841
+ drumPatterns["_extracted_midi"] = patternDef;
14842
+ let option = refs.drumSelect.querySelector(
14843
+ `option[value="_extracted_midi"]`
14844
+ );
14845
+ if (!option) {
14846
+ option = document.createElement("option");
14847
+ option.value = "_extracted_midi";
14848
+ refs.drumSelect.appendChild(option);
14849
+ }
14850
+ option.textContent = patternDef.label;
14851
+ currentDrumPattern = "_extracted_midi";
14852
+ refs.drumSelect.value = "_extracted_midi";
14853
+ options.onDrumChange?.("_extracted_midi");
14854
+ };
12348
14855
  const wireMidi = () => {
12349
14856
  refs.midiInput.addEventListener("change", async () => {
12350
14857
  const file = refs.midiInput.files?.[0];
@@ -12354,6 +14861,15 @@ var mountDAW = (target, options = {}) => {
12354
14861
  const buffer = new Uint8Array(await file.arrayBuffer());
12355
14862
  pendingMidi = await options.parseMidi(buffer);
12356
14863
  detectedTracks = analyzeMidiTracks(pendingMidi);
14864
+ try {
14865
+ const { patternDef } = extractMidiDrumPattern(
14866
+ pendingMidi,
14867
+ currentDrumFont
14868
+ );
14869
+ applyExtractedDrumPattern(patternDef);
14870
+ } catch (e) {
14871
+ console.error(e);
14872
+ }
12357
14873
  refs.midiTrackSelection.innerHTML = `<span class="dtm-label">\u30C8\u30E9\u30C3\u30AF</span>`;
12358
14874
  detectedTracks.forEach((t, i) => {
12359
14875
  const btn = document.createElement("button");
@@ -12459,6 +14975,24 @@ var mountDAW = (target, options = {}) => {
12459
14975
  }
12460
14976
  };
12461
14977
  let mmlSearchCache = null;
14978
+ refs.drumJsonExportBtn.addEventListener("click", () => {
14979
+ if (!extractedMidiDrum) {
14980
+ alert("MIDI\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
14981
+ return;
14982
+ }
14983
+ const json = buildDrumPatternJson(extractedMidiDrum, currentDrumFont);
14984
+ refs.drumJsonOutput.classList.remove("dtm-hidden");
14985
+ refs.drumJsonText.textContent = json;
14986
+ refs.drumJsonStatus.textContent = `\u51FA\u529B: ${json.length}\u6587\u5B57`;
14987
+ });
14988
+ refs.drumJsonCopyBtn.addEventListener("click", () => {
14989
+ navigator.clipboard?.writeText(refs.drumJsonText.textContent ?? "");
14990
+ refs.drumJsonCopyBtn.classList.add("dtm-btn--success");
14991
+ setTimeout(
14992
+ () => refs.drumJsonCopyBtn.classList.remove("dtm-btn--success"),
14993
+ 1200
14994
+ );
14995
+ });
12462
14996
  let chordSearchCache = null;
12463
14997
  const wireMidiSearch = () => {
12464
14998
  if (!midiSearchClient) return;
@@ -12951,6 +15485,25 @@ var mountDAW = (target, options = {}) => {
12951
15485
  currentInstrument = name;
12952
15486
  },
12953
15487
  getDrum: () => currentDrumPattern,
15488
+ getUsedDrumKeys: () => getDrumPatternKeys(currentDrumPattern, drumPatterns),
15489
+ getDrumFont: () => currentDrumFont,
15490
+ setDrumFont: (fontId) => {
15491
+ currentDrumFont = fontId;
15492
+ refs.drumFontSelect.value = fontId;
15493
+ options.onDrumFontChange?.(fontId);
15494
+ },
15495
+ addDrumPattern: (name, pattern) => {
15496
+ drumPatterns[name] = pattern;
15497
+ let option = refs.drumSelect.querySelector(
15498
+ `option[value="${name}"]`
15499
+ );
15500
+ if (!option) {
15501
+ option = document.createElement("option");
15502
+ option.value = name;
15503
+ refs.drumSelect.appendChild(option);
15504
+ }
15505
+ option.textContent = pattern.label;
15506
+ },
12954
15507
  setDrum: (name) => {
12955
15508
  if (name !== "none" && !drumPatterns[name]) return;
12956
15509
  currentDrumPattern = name;
@@ -13094,8 +15647,12 @@ var playSingingMML = async (mml, options = {}) => {
13094
15647
  );
13095
15648
  const bpm = parsedBpm ?? options.defaultBpm ?? DEFAULT_BPM;
13096
15649
  const secondsPerStep = 60 / bpm / STEPS_PER_BEAT4;
13097
- const drumPatternDict = options.drumPatterns ?? DRUM_PATTERNS;
13098
- const drumPattern = meta.drum ? drumPatternDict[meta.drum] ?? null : null;
15650
+ const drumPatternDict = {
15651
+ ...DRUM_PATTERNS,
15652
+ ...SONG_DRUM_PATTERNS,
15653
+ ...normalizeDrumPatterns(options.drumPatterns ?? {})
15654
+ };
15655
+ const drumPatternName = meta.drum ?? "none";
13099
15656
  const drumVolume = meta.drumVolume ?? 80;
13100
15657
  const trackVolume = meta.volume ?? 100;
13101
15658
  let masterVolume = options.volume ?? 100;
@@ -13159,7 +15716,7 @@ var playSingingMML = async (mml, options = {}) => {
13159
15716
  getTracks: () => seqTracks,
13160
15717
  getBpm: () => bpm,
13161
15718
  getPlayStartStep: () => options.startStep ?? 0,
13162
- getDrumPattern: () => drumPattern,
15719
+ getDrumPattern: (currentBar) => resolveDrumPattern(drumPatternName, drumPatternDict, currentBar),
13163
15720
  getSoloTrackId: () => null,
13164
15721
  getLoop: () => options.loop ?? false,
13165
15722
  cues: options.cues,
@@ -13780,23 +16337,32 @@ var SoundFont_drum = new class {
13780
16337
  id,
13781
16338
  Map
13782
16339
  );
13783
- if (!map.size) {
13784
- for (const [pitch, sf] of await Promise.all(
13785
- [...keys].map(async (key) => {
16340
+ const missingKeys = keys.filter((k) => !map.has(k));
16341
+ if (missingKeys.length > 0) {
16342
+ const results = await Promise.all(
16343
+ missingKeys.map(async (key) => {
13786
16344
  const fontName = `${key}_${id}_${font}`;
13787
- return [
13788
- Number(key),
13789
- await SoundFont.load({
16345
+ try {
16346
+ const sf = await SoundFont.load({
13790
16347
  ctx,
13791
16348
  fontName: `_drum_${fontName}`,
13792
16349
  url: `https://surikov.github.io/webaudiofontdata/sound/128${fontName}.js`,
13793
16350
  isDrum: true,
13794
16351
  pitchs: [key]
13795
- })
13796
- ];
16352
+ });
16353
+ return [Number(key), sf];
16354
+ } catch (e) {
16355
+ console.warn(
16356
+ `[dtm] \u30C9\u30E9\u30E0\u30AD\u30FC ${key} \u306E\u30ED\u30FC\u30C9\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3057\u305F`,
16357
+ e
16358
+ );
16359
+ return null;
16360
+ }
13797
16361
  })
13798
- ))
13799
- map.set(pitch, sf);
16362
+ );
16363
+ for (const res of results) {
16364
+ if (res) map.set(res[0], res[1]);
16365
+ }
13800
16366
  }
13801
16367
  this.font = map;
13802
16368
  }
@@ -13941,18 +16507,28 @@ var createDtmStudio = async (options = {}) => {
13941
16507
  sfList.init();
13942
16508
  sfList.onload(() => resolve());
13943
16509
  });
13944
- const drumReady = (async () => {
16510
+ const loadedDrumKeys = /* @__PURE__ */ new Map();
16511
+ const loadRequiredDrums = async (keys, drumFontStr = "FluidR3_GM_sf2_file:0") => {
16512
+ const [font, id] = drumFontStr.split(":");
16513
+ let set = loadedDrumKeys.get(drumFontStr);
16514
+ if (!set) {
16515
+ set = /* @__PURE__ */ new Set();
16516
+ loadedDrumKeys.set(drumFontStr, set);
16517
+ }
16518
+ const newKeys = keys.filter((k) => !set.has(k));
13945
16519
  try {
13946
16520
  await sfDrum.load({
13947
16521
  ctx: audioCtx,
13948
- font: DRUM_FONT,
13949
- id: "0",
13950
- keys: Object.values(DRUM_KEYS)
16522
+ font,
16523
+ id: id || "0",
16524
+ keys: newKeys
13951
16525
  });
16526
+ for (const k of newKeys) set.add(k);
13952
16527
  } catch (e) {
13953
16528
  console.error("[dtm] \u30C9\u30E9\u30E0\u97F3\u6E90\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557", e);
13954
16529
  }
13955
- })();
16530
+ };
16531
+ const drumReady = Promise.resolve();
13956
16532
  let nameToKey = {};
13957
16533
  const resolveNameToKey = (name) => {
13958
16534
  if (nameToKey[name]) return nameToKey[name];
@@ -14181,9 +16757,16 @@ var createDtmStudio = async (options = {}) => {
14181
16757
  trackInstOverrides.set(trackIndex, key);
14182
16758
  await loadInstrument(key);
14183
16759
  };
16760
+ let daw;
14184
16761
  const base = {
14185
16762
  getAudioTime: () => audioCtx.currentTime,
14186
- onResumeAudio: resumeAudio,
16763
+ onResumeAudio: async () => {
16764
+ await resumeAudio();
16765
+ if (daw) {
16766
+ await loadRequiredDrums(daw.getUsedDrumKeys(), daw.getDrumFont());
16767
+ }
16768
+ await dawOverrides.onResumeAudio?.();
16769
+ },
14187
16770
  onPlayNote: playNote4,
14188
16771
  onPlayDrum: playDrum,
14189
16772
  singingVoices,
@@ -14193,9 +16776,29 @@ var createDtmStudio = async (options = {}) => {
14193
16776
  void handleTrackInstrumentChange(idx, name);
14194
16777
  externalOnTrackInstrumentChange?.(idx, name);
14195
16778
  },
14196
- ...dawOverrides
16779
+ ...dawOverrides,
16780
+ // dawOverrides で上書きされないよう、スプレッドの後に配置して合成する
16781
+ onDrumChange: (name) => {
16782
+ if (daw) {
16783
+ void loadRequiredDrums(daw.getUsedDrumKeys(), daw.getDrumFont());
16784
+ }
16785
+ dawOverrides.onDrumChange?.(name);
16786
+ },
16787
+ // ドラム音源変更も楽器変更と同じく、再生中なら停止→ロード→再開する
16788
+ onDrumFontChange: (fontId) => {
16789
+ if (daw) {
16790
+ const wasPlaying = daw.getPlaybackState() === "playing";
16791
+ if (wasPlaying) daw.pause();
16792
+ daw.setLoading?.(true);
16793
+ void loadRequiredDrums(daw.getUsedDrumKeys(), fontId).finally(() => {
16794
+ daw.setLoading?.(false);
16795
+ if (wasPlaying) daw.play();
16796
+ });
16797
+ }
16798
+ dawOverrides.onDrumFontChange?.(fontId);
16799
+ }
14197
16800
  };
14198
- const daw = mountDAW(target, base);
16801
+ daw = mountDAW(target, base);
14199
16802
  mountedEditors.push(daw);
14200
16803
  const wantPresetUI = presetUI ?? features.presetUI;
14201
16804
  const rollEl = target.querySelector('[data-dtm="roll"]');
@@ -14401,7 +17004,19 @@ var createDtmStudio = async (options = {}) => {
14401
17004
  };
14402
17005
  const player = mountMmlPlayer(target, mml, {
14403
17006
  getAudioTime: () => audioCtx.currentTime,
14404
- onResumeAudio: resumeAudio,
17007
+ onResumeAudio: async () => {
17008
+ await resumeAudio();
17009
+ if (meta.drum) {
17010
+ await loadRequiredDrums(
17011
+ getDrumPatternKeys(
17012
+ meta.drum,
17013
+ opts.drumPatterns ?? options.drumPatterns ?? DRUM_PATTERNS
17014
+ ),
17015
+ meta.drumFont || "FluidR3_GM_sf2_file:0"
17016
+ );
17017
+ }
17018
+ await opts.onResumeAudio?.();
17019
+ },
14405
17020
  onPlayNote: playPlayerNote,
14406
17021
  onPlayDrum: playDrum,
14407
17022
  singingVoices,
@@ -14480,7 +17095,18 @@ var createDtmStudio = async (options = {}) => {
14480
17095
  synth: false,
14481
17096
  onPlayNote: playPlayerNote,
14482
17097
  onPlayDrum: playDrum,
14483
- onResumeAudio: resumeAudio
17098
+ onResumeAudio: async () => {
17099
+ await resumeAudio();
17100
+ if (meta.drum) {
17101
+ await loadRequiredDrums(
17102
+ getDrumPatternKeys(
17103
+ meta.drum,
17104
+ opts.drumPatterns ?? options.drumPatterns ?? DRUM_PATTERNS
17105
+ )
17106
+ );
17107
+ }
17108
+ await opts.onResumeAudio?.();
17109
+ }
14484
17110
  });
14485
17111
  };
14486
17112
  const playSingingMMLInstance = (mml, opts = {}) => {
@@ -14549,7 +17175,18 @@ var createDtmStudio = async (options = {}) => {
14549
17175
  singingVoices,
14550
17176
  onPlayNote: playPlayerNote,
14551
17177
  onPlayDrum: playDrum,
14552
- onResumeAudio: resumeAudio
17178
+ onResumeAudio: async () => {
17179
+ await resumeAudio();
17180
+ if (meta.drum) {
17181
+ await loadRequiredDrums(
17182
+ getDrumPatternKeys(
17183
+ meta.drum,
17184
+ opts.drumPatterns ?? options.drumPatterns ?? DRUM_PATTERNS
17185
+ )
17186
+ );
17187
+ }
17188
+ await opts.onResumeAudio?.();
17189
+ }
14553
17190
  });
14554
17191
  };
14555
17192
  const playNoteEvent = (e) => {
@@ -14742,6 +17379,7 @@ export {
14742
17379
  applyHarmonicFilter,
14743
17380
  applyMonophonic,
14744
17381
  buildChordPlacements,
17382
+ buildDrumPatternJson,
14745
17383
  buildNameToKeyMapping,
14746
17384
  collectPitchTokens,
14747
17385
  createAudioContext,
@@ -14764,12 +17402,15 @@ export {
14764
17402
  drawSelectionRect,
14765
17403
  encodeMml,
14766
17404
  exportMIDI,
17405
+ extractDrumPatternFromNotes,
17406
+ extractMidiDrumPattern,
14767
17407
  extractMidiPlacements,
14768
17408
  extractMidiPlacementsByTrack,
14769
17409
  formatMmlMeta,
14770
17410
  freqFromPitch,
14771
17411
  generateRandomPattern,
14772
17412
  getDrawOffset,
17413
+ getDrumPatternKeys,
14773
17414
  getGridCanvas,
14774
17415
  getGridContext,
14775
17416
  getGridPosition,
@@ -14787,6 +17428,7 @@ export {
14787
17428
  mountChordPlayer,
14788
17429
  mountDAW,
14789
17430
  mountMmlPlayer,
17431
+ normalizeDrumPatterns,
14790
17432
  normalizeLyrics,
14791
17433
  onClick,
14792
17434
  panToStereo,
@@ -14799,6 +17441,7 @@ export {
14799
17441
  playNote,
14800
17442
  playPlacements,
14801
17443
  playSingingMML,
17444
+ resolveDrumPattern,
14802
17445
  resolveLoopPoint,
14803
17446
  setBackgroundActive,
14804
17447
  setDrawOffset,