Strudelify

I've Never Been in Love Before

Barbra Streisand

KeyA♭ majorTempo81 bpm
0:00/0:00
// I've Never Been in Love Before — Barbra Streisand
// 81 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 7, 4/4 at bar 7) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 73 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(81/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 · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A@5 B@3 C D E F G H@8 I@4 J@4 K@4 ~ L@4 M N@7 O@6 P@5 ~@3 Q@7 R@2 S@4>".pickRestart({
  A: "[~@35 ab5@12 c5@14 ~@13 ab5@12 ~ g5@11 bb4@11 ~@16 g5@14 ~@12 ab4@12 bb4@11 [b4,f5]@11 ~ eb5@12 g4@13 ~@15 eb5@14, ~@34 c5@13 ~@14 db5@25 d5@24 c5@28 ~ f5@12 ~@89, ~@140 c5@24 ~@21 bb4@26 ab4@29]/5", // Bdim
  B: "[~@2 [gb4,db5]@28 [f4,bb4]@25 eb4@25 ~ eb4@63]/3", C: "c4", D: "db4@23 bb4@25", E: "g4@35 eb4@13", F: "eb4 ab4",
  G: "f4@35 ~ db4@11 ~",
  H: "[db4@26 g4@28 eb4@26 ~ eb4@12 ~ [eb4,ab4]@13 gb4@16 f4@58 eb4@33 [a4,c5]@15 [bb4,db5]@24 [b4,d5]@27 ~ c5@35 bb4@12 ~ bb4@28 ~ [a4,c5]@26, ~@107 bb4@73 ~@73 g5@63 ~@68, ~@70 e5@9 ~@17]/8", // Ab5 Am Bbm Bm Am
  I: "[~@4 db5@60 bb4@12 eb5@15 db5@14 eb5@23 bb5@12 bb4@11 ~@2 bb4@12 ~ c5@11 ~@2 c5@7 eb5@6]/4",
  J: "[~ ab5@22 c6@68 g5@10 ab5@11 bb5@69 f5@11]/4", K: "[~@2 g5@14 ab5@68 ~ f5@14 bb5@15 ab5@17 g5@55 ~@6]/4",
  L: "[~@3 ab4@68 bb4@35 c5@12 eb5@12 g5@12 bb5@26 c6@24]/4", M: "f5@24 ~ ab5@23",
  N: "[~@33 g4@33 ab4@23 [bb4,gb5]@25 ab4@23 [gb4,db5,ab5]@26 [eb5,ab5]@32 c5@11 db5@22 ~@12 a4@11 bb4@31 ~ bb4@10 c5@11 d5@12 f5@11 eb5@9, ~@114 c5@11 ~@43]/7", // Ebm Gbsus2 Ab5
  O: "[~@3 c5@21 ab4@10 ~ ab4@10 bb4@11 f5@11 eb5@11 db5@12 b4@11 bb4@12 ab4@10 gb4@11 ~ f4@33 f4@34 ~ f6@11 g6@11 ab6@45 g6@11 ab6@7, ~@2 ab4@21 ~@265]/6",
  P: "[~@5 bb6@61 ~@5 ab5@11 bb5@12 ab6@33 bb5@12 c6@23 ~ g5@11 ~ f5@12 [d5,g5]@44 ~@9, ~@162 bb5@12 ab5@13 ~@53]/5", // G5
  Q: "[~@9 g4@24 c5@13 ~ bb4@12 c5@29 ~ f5@31 db5@30 ~ eb5@29 f5@40 ~ g5@57 ab4@30 eb5@28, ~@44 c5@16 ~@50 c5@25 ~@33]/7",
  R: "[~@4 gb5@30 ~ bb5@30 [gb5,db6]@31, ~@34 db5@33 ~@29]/2", S: "[~ eb6@154 ~@37, eb5@77 ~@19]/4",
})).s("gm_string_ensemble_2").gain(0.27).pan(0.2)

// other · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@32 A@2 ~@5 B ~@18 C@3 D@2 E@2 ~@4 F@4>".pickRestart({
  A: "[~@21 g4@14 eb4@13]/2", B: "~@4 db5@29 ~@15", C: "[~@5 ab4@11 ~ c5@34 f4@26 ~ bb4@27 ~@39]/3",
  D: "[~@11 g4@29 g4@32 ~@24]/2", E: "[~@19 db5@19 ~@10]/2", F: "[ab5@77 ~@19]/4",
})).s("gm_string_ensemble_2").gain(0.16).pan(0.2)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_2 = note("<A@5 B@3 C@2 D E F G@8 H@4 I@6 J@3 K@5 L@5 M@2 N@7 O@4 ~ P Q R@7 S@6>".pickRestart({
  A: "[~@34 gb3@27 f3@25 e3@23 eb3@29 d3@24 g2@22 ~ g3@25 ~@2 eb3@28, ~@184 c3@27 b2@29]/5",
  B: "[~ b2@14 [eb2,bb2]@57, ~ e2@30 ~@113]/3", C: "ab2", D: "ab2@35 g2@12 ~", E: "f2", F: "bb2",
  G: "[eb2@53 ~ ab2@27 ~@13 b1@13 [e2,b2]@16 [eb2,bb2,f3]@58 ab2@48 ab2@51 ~ ab2@41 ~ ab2@3 g2@3 ~ f2@54, ~@81 gb2@26 ~@277]/8", // E5 Ebsus2
  H: "[~@28 bb1@24 eb2@53 ab2@22 g2@24 f2@26 eb2@15, ~@4 bb2@47 ~@141]/4",
  I: "[d2@21 ~@7 ab2@6 eb3@5 ab3@6 ~@15 c3@6 bb2@40 eb2@6 g3@9 f3@10 ~@25 g2@23 ~@2 f3@14 e3@14 ~ f2@25 eb2@26 d2@27, ~@23 db2@37 ~@52 ab2@44 ~@23 c2@29 ~@80, ~@45 f3@22 ~@64 eb3@51 ~@106]/6",
  J: "[~@3 g2@27 ~@4 c2@55 bb2@29 a2@26, ~@33 g2@55 ~@56]/3", K: "[~@2 ab2@92 ~ ab2@23 g2@23 ~ f2@49 bb2@49]/5",
  L: "[~@32 eb1@33 ~ ab2@47 ~ ab2@48 ~ [ab2,eb3]@33 [g2,d3]@11 [db2,ab2,e3]@11 a3@11 ab3@11, ~ eb2@21 ~@58]/5", // Ab5 G5 Dbm
  M: "[g3@11 f3@32 f2@10 ~ [c2,g2]@11 [d2,a2]@11 [f2,c3]@11 [f2,c3]@9]/2", // C5 D5 F5
  N: "[~@2 bb1@21 ~ bb2@10 ~ ab2@10 gb2@11 ~ [b1,gb2]@10 ~ c2@10 ~ eb2@11 [a2,gb3]@11 [ab2,eb3]@11 [gb2,db3]@12 [e2,b2]@11 ~ eb2@31 ~ d2@35 ~@5 ab2@5 eb3@6 ab3@5 f3@6 ab3@5 gb3@5 ~ f3@5 f3@24 ~@5 ab3@6 eb3@5 db3@5 ~ c3@39 bb2@3 ab2@2, ~@67 g2@11 bb2@12 ~@45 bb2@32 a2@35 ~ db2@42 ~@25 db2@18 ~@48]/7", // B5 D Ab5 Gb5 E5
  O: "[~ g2@22 f3@12 e3@11 [f2,g3]@33 g2@11 a2@12 d3@12 f3@13 g2@12 [c2,g2]@48 ~@5, ~@23 c2@23 ~@146]/4", // Fsus2 C5
  P: "~@2 ab2@13 ~", Q: "~ ab2@23",
  R: "[~@9 ab2@48 ~ c3@27 ~@2 eb3@33 bb2@30 b2@30 ~ bb2@38 eb2@56 ~@4 eb3@28 ~ db3@28, ~@58 f2@62 ~@158 ab2@29 gb2@29]/7",
  S: "[~@2 [e2,b2]@31 ~ a2@31 [c2,g2]@30 ~ ab2@154 ~@38, ~@33 d2@32 ~@30 ab1@154 ~@39]/6", // E5 C5
})).s("gm_string_ensemble_2").gain(0.33).pan(0.7)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_3 = note(`<
  A@5 B@3 C D E F G H@4 I@4 J K L@8 M@3 N O@3 P Q@5 R@2 S@6 T U@4 ~ V W@8 X@2 Y Z@3
>`.pickRestart({
  A: "[~@35 f4@27 e4@13 eb4@12 d4@38 db4@15 c4@23 ~@11 ab4@11 ~ g4@25 ~ eb4@28, ~@34 ab4@53 g4@53 f4@35 ~@65, ~@163 b3@22 bb3@26 a3@29]/5",
  B: "[~@2 eb4@27 f4@26 g3@25 f3@64, ~@2 ab3@53 ~@89]/3", C: "[bb3,eb4]", D: "~ db4, bb3", E: "[c4,eb4]",
  F: "[bb3,c4] [db4,f4]", G: "~ c4@23 bb3@24, db4",
  H: "[~@26 bb3@28 [bb3,c4]@27 [bb3,eb4]@12 ~ [ab3,db4]@13 [db4,eb4]@74 bb3@11, ab3@13 ~@83, ~ db4@54 ~@137]/4", // Bbsus2 Eb5 Db5 Dbsus2
  I: "[~@37 db4@23 d4@29 ~ e4@47 [eb4,g4]@29 [d4,g4]@26, c4@38 ~@51 c4@48 ~@55, ~@23 f4@66 ~@103]/4", // Eb G5
  J: "~ [db4,f4]@15", K: "~@4 f4@25 gb4@13 e4@6, ~ db4@11",
  L: "[~@9 [bb3,g4]@23 [eb4,f4,bb4]@24 ~@13 ab4@13 ~ f4@12 ~ ab4@23 c5@68 bb4@10 c5@10 ~ bb4@9 db5@10 eb5@49 f4@14 e4@14 ~ f4@54 c5@25, ~@56 g4@13 ~@13 g4@13 ~@181 [g4,bb4]@29 ~@79, ~@57 eb4@26 ~@12 e4@23 ~ [f4,ab4]@88 [eb4,g4]@69 ~@108]/8", // Eb Ebsus2 Gm Fm Eb
  M: "[~@4 db5@29 ~ d5@56 f4@29 ~@25]/3", N: "~@14 db4@6 eb4@7 ab4@11 eb4@9 ~",
  O: "[~@6 db4@5 eb4@5 f4@7 eb4@12 db4@12 ~@47 eb4@25 d4@25, ~@47 eb4@47 ~@50, ~ c4@2]/3",
  P: "[db4,f4]@25 [eb4,f4,ab4]@23", // Db Fm7
  Q: "[~@4 [db4,f4]@28 ~ c4@33 c4@24 db4@24 d4@23 eb4@25 ~ [eb4,bb4]@33 [bb3,f4]@11 [b3,gb4]@11 [eb4,f4]@10 ~ e4@11, ~@32 e4@33 ~ bb3@48 bb3@49 ~@65 d4@12]/5", // Db Eb5 Bb5 B5 Ebsus2
  R: "[[db4,f4]@11 [g3,eb4]@32 [ab3,eb4]@11 f4@10 g4@12 [f4,bb4]@11 [gb4,b4]@9]/2", // Db Cm Ab5 Bb5 B5
  S: "[~@2 eb4@22 db4@21 ~ [db4,gb4]@10 ~ eb4@10 ~ b4@11 [e4,a4]@11 eb4@12 db4@10 [b3,e4]@11 [bb3,eb4]@12 [ab3,db4]@32 ~ c4@34 ~@2 db4@10 [eb4,g4]@12 [f4,ab4]@42 ~ [eb4,g4]@11 [f4,ab4]@8, ~@2 f4@44 ~@10 ab4@11 gb4@11 ~@12 gb4@22 ~@55 a3@35 ~ f4@12 ~@73]/6", // Gb5 A5 E5 Eb5 Db5 Eb Fm Eb …
  T: "~ g4@15, ~ eb4@23",
  U: "[~ g4@22 f4@11 ~ eb4@5 db4@5 ~ [g4,ab4]@33 [eb4,f4]@11 g4@12 c5@12 ~ eb5@12 [ab4,db5]@12 [e4,c5]@48 ~@5, ~ db4@33 ~ g4@10 ~@45 f4@24 bb4@12 ~@66]/4", // Abmaj7 Ebsus2 Db5 C
  V: "~@5 c4@12 d4@22 ~ eb4@8",
  W: "[~@30 f4@27 d4@25 e4@25 [c4,eb4]@29 [d4,f4]@32 [eb4,f4]@61 ~ eb4@39 [c4,e4]@57 ab4@31 e4@27, ~@4 db4@54 ~@171 f4@40 ~@115]/8", // Cm Dm Ebsus2 C
  X: "[~@4 ab4@29 gb4@30 ~@2 db4@31, ~@64 gb4@31 ~]/2", Y: "~@20 ab3@9 bb3@10 c4@9",
  Z: "[~@3 d4@16 bb3@26 [c4,ab4]@62 ~@37]/3", // Fm
})).s("gm_string_ensemble_2").gain(0.27).pan(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_4 = note(`<
  A@5 B@3 C D E F G H I@7 J@4 K@2 L@7 M N@3 O P@5 Q@2 R@7 S@4 ~ T@5 U@6 V@4
>`.pickRestart({
  A: "[~@34 c4@27 b3@25 bb3@24 a3@29 ab3@12 bb3@5 c4@6 ~@11 eb4@6 f4@6 eb4@26 [db4,f4]@29, ~@162 db4@11 ~@67, ~@82 f3@11 ~@27]/5", // Db
  B: "[~@2 [db4,gb4]@28 db4@25 c4@25 ~ ab3@63, ~@40 db4@31 ~]/3", C: "~ [eb3,ab3]@47", D: "[f3,ab3]@7 ab3 g3@8",
  E: "[eb3,bb3]", F: "[eb3,g3] [eb3,a3]", G: "ab3", H: "f3@25 g3@23",
  I: "[~@6 g3@27 [e3,ab3]@12 ~ [gb3,bb3]@13 [gb3,bb3]@16 [ab3,bb3]@57 ~ f3@12 eb3@22 gb3@13 f3@23 ab3@27 ~ g3@50 [g3,bb3]@28 ~ [eb3,a3]@26, ~@19 ab3@5 ~@24]/7", // E Gb Absus2 Gm Ebdim
  J: "[~@3 c4@12 bb3@24 ~ ab3@12 [f3,ab3]@25 b3@13 ~ a3@14 c4@23 bb3@24 ~ bb3@13 ab3@12 ~ db4@13, ~@2 f3@49 ~@26 g3@28 eb3@47 ~ c4@25 g3@13 ~]/4", // Fm
  K: "[[ab3,c4]@23 c4@68 bb3@5]/2", // Ab
  L: "[~@5 ab3@11 ~@21 c4@47 bb3@28 ~@14 bb3@14 c4@55 ~ f3@29 [e3,b3]@56 ~ [f3,bb3]@28 g3@26, ~@4 bb3@17 ~@7 ab3@28 ~@28, ~@65 b3@10 ~@37]/7", // E5 Bb5
  M: "~@14 f3@5 [g3,bb3]@6 ~ c4@10 ~@2 ab3@10, ~@25 ab3@11 g3@12", // Gm
  N: "[~@5 [f3,ab3]@5 [g3,bb3]@6 [ab3,c4]@6 ~ bb3@10 ~ f3@11 ~@2 g3@23 bb3@23 ~ [eb3,bb3]@25 [eb3,a3]@25, ~@22 g3@11 ab3@14 eb3@47 ~@50]/3", // Fm Gm Ab Eb5 Ebdim
  O: "ab3@25 ~ a3@22, f3, ~@25 db4@23",
  P: "[~@3 ab3@29 ~ [db3,g3]@33 [eb3,ab3]@47 ~@23 e3@27 [ab3,bb3]@33 [a3,c4]@11 [b3,db4]@10 ~ db4@11 [c4,d4]@11, ~@113 f3@23 ~@104, ~@114 ab3@49 ~@54 eb4@11 ~@12]/5", // Dbdim Ab5 Absus2 Am Bsus2 Csus2
  Q: "[c4@11 [ab3,c4]@32 [g3,bb3]@11 [eb3,bb3]@11 [f3,c4]@11 [g3,eb4]@11 [a3,eb4]@9]/2", // Ab Gm Eb5 F5 Cm Adim
  R: "[~@2 c4@22 bb3@22 [db3,ab3]@10 ~ bb3@11 [e3,b3]@10 ~ db4@11 b3@22 ~ a3@11 ab3@11 ~ gb3@32 gb3@34 ~ [ab3,c4]@11 [g3,bb3]@10 ~ ab3@45 [g3,bb3]@11 [ab3,c4]@11 [g3,bb3]@44, ~@2 f3@44 ~@10 eb3@11 ~@11 g3@12 ~@134 c4@46 ~@66]/7", // Db5 E5 Ab Gm Ab Gm
  S: "[~ f3@22 g3@23 [ab3,c4]@33 ~ bb3@10 c4@24 ~ bb3@23 ~ [c4,d4]@48 ~@5, ~ bb3@45 ~@146]/4", // Ab Csus2
  T: "[~@5 eb3@12 f3@22 g3@12 f3@54 [ab3,b3]@24 ~ g3@12 f3@13 ~ g3@28 a3@32 ~@24, ~@129 c4@28 ~@83]/5", // Abm
  U: "[~@7 db4@29 db4@39 ~@2 db3@57 ab3@30 a3@32 b3@30 db4@29 ~ bb3@32, ~@6 a3@31 ~@218 e3@31 ~@2]/6",
  V: "[[eb3,ab3]@77 ~@19]/4", // Ab5
})).s("gm_string_ensemble_2").gain(0.27).pan(0.6)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft_2 = note("<~@33 A B ~@4 C ~@18 D@3 E@5 ~@7>".pickRestart({
  A: "~@23 a3@25", B: "~@14 ab3@5 ~@29", C: "~@4 db3@29 ~@15", D: "[~@5 ab3@34 c4@13 bb3@54 ~@38]/3",
  E: "[~@11 bb3@29 ~ g3@31 ~ ab3@30 ~@30 ab3@39 ~ g3@57 ~@10, ~@72 db4@29 ~@139]/5",
})).s("gm_string_ensemble_2").gain(0.16).pan(0.6)

// other · flute
const flute = note("<~@5 A@3 ~@6 B@3 ~@8 C@3 ~ D@2 E@3 ~@2 F@2 G@2 ~@9 H@4 I@4 ~@16>".pickRestart({
  A: "[~@17 gb4@6 ab4@6 bb4@13 eb4@11 ~@2 eb4@89]/3",
  B: "[~@27 eb4@6 eb4@7 bb4@6 ab4@7 db5@6 bb4@8 eb5@8 eb5@58 ~@11]/3",
  C: "[~@34 g4@11 ab4@11 bb4@12 ab4@23 g4@11 f4@9 ~@33]/3", D: "[~@45 c5@26 e5@13 f5@12]/2",
  E: "[~@4 g5@14 [db5,f5,ab5]@15 ~ d5@56 g4@28 eb4@26, ~ bb5@5 ~@5 g5@19 ~@18]/3", // Db
  F: "[~@11 c5@11 eb5@11 g5@13 bb5@25 ~ c6@24]/2", G: "[~ f6@24 ab6@27 ~@44]/2",
  H: "[~@8 ab5@16 ab5@17 ~ ab5@17 f5@11 eb5@11 ~ f5@35 ~@9 g4@11 ab4@11 ~ eb5@36 ~@7, ~@37 bb4@9 ~@2]/4",
  I: "[~@13 g4@10 ab4@11 ~ bb4@10 ~ c5@28 ~@5 f4@12 g4@11 ~ c5@12 bb4@12 ab4@13 g4@46 ~@6]/4",
})).s("gm_flute").gain(0.27).pan(0.7)

// other · oboe
const oboe = note("<A B@4 C@3 ~@16 D E ~@2 F G@2 ~@5 H@2 I@3 ~@13 J@3 ~@16>".pickRestart({
  A: "~@17 ab5@7",
  B: "[c5@13 db5@14 ab5@12 g5@12 bb4@11 c5@15 g5@14 f5@13 ab4@11 ~ bb4@11 f5@11 eb5@13 g4@13 ab4@14 eb5@14]/4",
  C: "[~@3 db5@27 bb4@97 ~@17]/3", D: "~@15 eb4@7 ab4@6 c5@6 ~ c5@7 eb5@6", E: "ab5@23 ~@25", F: "~@3 f5",
  G: "[~@2 g5@14 ab5@41 ~@39]/2", H: "[~@11 c5@11 eb5@12 g5@13 bb5@25 ~ c6@23]/2",
  I: "[~ f5@25 ab5@26 db5@29 g4@33 ~@30]/3", J: "[~@32 bb4@12 c5@10 ab5@12 g5@12 f5@13 g5@44 ~@9]/3",
})).s("gm_oboe").gain(0.27)

// other · french horn · "FR.HORN"
const french_horn = note("<~@2 A@4 B@2 ~@6 C@3 ~@7 D E@3 ~ F@2 G@4 ~@5 H@6 I@4 J@3 K@4 ~@9 L M@2 N@4>".pickRestart({
  A: "[~@43 ab3@12 ~ bb3@5 c4@6 db4@11 eb4@5 f4@6 g4@26 ab4@43 ~@2 gb4@7 ab4@6 bb4@19]/4", B: "[~@4 eb4@3 eb4@88 ~]/2",
  C: "[~@27 eb4@6 eb4@6 ~ bb4@6 ab4@7 db5@6 bb4@8 eb5@7 ~ eb5@53 ~@16]/3", D: "~@16 bb3@6 c4@7 eb4@7 eb4@12",
  E: "[~ ab4@23 ~@10 eb4@10 ~ f4@11 [eb4,g4]@12 [db4,f4]@41 ~@35, ~@11 db4@3 ~@22]/3", // Eb Db
  F: "[~@2 db4@15 ~ c4@39 ~ eb4@14 e4@13 f4@11]/2", G: "[~@3 eb4@30 e4@56 ~ eb4@57 ~@45, ~@89 db4@57 ~@46]/4",
  H: "[~@24 c4@5 eb4@6 ab4@7 db4@24 ~@6 f4@5 ab4@6 c5@6 eb4@18 ~@2 eb4@6 ~@6 c4@5 eb4@6 ab4@5 ab4@5 ~ c5@4 ~ c5@5 ~ f4@4 ~ [db4,db5]@11 [ab4,ab5]@11 ~ g4@15 [f4,f5]@6 [g4,g5]@32 [bb3,bb4]@11 [c4,c5]@11 ~ [g4,g5]@11 [f4,f5]@10 ~ eb4@8, ~@116 ab4@15 ~@17 c4@11 ~@22 g5@16 ~@82 eb5@9]/6", // Db Ab F G Bb C G F
  I: "[~@3 f5@31 ~ [ab3,ab4]@11 [bb3,bb4]@10 ~ f5@11 [eb4,eb5]@10 ~ db5@9 ~@2 [eb4,eb5]@58 ~@44, ~@2 f4@33 ~@21 f4@12 ~@10 db4@11 ~@103]/4", // Ab Bb Eb
  J: "[~@16 ab4@5 ~ g4@10 ~@13 c4@11 db4@11 c5@11 bb4@11 ab4@12 bb4@43, ~@12 db4@9 eb4@10 ~ [f4,ab4]@23 ~@89]/3", // Fm
  K: "[~@12 db4@5 ~ eb4@5 f4@10 ~ eb4@4 ~ db4@5 ~ c4@33 ~ eb4@11 ~ f4@23 eb4@25 [d4,e4]@48 ~@5]/4", L: "~@3 e4",
  M: "[~@5 ab4@14 b4@15 ~ bb4@28 ~@2 [bb3,gb4]@31, ~@4 eb4@30 db4@31 ~@31]/2", N: "[~ eb4@154 ~@37]/4",
})).s("gm_french_horn").gain(0.33).pan(0.4)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<~@8 A B C ~@4 D ~ E F G ~ H I ~@8 J ~@8 K@3 ~ L ~@10 M ~@17>".pickRestart({
  A: "ab2@6 eb3@3 ~@3 ab3@3 ~@3 bb3@2 ~@4 c4@2 ~@22", B: "ab2@6 f3@3 ~@3 bb3@5 ~ c4@4 ~@2 db4@2 ~@22",
  C: "ab2@6 eb3@3 ~@3 ab3@5 ~ bb3@3 ~@27", D: "~@36 bb4@2 db5@3 ~@7, ~@29 bb3@4 eb4@2 ab4@3 ~@10, ~@31 db4@3 f4@3 ~@11",
  E: "~@43 ab3@4 ~", F: "~ bb3@3 ~@3 ab3@3 ~@3 d4@3 ~@11 f4@3 ~@18", G: "~@17 e4@3 ~@21 c4@3 ~@4",
  H: "~@10 f3@4 ~@3 c4@5 ~@5 bb3@4 ~@3 c4@4 ~@2 db4@2 ~@4 f4@2", I: "~@2 bb4 ~@21",
  J: "~@2 f3@2 ~@5 ab4@2 ~ db5@3 ~@6 b5@3 ~@24, ~@4 ab3@3 db4@2 ~@7 db5@3 ab5@4 ~@25, ~@6 b3@2 f4@3 b4@3 ~ b4@5 ~@28, ~@17 [eb5,f5]@4 ~@27", // Ebsus2
  K: "[~@45 eb4@2 ~ [bb4,db5]@2 eb5@3 ab5 ~@41 ab5@2 ~@47, ~@40 eb3@3 [bb3,db4]@4 ab4@3 ~@38 [gb4,ab4]@3 db5@3 gb5@3 ~@47, ~@41 ab3@4 ~@45 bb4@2 eb5@4 ~@48]/3", // Bbm Gbsus2
  L: "~@22 bb4@2 c5@3 eb5@3 bb5@2 ~@16", M: "~@30 f3 ~ ab3 b3 [eb4,f4] ab4 ~ b4 eb5 f5 ab5 bb5 ~@6",
})).s("gm_orchestral_harp").gain(0.22)

stack(
  string_ensemble_2, string_ensemble_2_soft, string_ensemble_2_2, string_ensemble_2_3, string_ensemble_2_4,
  string_ensemble_2_soft_2, flute, oboe, french_horn, orchestral_harp
)

More by Barbra Streisand