Back
Strudel
music2
Strudel を読み込み中…
// ============================================================ // █████╗ ████╗ ██╗ ██ ████╗ ██╗ ██ ████╗ █████╗ ██████╗ ██████╗ █████╗ ██╗ ██ // ██╔═══╝ ██╔══██ ██║ ██╔ ██╔══██ ███╗ ██ ██╔══██ ██╔═══╝ ╚═██╔═╝ ╚═██╔═╝ ██╔══██ ███╗ ██ // ╚████╗ ██████║ ████╔╝ ██████║ ██╔█╗██ ██████║ ██║ ██║ ██║ ██║ ██ ██╔█╗██ // ╚══██╗ ██╔══██ ██╔██╗ ██╔══██ ██║╚███ ██╔══██ ██║ ██║ ██║ ██║ ██ ██║╚███ // █████╔╝ ██║ ██ ██║ ╚██ ██║ ██ ██║ ╚██ ██║ ██ ╚█████╗ ██║ ██████╗ ╚█████╔ ██║ ╚██ // ╚════╝ ╚═╝ ╚═ ╚═╝ ╚═ ╚═╝ ╚═ ╚═╝ ╚═ ╚═╝ ╚═ ╚════╝ ╚═╝ ╚═════╝ ╚════╝ ╚═╝ ╚═ // ============================================================ // Volume const volLead = slider(0.55, 0, 1) const volChoir = slider(0.85, 0, 1) const volBass = slider(0.9, 0, 1) const volStab = slider(0.55, 0, 1) const volDrums = slider(0.95, 0, 1) // リード const leadOsc1 = slider(1, 0, 1) const leadOsc2 = slider(0.5, 0, 1) const leadSub = slider(0.55, 0, 1) const leadUniP = slider(0.4, 0, 1) const leadUniM = slider(0.4, 0, 1) const riffUni = slider(0.1, 0, 0.45) const riffSpread = slider(0.65, 0, 1) const riffTone = slider(650, 120, 6000) const riffReso = slider(11, 0, 20) const riffEnvAmt = slider(2.8, 0, 4) const riffEnvDec = slider(0.42, 0.02, 1) const riffEnvSus = slider(0.7, 0, 1) const riffEnvRel = slider(0.2, 0.01, 0.8) const riffAtk = slider(0.001, 0.001, 0.2) const riffDec = slider(0.32, 0.01, 1) const riffSus = slider(0.75, 0, 1) const riffRel = slider(0.18, 0.01, 0.8) const riffDistort = slider(0.22, 0, 0.6) const riffChorus = slider(0.45, 0, 1) const riffDelay = slider(0.28, 0, 0.8) // Tone const choirTone = slider(1600, 200, 5000) const choirSpace = slider(0.35, 0, 1) const bassTone = slider(700, 80, 2500) const stabTone = slider(3400, 400, 8000) const stabEcho = slider(0.4, 0, 0.95) const hatColor = slider(8000, 1000, 14000) const leadFx = (p) => p .lpf(riffTone).lpq(riffReso).ftype("12db") .lpenv(riffEnvAmt).lpa(0.001).lpd(riffEnvDec).lps(riffEnvSus).lpr(riffEnvRel) .attack(riffAtk).decay(riffDec).sustain(riffSus).release(riffRel) .shape(riffDistort) .chorus(riffChorus) .delay(riffDelay).delaytime(0.25).delayfeedback(0.32) .jux((x) => x.pan(riffSpread)) .velocity(0.2) .gain(volLead) const fatSaw = (p) => leadFx(p.layer( (x) => x.s("sawtooth").gain(leadOsc1), (x) => x.s("sawtooth").gain(leadOsc2), (x) => x.s("sine").add(note(-12)).gain(leadSub), (x) => x.s("sawtooth").add(note(riffUni)).gain(leadUniP), (x) => x.s("sawtooth").add(note(riffUni.mul(-1))).gain(leadUniM), )) // コーラス const choirSound = (p) => p.s("sawtooth") .lpf(choirTone).lpq(3) .attack(0.03).decay(0.12).sustain(0.45).release(0.18) .room(choirSpace) .velocity(0.38) .gain(volChoir) // ベース const bassSound = (p) => p.s("sawtooth") .lpf(bassTone).lpq(4) .attack(0.003).decay(0.12).sustain(0.35).release(0.06) .shape(0.12) .velocity(0.65) .gain(volBass) // スタブ const stabSound = (p) => p.s("square") .lpf(stabTone).lpq(5) .attack(0.001).decay(0.1).sustain(0).release(0.04) .shape(0.22) .velocity(0.32) .gain(volStab) const squareEcho = (p) => stabSound(p) .delay(stabEcho).delaytime(0.33).delayfeedback(0.4) const pluckTone = stabSound const gtrChopSound = stabSound const gtrPowerSound = (p) => fatSaw(p).velocity(0.2) const gtrCleanSound = (p) => choirSound(p).velocity(0.22) const brassSound = (p) => fatSaw(p).velocity(0.18) const stringsSound = (p) => choirSound(p).attack(0.2).velocity(0.2) const padSound = (p) => choirSound(p).attack(0.35).velocity(0.18) // ドラム const dr = (p) => s(p).bank("LinnDrum").velocity(0.9).gain(volDrums).color("#fbbf24") const hat = (p) => s(p).bank("LinnDrum").hpf(hatColor).velocity(0.85).gain(volDrums).color("#fde68a") // リフ const riffA = note("[a2,e3,g#3,b3] ~ [a2,e3,g#3,b3] [a2,e3,g#3,b3] ~ [a2,e3,g#3,b3] ~ [a2,e3,g#3,b3]") const riffB = note("~ [a2,e3,g#3,b3] ~ [b2,f#3,b3,d#4] ~ [b2,f#3,b3,d#4] ~ [c#3,g#3,b3,e4]") const riffB2 = note("~ [a2,e3,g#3,b3] ~ [b2,f#3,a3,d#4] ~ [b2,f#3,a3,d#4] ~ [c#3,g#3,b3,e4]") const riffC = note("~ [c#3,g#3,b3,e4] [c#3,g#3,b3,e4] ~ [c#3,g#3,b3,e4] ~ [c#3,g#3,b3,e4] [c#3,g#3,b3,e4]") const riffD = note("~ [c#3,g#3,b3,e4] ~ [g#2,b3,d#4,g#4] ~ [g#2,b3,d#4,g#4] ~ [g#2,b3,d#4,g#4]") const riffLoop = fatSaw(cat(riffA, riffB, riffC, riffD, riffA, riffB2, riffC, riffD)) .color("#7dd3fc") .punchcard({ fold: 1, cycles: 4 }) // ブラス const brassLoop = brassSound(cat( note("[g#3,b3,e4] ~ [g#3,b3,e4] [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4]"), note("~ [g#3,b3,e4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,e4,g#4]"), note("~ [b3,e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] [b3,e4,g#4]"), note("~ [b3,e4,g#4] ~ [d#4,g#4,b4] ~ [d#4,g#4,b4] ~ [d#4,g#4,b4]"), )) // ストリングス const stringsLoop = stringsSound(note(`< [e4,g#4,b4] [~@3 [d#4,f#4,b4]@4 [e4,g#4,b4]] ~ [~@3 [d#4,g#4,b4]@5] >`)) // ベース const bassSabi = bassSound(note(`< [a1 ~ a1 a1 ~ a1 ~ a1] [~ a1 ~ b1 ~ b1 ~ c#2] [~ c#2 c#2 ~ c#2 ~ c#2 c#2] [~ c#2 ~ e2 ~ e2 ~ e2] >`)) const bassBmelo = bassSound(note(`< a1 b1 g#1 c#2 a1 b1 c#2 [c#2@3 e2@5] f#1 [~@3 f#1@4 g1] g#1 [~@3 g#1@5] a1 a1 a2 g#1 ~ >`)) const bassAmelo2 = bassSound(note(`< [a1@6 ~ a1] [~ a1 ~ b1 ~ b1 ~ c#2] [~ c#2 c#2 ~ c#2 ~ c#2 c#2] [~ c#2 ~ e2 ~ e2 g#1 g#1] >`)) // コーラス const rest = note("~") const choirHead = note(`< [[e4,c#4]@2 [e4,c#4] [e4,c#4] [e4,c#4] [f#4,d#4] [f#4,d#4]@2] [~@4 [e4,c#4] [f#4,d#4] [f#4,d#4]@2] [[f#4,d#4]@2 [f#4,d#4] [e4,c#4] [f#4,d#4] [g#4,e4] [a4,f#4] [g#4,e4]] [~@4 [e4,c#4] [e4,c#4] [b4,e4]@2] [~@2 [a4,d#4] [g#4,e4]@3 [a4,f#4] [g#4,e4]] >`) const choirTailA = note(`< [~@2 [f#4,d#4] [e4,c#4] ~@2 [e4,c#4] [b4,e4]] [~@2 [a4,d#4] [g#4,e4]@3 [a4,f#4] [g#4,e4]] [~ [f#4,d#4]@2 ~@5] >`) const choirTailB = note(`< [~ [f#4,d#4]@2 ~ [e4,c#4] [e4,c#4] [f#4,d#4] [g#4,e4]] [~@2 [f#4,d#4] e4@3 [g#4,f#4] c#4] [~ e4@2 e4 [f#4,e4] [e4,d#4] [e4,c#4]@2] >`) const choirPhrase = choirSound(arrange( [5, choirHead], [3, choirTailA], [5, choirHead], [3, choirTailB], )) const bmTopA = note("b4 g#5 b4 b4") const bmTopB = note("~ g#5 b4 b4") const bmTopC = note("b4 a4 g#4 a4") const bmTopD = note("~ g#5 f#5 g#5") const bmTopE = note("~ g#5 f#5 e5") const bmeloChoirTop = cat( bmTopA, bmTopB, bmTopB, bmTopC, bmTopA, bmTopD, rest, rest, bmTopA, bmTopB, bmTopB, bmTopC, bmTopA, bmTopE, note("~@7 g#5"), rest, note("~@7 f#5"), ) const bmLowA = note("e4 g#4 g#4 g#4") const bmLowB = note("~ g#4 g#4 g#4") const bmLowC = note("g#4 f#4 e4 f#4") const bmLowD = note("f#4 g#4 g#4 g#4") const bmeloChoirLow = cat( bmLowA, bmLowB, bmLowB, bmLowC, bmLowD, note("~ c#5 b4 b4"), rest, rest, bmLowA, bmLowB, bmLowB, bmLowC, bmLowD, note("~ b4 b4 b4"), rest, rest, rest, ) // サビ const sbA = note("f#5 g#5 ~@6") const sbB = note("~@7 f#5") const sbD = note("~ a5 g#5 a5 g#5@2 ~ f#5") const sbE = note("~ f#5 f#5 e5 f#5@2 ~ f#5") const sabiChoirTop = cat( sbA, sbB, note("f#5 g#5 ~@4 g#5 b5"), sbD, sbA, sbB, sbE, sbE, sbA, sbB, note("f#5 g#5 ~@5 b5"), sbD, sbA, note("~ a5 g#5 a5 g#5 ~@2 b5"), note("~ a5 g#5 a5 g#5 f#5 f#5 e5"), sbB, ) const ansA = note("~@7 [g#4,b4]") const ansB = note("~ [g#4,b4]@5 ~@2") const sabiChoirLow = cat( rest, rest, ansA, ansB, rest, ansA, ansB, ansB, rest, rest, ansA, ansB, rest, ansA, ansB, ansB, ) const aahOff = cat( rest, rest, rest, rest, rest, rest, rest, rest, note("~@3 g#4 ~ g#4 ~ g#4"), note("~ g#4 ~ g#4 ~@4"), note("~@3 g#4 ~ g#4 ~ g#4"), note("~ g#4 ~ g#4 ~@4"), note("~@3 g#4 ~ g#4 ~ g#4"), note("~ g#4 ~ g#4 ~@4"), rest, rest, ) const lsA = note("g#5 ~ g#5@2 g#5 g#5 g#5 g#5") const lsB = note("g#5 ~ f#5@2 f#5 f#5 f#5 f#5") const lastChoirTop = cat( lsA, lsB, note("~ f#5 f#5 e5 f#5 f#5 f#5 f#5"), note("f#5 ~ e5@2 b4 b4 b4 g#5"), note("~ g#5 g#5@2 g#5@2 g#5 g#5"), note("g#5 ~ f#5@2 f#5 f#5 f#5 b5"), note("~ a5 g#5 a5 g#5@2 ~ b5"), note("~ a5 g#5 a5 g#5@2 e5 f#5"), ) const lastChoirLow = cat( note("b4 ~ b4@2 b4 b4 b4 b4"), note("b4 ~ b4@2 b4 b4 b4 b4"), note("~ b4 b4 e5 b4 b4 b4 b4"), note("b4 ~ b4@2 e4 e4 e4 b4"), note("~ b4 b4@2 b4@2 b4 b4"), note("b4 ~ b4@2 b4 b4 b4 b4"), note("~ b4 b4 b4 b4@2 ~ b4"), note("~ b4 b4 b4 b4@2 g#4 g#4"), ) // スタブ const stabIntro = squareEcho(note("[d#4,b4,d#5] ~ ~").fast(16/3)) const stabAmelo = squareEcho(note("[f#3,b3,f#4] ~ ~").fast(16/3)) const stabBmelo = squareEcho(note("[b4,d#5] ~ ~").fast(16/3)) // ギター const gtrChop = gtrChopSound(note("[[e4,b4] ~ [e4,b4] [e4,b4]]*4")) const gtrPowerLoop = gtrPowerSound(cat( note("[e3,b3,e4] ~ [e3,b3,e4] [e3,b3,e4] ~ [e3,b3,e4] ~ [e3,b3,e4]"), note("~ [e3,b3,e4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [g#3,b3,e4]"), note("~ [g#3,b3,e4] [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] [g#3,b3,e4]"), note("~ [g#3,b3,e4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4]"), )) const gtrChords = gtrCleanSound(note(`< [e3,g#3,b3] [d#3,f#3,b3] [c#3,g#3,b3] [c#3,g#3,b3] [a2,e3,g#3,b3] [b2,d#3,f#3,b3] [c#3,e3,g#3,b3] [e3,g#3,b3,d#4] [c#3,e3,g#3] [c#3,e3,g#3] [~@3 [g#2,d#3,g#3,b3]@5] [g#2,d#3,g#3,b3] [a2,e3,g#3,b3] [a2,e3,g#3,b3] ~ ~ ~ >`)) // カナネタ const marimbaLow = pluckTone(note(`< [[a2,e3] ~ [a2,e3] [a2,e3] ~ [a2,e3] ~ [a2,e3]] [~ [a2,e3] ~ [b2,f#3] ~ [b2,f#3] ~ [c#3,g#3]] [~ [c#3,g#3] [c#3,g#3] ~ [c#3,g#3] ~ [c#3,g#3] [c#3,g#3]] [~ [c#3,g#3] ~ [g#2,e3] ~ [g#2,e3] ~ [g#2,e3]] >`)) const marimbaHi = pluckTone(arrange( [16, note("c#5 ~ e5 e5 c#5 ~ c#5 e5")], [32, note("c#5 ~ e5 e5 c#5 c#5 c#5 e5")], )) // パッド const padBmelo = padSound(note("<g#5 [~@3 d#5@5] b5 ~ ~ b4 [~@2 b5@6] ~>")) // ドラム const kick4 = dr(s("bd*4")) const hats8 = hat(s("hh*8")).gain("[0.35 0.65]*4") const tomAcc = dr(s("[~ ~ mt ~] ~ ~ ~")).gain(0.55).mask("<1 0 0 0>") const rimGhost = dr(s("[~ ~ rim ~] [~ rim ~ ~] ~ ~")).gain(0.45).mask("<1 0!7>") const clapAcc = dr(s("~ ~ [~ ~ ~ cp] ~")).gain(0.55).mask("<0!7 1>") const crashHead = dr(s("cr ~ ~ ~")).gain(0.55).mask("<1 0!7>") const rideAcc = hat(s("~ rd ~ rd")).gain(0.4).mask("<0!3 1>") const drumsIntro = stack(kick4, hats8, tomAcc, clapAcc) .punchcard({ fold: 1, cycles: 3 }) const drumsAmelo = stack(kick4, hats8, tomAcc, rimGhost, clapAcc) .punchcard({ fold: 1, cycles: 3 }) const bandBeat = stack( dr(s("[bd ~ ~ ~] [sd ~ ~ sd] [~ ~ bd ~] [sd ~ bd ~]")), hat(s("oh*8")).gain(0.45), crashHead, rideAcc, ).punchcard({ fold: 1, cycles: 3 }) const drumsSabi = stack( kick4, hats8, hat(s("[hh oh]*4")).gain(0.5), crashHead, ).punchcard({ fold: 1, cycles: 3 }) const fillTom = stack(dr(s("[sd*8] [mt*4 lt*4]")), dr(s("bd ~ ~ ~"))) const fillSnare = dr(s("[sd sd ~ sd] [sd ~ sd sd] [bd ~ bd ~] [sd ~ ~ ~]")) const tamb16 = hat(s("tb*16")).gain(0.28) const sdBackbeat = dr(s("~ ~ ~ sd")).gain(0.75) // イントロ const intro1 = stack( riffLoop, drumsIntro, stabIntro.mask("<0!7 1>"), ) const intro2 = stack( riffLoop, drumsAmelo, choirPhrase, stabIntro.mask("<1!4 0!4>"), ) // ブレイク const brk = stack( fatSaw(cat(riffA, note("~ [a2,e3,g#3,b3] ~ [b2,f#3,b3,d#4] ~ [b2,f#3,b3,d#4] ~ ~"))), dr(s("<[bd*4] [bd bd bd ~]>")), hat(s("<[hh*8] [hh!6 ~ ~]>")).gain(0.4), ) // Aメロ const aMelo = stack( riffLoop, marimbaLow, stack(drumsAmelo.mask("<1!15 0>"), fillTom.mask("<0!15 1>")), choirPhrase, stabAmelo.mask("<1 1 1 0>"), brassSound(cat( note("~ [b3,e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] [b3,e4,g#4]"), note("~ [b3,e4,g#4] ~ [d#4,g#4,b4] ~ [d#4,g#4,b4] ~ [d#4,g#4,b4]"), )).mask("<0!14 1 1>"), ) // Bメロ const bMeloBand = stack( riffLoop, brassLoop, stringsLoop, bassBmelo, gtrChords, padBmelo, bandBeat, stabBmelo.mask("<1 1 0 0>"), ) const bMeloVocal = stack( bMeloBand, choirSound(bmeloChoirTop), choirSound(bmeloChoirLow).gain(0.85), ) // サビ const sabi = stack( riffLoop, brassLoop, stringsLoop, bassSabi, drumsSabi, gtrChop, choirSound(sabiChoirTop), choirSound(sabiChoirLow).gain(0.85), choirSound(aahOff).gain(0.7), ) // Aメロ const aMelo2 = stack( riffLoop, stack(drumsAmelo.mask("<1!16 0>"), fillTom.mask("<0!16 1>")), choirPhrase, bassAmelo2, tamb16.mask("<0!8 1!8 0>"), sdBackbeat.mask("<0!8 1!9>"), ) // サビ const quiet = stack( riffLoop, brassLoop.velocity(0.22), stringsLoop, choirSound(sabiChoirTop), hat(s("[hh oh]*4")).gain(0.35), fillSnare.mask("<0!7 1>"), ) // サビ const lastSabi = stack( riffLoop, brassLoop, stringsLoop, bassSabi, stack(drumsSabi, hat(s("[hh oh]*4")).gain(0.55)), gtrPowerLoop, choirSound(lastChoirTop), choirSound(lastChoirLow).gain(0.8), marimbaHi, ) // 構成 arrange( [8, intro1], [16, intro2], [2, brk], [16, aMelo], [17, bMeloVocal], [16, sabi], [17, aMelo2], [24, arrange([7, bMeloBand], [17, bMeloVocal])], [9, sabi], [8, quiet], [48, lastSabi], ).cpm(136 / 4)