Strudelify
Smokin' In The Boy's Room cover art

1973 · Yeah! (US Internet Release)

Smokin' In The Boy's Room

Brownsville Station

KeyD majorTempo138 bpm
0:00/0:00
// Smokin' In The Boy's Room — Brownsville Station
// 138 bpm, 4/4, key D major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Gtr1.
setcpm(138/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · harmonica · "Coras"
const harmonica = note("<~@18 A ~ B ~@15 A ~ B ~@39 A ~ B ~@7 A ~ B ~ A ~ C@2 ~@6 A ~ B ~@9 D@2 E>".pickRestart({
  A: "a5@2 ~ a5 g5@2 ~ g5 f5@4 a5@3 ~", B: "a5@2 ~ a5 a5@2 ~ g5 f5@3 ~ a5@3 ~",
  C: "[a5@2 ~ a5 a5@2 ~ g5 f5@3 ~ a5@11 ~@9]/2", D: "[~@7 a4 ~ g#4 ~@2 a4 ~ a4@5 ~@2 a4 ~ g4 ~@2 f4@5 ~]/2",
  E: "~@3 a4@2 ~@11",
})).s("gm_harmonica").gain(0.15).pan(1)

// other · overdriven guitar · "Gtr1"
const overdriven_guitar = note("<~@19 A B C ~@15 D ~ C ~@62 E F ~ G ~@11>".pickRestart({
  A: "b3@3 g3@2 a2@3 g2@5 ~@3", B: "~@7 f5", C: "f3@3 [e3,f3]@2 ~ [e3,f3] ~ d3@5 ~@3, e3 ~@15",
  D: "b3@3 g3@3 f5@2 d5@5 ~@3", E: "~@15 a4", F: "d5@3 b4@3 b4@2 b4 ~ g4@3 ~@3",
  G: "d5 ~ c5 ~ a4 ~ g4 ~ f5 ~ d5@4 ~@2, ~ c#5@2 ~@2 g#4@2 ~@9",
})).s("gm_overdriven_guitar").gain(0.36).pan(1)

// chords · overdriven guitar · "gtr1"
const overdriven_guitar_2 = note("<~@53 A B C D E F G H I@2 ~@24 J ~@13 J ~@8 K L M@4 N>".pickRestart({
  A: "~@14 a#3 ~", B: "b3@3 ~ g3@3 ~@4 d4 c4@3 ~", C: "b3@3 ~ g3@3 ~ f3 d3 ~ c3!2 b2 ~ g2",
  D: "f3@3 ~ d3@3 ~ f4@3 ~ d4@3 ~", E: "f4@3 [g4,a4]@2 ~ [e4,f4] ~ d4@5 ~ b3 ~",
  F: "d4 ~ g4 ~ g4 f4 ~ b3 f4 ~ g4@4 ~ b3", G: "f4@2 ~ g4@2 ~ [a4,b4]@2 g4@8",
  H: "e4@2 ~ a4!2 g4 ~ e4 a4 g4 ~ e4 g4 ~ a4 ~", I: "[e5@2 ~ e5@2 ~ c#5@2 ~ a4@16 ~@7]/2",
  J: "[d3,a3]@3 ~ [e3,b3]@3 ~ [f3,c4]@3 ~ [f#3,c#4]@3 ~", K: "~@7 d4@6 ~@3", L: "f#4@6 ~@3 a4@6 ~",
  M: "[~@2 c5@6 ~@3 e5@53]/4", N: "~@3 e5@2 ~@11",
})).s("gm_overdriven_guitar").gain(0.31).pan(0.3)

// chords · overdriven guitar · "gtr1" · soft notes
const overdriven_guitar_soft = note("<~@69 A B C D E B C D F ~@7 A G ~@12 A G ~@16>".pickRestart({
  A: "~@7 [c#2,g#2]", B: "[d2,a2]@11 ~@3 [c#2,g#2]@2", C: "[d2,a2]@11 ~@3 e2@2", D: "[a#1,f2]@11 ~@3 e2@2",
  E: "[a#1,f2]@11 ~@3 [c#2,g#2]@2", F: "[a#1,f2]@11 ~@5", G: "[d2,a2]@11 ~@5",
})).s("gm_overdriven_guitar").gain(0.15).pan(0.3)

// other · distortion guitar · "Gtr2"
const distortion_guitar = note("<~@61 A@2 B C D E F G H ~@17 I ~@13 I ~@8 J K L@4 M>".pickRestart({
  A: "[~@15 g4@4 ~ g4 f4 ~ e4 d4 c#4 ~ c4 d4 c#4 ~ c4]/2", B: "b3 g3@2 ~ b3 g3 ~ f3 d3 c#3 ~ c3 d3 c#3 ~ c3",
  C: "e3 f3@2 ~ d3@3 ~ f4@3 ~ d4@3 ~", D: "f4@3 a4 ~@2 f4 ~ d4@5 ~ b3 ~", E: "d4@2 ~ g4!2 f4 ~ d4 f4 ~ g4@5 ~",
  F: "f4@3 ~@3 b4@2 g4@8, ~@3 g4@4 ~@9, ~@5 a#4@2 ~@9", G: "~@2 b3@3 b3@3 b3@4 ~ b3 a3 ~",
  H: "~@2 e4@3 e4@3 e4 e4@3 e4@4", I: "[d3,a3]@3 ~ [e3,b3]@3 ~ [f3,c4]@3 ~ [f#3,c#4]@3 ~", J: "~@7 d4@6 ~@3",
  K: "b3@6 ~@3 a3@6 ~", L: "[~@2 f3@6 ~@3 d3@53]/4", M: "~@3 d3@2 ~@11",
})).s("gm_distortion_guitar").gain(0.36).pan(0.8)

// chords · overdriven guitar · "Gtr1" · C#5
const overdriven_guitar_3 = note("<~@5 [[c#3,g#3] ~@15] ~@111>").s("gm_overdriven_guitar").gain(0.31).pan(0.8)

// chords · electric guitar muted · "GtrMuted"
const electric_guitar_muted = note(`<
  ~@22 A B A ~@15 A B A ~@3 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 ~@14 A B A ~@11 A B A ~@7 A B A E ~@7
>`.pickRestart({
  A: "[a2,e3,a3] ~@2 [a2,e3,a3]!2 ~@2 [a2,e3,a3]!2 ~@2 [a2,e3,a3]!2 ~@2 [a2,e3,a3]", // A5
  B: "[g2,d3,g3] ~@2 [g2,d3,g3]!2 ~@2 [g2,d3,g3]!2 ~@2 [g2,d3,g3]!2 ~@2 [g2,d3,g3]", // G5
  C: "[g3,b3] ~@2 [g3,b3] [g3,c4] ~@2 [g3,b3]!2 ~@2 [g3,b3] [g3,c4] ~@2 [g3,b3]", // G C5 G C5 G
  D: "[d3,f#3] ~@2 [d3,f#3] [d3,g3] ~@2 [d3,f#3]!2 ~@2 [d3,f#3] [d3,g3] ~@2 [d3,f#3]", E: "[g2,d3,g3] ~@7",
})).s("gm_electric_guitar_muted").gain(0.15).pan(0.8)

// chords · distortion guitar · "gtr2"
const distortion_guitar_2 = note(`<
  ~@18 A@2 B@2 C A C D ~@10 A@2 B@2 C A C D ~@2 E@2 F@2 E@2 G@2 E@2 F@2 E@2 G@2 E@2 F@2 E@2 H I ~@8 A@2 B@2 C A C D ~@10
  C A C D ~@2 A@2 B@2 C A C J ~@7
>`.pickRestart({
  A: "[g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,d3]!2 ~@2 [g2,d3] [g2,e3] ~@2 [g2,d3]", // G5 C G5 C G5
  B: "[d3,a3] ~@2 [d3,a3] [d3,b3] ~@2 [d3,a3]!2 ~@2 [d3,a3] [d3,b3] ~@2 [d3,a3]", // D5 G D5 G D5
  C: "[a2,e3] ~@2 [a2,e3] [a2,f#3] ~@2 [a2,e3]!2 ~@2 [a2,e3] [a2,f#3] ~@2 [a2,e3]", D: "[g2,d3]@11 ~@5",
  E: "[g2,d3,g3] ~@2 [g2,d3,g3]!2 ~@2 [g2,d3,g3]!2 ~@2 [g2,d3,g3]!2 ~@2 [g2,d3,g3]", // G5
  F: "[d3,a3,d4] ~@2 [d3,a3,d4]!2 ~@2 [d3,a3,d4]!2 ~@2 [d3,a3,d4]!2 ~@2 [d3,a3,d4]", // D5
  G: "[a2,e3,a3] ~@2 [a2,e3,a3]!2 ~@2 [a2,e3,a3]!2 ~@2 [a2,e3,a3]!2 ~@2 [a2,e3,a3]", // A5
  H: "~@2 [b2,d3]@3 [b2,d3]@3 [b2,d3]@4 ~ b2 a2 ~", I: "~@2 [e3,g3]@3 [e3,g3]@3 [e3,g3] [e3,g3]@3 [e3,g3]@4",
  J: "[g2,d3] ~@7", // G5
})).s("gm_distortion_guitar").gain(0.36).pan(0.8)

// chords · distortion guitar · "gtr2" · soft notes
const distortion_guitar_soft = note(`<
  A B@8 C D@2 E F B G E H ~@7 I J K D@2 E F B G E H ~@7 A L@2 ~@23 A B G E F B G E H ~@7 I M ~@12 I M ~@16
>`.pickRestart({
  A: "~@7 [c#3,g#3,c#4]", B: "[d3,a3,d4]@11 ~@3 [c#3,g#3,c#4]@2", C: "[d3,a3,d4] ~@13 [c#3,g#3,c#4]@2",
  D: "[[d3,a3,d4]@27 ~@3 [a2,e3,a3]@2]/2", E: "[a#2,f3,a#3]@11 ~@3 [a2,e3,a3]@2",
  F: "[a#2,f3,a#3]@11 ~@3 [c#3,g#3,c#4]@2", G: "[d3,a3,d4]@11 ~@3 [a2,e3,a3]@2", H: "[a#2,f3,a#3]@11 ~@5",
  I: "~@7 [c#3,g#3]", J: "[d3,a3]@11 ~@3 [c#3,g#3]@2", K: "[d3,a3]@11 ~@3 [c#3,g#3,c#4]@2", L: "[[d3,a3,d4]@27 ~@5]/2",
  M: "[d3,a3]@11 ~@5", // D5
})).s("gm_distortion_guitar").gain(0.15).pan(0.8)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C B@6 D E@2 F G H I F J K@2 L@2 M K M N O P E@2 F G H I F J K@2 L@2 M K M Q R@2 K@2 L@2 K@2 M@2 K@2 L@2 K@2 M@2
  K@2 L@2 K@2 S T P U F G H I F J K@2 L@2 M K M N V W ~@8 M K M N V W K@2 L@2 M K M X Y Z AA@2 AB AC AD
>`.pickRestart({
  A: "~@14 c#2 ~", B: "d2 ~@2 d2!2 ~@2 d2!2 ~@2 d2!2 ~ c#2!2", C: "[d2,c#3] ~@2 d2!2 ~@2 d2!2 ~@2 d2!2 ~ c#2!2",
  D: "d2 ~@13 c#2 ~", E: "[d2@27 ~@3 a1 ~]/2", F: "b1@11 ~@3 a1 ~", G: "b1@11 ~@3 c2 ~", H: "c2@11 ~@3 c2 ~",
  I: "c2@11 ~@3 a1 ~", J: "b1@11 ~@5", K: "g1 ~@2 g1!2 ~@2 g1!2 ~@2 g1!2 ~@2 g1",
  L: "d2 ~@2 d2!2 ~@2 d2!2 ~@2 d2!2 ~@2 d2", M: "a1 ~@2 a1!2 ~@2 a1!2 ~@2 a1!2 ~@2 a1", N: "g1@11 ~@3 c#2@2",
  O: "d2@11 ~@3 c#2@2", P: "d2@11 ~@3 c#2 ~", Q: "g1@11 ~@3 c#2 ~", R: "[d2@27 ~@5]/2",
  S: "e1 ~@2 e1 e1@4 e1 ~@2 e1!2 ~@3", T: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ c#2 ~", U: "d2@11 ~@3 a1 ~",
  V: "d2@11 ~@5", W: "d2@3 ~ e2@3 ~ f2@3 ~ f#2@3 ~", X: "g1 ~@7", Y: "~@7 d2@6 ~@3", Z: "b1@6 ~@3 a1@6 ~",
  AA: "[~@2 f1@6 ~@10 a1@2 ~@2 c2@2 ~ d2@2 ~@2 f#2@2 ~, ~@11 d1@9 ~@12]/2",
  AB: "d2@2 ~@2 f#2@2 ~ g2@2 a2 g2@2 ~@2 f2@2", AC: "~ d2@2 ~@2 [d2,f2]@9 ~@2", AD: "~@3 d2@2 ~@11",
})).s("gm_electric_bass_pick").gain(0.2).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A B@8 C D@7 ~ E@5 F E@2 G H D@7 ~ E@5 F E@2 G ~ I J I J I J K L I J I J I J I M I J I J I J I N D@7 ~ E@5 F E@2 G N
  O@7 ~ E F E@2 G P E@5 F E C Q ~ N ~@3 R
>`.pickRestart({
  A: "~@7 x", B: "x ~@2 x ~@3 x!2 ~@2 x ~@2 x!2", C: "x ~@6 x", D: "x ~@2 x ~@7 x ~@3 x", E: "x ~@2 x ~@3 x!2 ~@7",
  F: "x!2", G: "x ~@10 x ~@3 x", H: "x ~@10 x ~@2 x ~", I: "x ~@2 x ~@4 x ~@2 x ~@3 x", J: "x ~@2 x ~@3 x!2 ~@2 x ~@4",
  K: "x ~@2 x ~@4 x ~@2 x ~@4", L: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", M: "x ~@2 x!3 ~@2 x ~@2 x!3 ~@2", N: "x",
  O: "x ~@2 x ~@4 x ~@2 x ~@2 x!2", P: "x ~@7 x ~@2 x ~@3 x", Q: "~@3 x ~@3 x ~@8", R: "~ x ~ x ~@5 x ~@6",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@8 B A@7 C A@17 C A@6 D A@2 E A@23 E A@7 C A@6 D A@2 F ~@7 C A@2 D A@2 G A@6 D H ~ I J ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x!3 ~ x!3 ~ x!2 ~@3", C: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", D: "~@4 x ~@6 x!2 ~@3",
  E: "x!2 ~ x!3 ~ x ~@8", F: "~ x ~ x!3 ~ x!3 ~ x!3 ~ x", G: "x!2 ~ x!3 ~ x ~@4 x ~@3", H: "x ~@4 x!2 ~", I: "x",
  J: "~ x ~@6",
})).gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@88 A B A B A B A ~@22>".pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@3", B: "~ x ~ x",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C B C B C B ~ A C@6 ~ C@10 A C@6 ~ C@9 ~ C@15 ~ C@7 ~ C@7 ~ C@9 ~@9 C@5 ~ C@7 D E F G ~@4
>`.pickRestart({
  A: "~ x!3", B: "x ~ x!2", C: "x!4", D: "x", E: "~@7 x ~@8", F: "x ~@8 x ~@6", G: "~ x ~@6",
})).gain(0.26)

// drums · low tom
const low_tom = s("lt").struct("<~@45 [~@12 x!2 ~ x] ~@23 [~@12 x!2 ~ x] ~@18 [~ x ~ x]!7 ~@22>").gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@45 [~@8 x!2 ~ x ~@4] ~@23 [~@8 x!2 ~ x ~@4] ~@47>").gain(0.36)

// drums · china
const china = s("cr").struct("<~@89 [~ x ~@2] ~ [~ x ~@2] ~ [~ x ~@2] ~@23>").gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct("<A B C ~ C ~ C ~ C ~ B ~@17 B ~@32 D ~@55>".pickRestart({
  A: "~@7 x", B: "x", C: "~ x ~@2", D: "x ~@2 x!3 ~@2 x ~@2 x!3 ~@2",
})).gain(0.31)

stack(
  harmonica, overdriven_guitar, overdriven_guitar_2, overdriven_guitar_soft, distortion_guitar, overdriven_guitar_3,
  electric_guitar_muted, distortion_guitar_2, distortion_guitar_soft, bass, kick, snare, clap, hihat, low_tom, mid_tom,
  china, ride_bell
)