Strudelify
In My Room cover art

1963 · Endless Summer

In My Room

The Beach Boys

KeyB majorTempo109 bpm
0:00/0:00
// In My Room — The Beach Boys
// 109 bpm, 4/4, key B 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: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(109/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.

// chords · rock organ
const rock_organ = note("<A@3 B@3 C@3 D@3 ~@44>".pickRestart({
  A: "[[e5,g5,c6]!2 [f5,a5,d6] [e5,g5,c6] [g5,c6,e6]!2 [a5,d6,f6] [g5,c6,e6]]/3", // C Dm C Dm C
  B: "[[c6,e6,g6]@3 [c6,e6,g6]@3 [d6,f6,a6]@3 [a#5,d6,f6]@3 [c6,e6,g6]@6 ~@2 [c6,e6,g6]@2 [g5,c6,e6]@2]/3", // C Dm A# C
  C: "[a5@3 a#5@3 [g5,b5]@3 ~ [g5,b5,f6] [g5,b5,e6], d6@3 ~, f5 ~]/3", D: "[[e5,g5]@2 [d5,f5] [f5,a5] [e5,g5]@4, c6]/3",
})).s("gm_rock_organ").gain(0.36)

// other · epiano1
const epiano1 = note("<A@3 B@3 C@3 D@3 ~@44>".pickRestart({
  A: "[c4!2 c4 c4]/3", B: "[c4@6 a#3@6 c4@5 b3 a3@3 a3 b3 c4]/3", C: "[d4 a#3 g3 g3]/3", D: "[c4 a#3 c4 g3]/3",
})).s("gm_epiano1").gain(0.41)

// bass · slap bass 2
const bass = note("<A@3 B@3 C@3 D@3 A@3 B@3 C@3 E@3 F@3 G@3 F@3 H@3 A@3 B@3 C@3 I@4 J@7>".pickRestart({
  A: "[c2!2 c2 c2]/3", B: "[c2@6 a#1@6 c2@5 b1 a1@3 a1 b1 c2]/3", C: "[d2 a#1 g1 g1]/3", D: "[c2 a#1 c2 g1]/3",
  E: "[c2@6 a#1@6 c2@6 c2@5 b1]/3", F: "[a1!2 g1 g1]/3", G: "[a1 g1 a1 g1 c2@2 c2@2]/3", H: "[d2@3 d2@3 d2@3 g1@2 ~]/3",
  I: "[c2@12 ~ a#1@12 c2@11 b1@2 a#1@13 c2@11 ~ b1]/4",
  J: "[~ a#1@13 ~ c2@11 b1@2 ~ a#1@14 c2@12 b1@2 ~ a#1@15 c2@15 [c1,c2]@15 ~@9]/7", // C
})).s("gm_slap_bass_2").gain(0.46)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A B C D E F G H I D E C ~@44>".pickRestart({
  A: "~ g3 c4 e4 c4 g3 ~ g3", B: "c4 e4 c4 g3 ~ g3 c4 e4", C: "c4 g3 ~ g3 c4 e4 c4 g3", D: "~ g3 c4 e4 c4 g3 ~ f3",
  E: "a#3 d4 a#3 f3 ~ g3 c4 e4", F: "c4 ~@2 g3 c4 ~@3", G: "~ a3 c4 f4 c4 a3 ~ a#3", H: "d4 f4 d4 a#3 ~ g3 b3 d4",
  I: "b3 g3 ~ g3 b3 d4 b3 g3",
})).s("gm_acoustic_guitar_nylon").gain(0.41)

// chords · pad new age
const pad_new_age = note("<~@12 A@3 B@3 C@3 D@3 ~@32>".pickRestart({
  A: "[[e4,g4,c5]!2 [f4,a4,d5] [e4,g4,c5] [g4,c5,e5]!2 [a4,d5,f5] [g4,c5,e5]]/3", // C Dm C Dm C
  B: "[[c5,e5,g5]@3 [c5,e5,g5]@3 [d5,f5,a5]@3 [a#4,d5,f5]@3 [c5,e5,g5]@6 ~@2 [c5,e5,g5]@2 [g4,c5,e5]@2]/3", // C Dm A# C
  C: "[a4@3 a#4@3 [g4,b4]@3 ~ [g4,b4,f5] [g4,b4,e5], d5@3 ~, f4 ~]/3", // G G7 Em
  D: "[[e4,g4]@2 [d4,f4] [f4,a4] [e4,g4]@4, c5@3 ~]/3", // Em Dm F Em
})).s("gm_pad_new_age").gain(0.36)

// chords · synth strings 1
const synth_strings_1 = note("<~@12 A@3 B@3 C@3 D@3 ~@21 E@8 ~@3>".pickRestart({
  A: "[[e3,g3,c4] [e3,g3,c4]]/3", B: "[[e3,g3,c4] [f3,a#3,d4] [g3,c4,e4]@2]/3",
  C: "[[f3,a3,c4,d4] [f3,a#3,d4] [g3,b3,d4] [f3,g3,b3,d4]]/3", D: "[[e3,g3,c4] [d3,f3,a#3] [e3,g3,c4]@2]/3",
  E: "[~@51 c5@77, c4]/8",
})).s("gm_synth_strings_1").gain(0.36)

// chords · pad halo
const pad_halo = note("<~@24 A@3 B@3 C@3 D@3 ~@20>".pickRestart({
  A: "[a4!2 ~ a4 g4!2 a4 g4, c4 [b3,d4], e4!2 ~@2]/3", // Bm
  B: "[[c4,e4,a4] [b3,d4,g4] [a3,c4,e4] [g3,b3,d4] [g3,c4,e4] [c4,e4,g4]@3]/3", // Am G Am G C
  C: "[[a4,c5,e5]!2 [e4,a4,c5] [a4,c5,e5] [g4,b4,d5]!2 [d4,g4,b4] [g4,b4,d5]]/3", // Am G
  D: "[[a4,c5,f5]!2 [f4,a4,c5] [a4,c5,f5] [a4,c5]@2 [b4,d5]@2, ~ [f5,g5]]/3", // F Am Bm Fsus2
})).s("gm_pad_halo").gain(0.41)

// chords · pad new age
const pad_new_age_2 = note("<~@24 A@3 B@3 A@3 C@3 ~@15 D@4 ~>".pickRestart({
  A: "[[e4,a4,c5] [g4,b4,d5]]/3", B: "[[e4,a4,c5] [d4,g4,b4] [e4,a4,c5] [d4,g4,b4] [e4,g4,c5]@4]/3",
  C: "[[f4,a4,c5,d5]@2 [f4,a4,c5,d5] [f4,g4,b4,d5]]/3", D: "[~@11 c6@45 ~@8]/4",
})).s("gm_pad_new_age").gain(0.36)

// chords · whistle
const whistle = note("<~@36 A@3 B@3 C@3 D@4 E@4 F@2 ~>".pickRestart({
  A: "[[e4,g4,c5]!2 [f4,a4,d5] [e4,g4,c5] [g4,c5,e5]!2 [a4,d5,f5] [g4,c5,e5]]/3", // C Dm C Dm C
  B: "[[c5,e5,g5]@3 [c5,e5,g5]@3 [d5,f5,a5]@3 [a#4,d5,f5]@3 [c5,e5,g5]@6 ~@2 [c5,e5,g5]@2 [g4,c5,e5]@2]/3", // C Dm A# C
  C: "[a4@3 a#4@3 [g4,b4]@3 ~ [g4,b4,f5] [g4,b4,e5], d5@3 ~, f4 ~]/3", // G G7 Em
  D: "[[e4,g4]@12 ~ [d4,f4]@6 [f4,a4]@6 [e4,g4]@13 [d4,f4]@6 ~ [f4,a4]@6 [e4,g4]@13, c5@25 ~@39]/4", // Em Dm F Em Dm F Em
  E: "[~ [d4,f4]@7 [f4,a4]@7 [e4,g4]@14 [d4,f4]@7 [f4,a4]@7 [e4,g4]@15 [d4,f4]@6]/4", // Dm F Em Dm F Em Dm
  F: "[~ [f4,a4]@7 ~ [e4,g4]@15 ~@8]/2", // F Em
})).s("gm_whistle").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C D E F G H I J K E B ~
>`.pickRestart({
  A: "x ~@2 x", B: "~ x", C: "~ x ~@2", D: "x ~@12 x ~@2", E: "~@9 x ~@6", F: "~@3 x ~@4", G: "~@3 x ~@12",
  H: "~ x ~@13 x", I: "~@13 x ~@2", J: "~@11 x ~@4", K: "~@5 x ~@2",
})).gain(0.26)

// drums · rim
const rim = s("rim").struct("<A B C A B C A B C A B C ~@44>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@5 x", C: "~@5 x ~@2",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<~@12 A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A D ~@12>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@5 x", C: "~@5 x ~@2", D: "~ x ~@6",
})).gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~@54 [~ x] ~>").gain(0.31)

// drums · ride
const ride = s("rd").struct(`<
  A B C A B C A B C A B C D E F D E F D E F D E F A B C A B C A B C A B C G H I G H I G J C K L M N O P Q R S T ~
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!2", B: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", C: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
  D: "x ~@2 x!2 ~@3 x ~ x ~ x ~@2 x", E: "x ~@3 x ~ x ~ x ~@2 x!2 ~@3", F: "x ~ x ~ x ~@2 x!2 ~@3 x ~ x ~",
  G: "x ~ x!3 ~@3 x ~ x ~ x ~ x!2", H: "x ~@3 x ~ x ~ x ~ x!3 ~@3", I: "x ~ x ~ x ~ x!3 ~@3 x ~ x ~",
  J: "x ~@3 x ~ x ~ x ~ x!3 ~ x ~", K: "x ~ x!3 ~ x ~ x ~ x ~@2 x ~ x", L: "x!2 ~ x ~ x ~ x ~ x ~ x!2 ~ x ~",
  M: "x ~ x ~ x ~ x ~ x ~ x!2 ~ x ~ x", N: "~ x ~ x ~@2 x!3 ~ x ~ x ~@2 x", O: "~ x ~ x!3 ~@2 x ~ x ~ x ~@2 x",
  P: "~ x!3 ~@2 x ~ x ~ x ~@2 x ~ x", Q: "x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x", R: "x ~ x ~@2 x ~ x ~@2 x ~ x ~ x!2",
  S: "~ x ~@2 x ~ x ~@2 x ~ x ~ x!2 ~", T: "x ~@2 x ~@2 x ~@9",
})).gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 A B C A B C A B C A B C ~@32>".pickRestart({
  A: "~ x ~ x ~@3 x", B: "~ x ~@3 x ~ x", C: "~@3 x ~ x ~@2",
})).gain(0.31)

// drums · guiro
const guiro = s("guiro:0").struct("<~@54 [~ x] ~>").gain(6.49)

// drums · claves
const claves = s("clave:2").struct("<~@24 A B C A B C A B C A B C ~@20>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@5 x", C: "~@5 x ~@2",
})).gain(1.51)

stack(
  rock_organ, epiano1, bass, acoustic_guitar_nylon, pad_new_age, synth_strings_1, pad_halo, pad_new_age_2, whistle,
  kick, rim, hihat, open_hat, ride, tambourine, guiro, claves
)

More by The Beach Boys