Rickroll Audio (2026-08)
A more literal rickroll audio cue — legal research + compositional brief (2026-08-08)
Status: research + plan only. No audio written, no code touched. Companion to
NEXT.md’s “The rickroll gag” section and assets/gen/music/season3_exploratory/README.md
(the bytebeat_*.wav sketches, currently the safe fallback wired into the actual build
happening in parallel to this doc). This doc asks a narrower question: could the payoff
sound more like “Never Gonna Give You Up” — evoke it more directly than a deliberately
alien bytebeat — while staying legally sound? Short answer up front: yes, via a
production-style pastiche with an original melody, and it’s a real net upgrade over the
bytebeat for basically zero added legal exposure — see the recommendation at the end.
1. Legal research findings
1.1 The core distinction: melody/lyrics vs. everything else
US copyright law protects a musical work’s expression — melody, lyrics, and (per some courts) a sufficiently original selection and arrangement of otherwise-common elements. It does not protect tempo, key, genre, instrumentation choices, or common chord progressions on their own:
“Copyright generally does not extend to abstract musical concepts such as musical styles, genres, grooves, common rhythms or chord progressions… common musical elements — such as chord progressions, tempos, hook phrases, and syncopation — are not individually protectable under copyright, either because they are not original or because they are ‘indispensable and naturally associated with the treatment of a given [musical] idea.’” — Never Going Out of Style: How AI-Generated Music’s Reliance on Style-Based Prompts Calls for a Reminder that No One Can Copyright a Musical Genre, ABA Entertainment & Sports Lawyer (2025)
This is the scènes à faire doctrine (elements standard/necessary to a genre aren’t copyrightable) combined with the idea/expression dichotomy (you can’t copyright an idea, only a particular expression of it) — see the case summaries collected in Un-Blurring Substantial Similarity, NYU JIPEL and the general treatment at BitLaw: Works Unprotected by Copyright Law. The one caveat worth flagging: courts (e.g. the Gray v. Perry “Dark Horse” litigation, see the Lexology write-up) have sometimes let plaintiffs argue that a particular combination of otherwise-generic elements is itself protectable if it’s sufficiently distinctive — so “just tempo and instrumentation, nothing else in common” is the safe target, not “everything except the exact notes.”
1.2 Two separate copyrights, and what “sound-alike” means in US law
A commercial recording carries two copyrights: the composition (melody, lyrics, chords as written) and the sound recording (that specific performance/production). US law explicitly carves out sound-alikes at the sound-recording layer:
“The concept of ‘sound alike’ recording is explicitly allowed in Section 114(b) of the U.S. Copyright statute, which states that the exclusive rights in a sound recording do not extend to making another sound recording that consists entirely of independent sounds, even if those sounds imitate or simulate the copyrighted recording.” — Sound-alikes — all you need to know, ClickNClear (see also the Wikipedia summary and 17 U.S.C. §114(b) itself)
But that §114(b) carve-out is about the recording, not the composition. A sound-alike that also reproduces the actual melody and lyrics still needs a license for the composition (this is why “soundalike” jingles in ads still pay mechanical/sync fees when they reuse the real tune — see the ClickNClear and Wood Law Offices overviews). This project’s plan sidesteps that entirely by not reproducing the melody or lyrics at all — see §2 below. Composition-copying is the one thing that actually requires a license or an exception; production-style-copying does not.
1.3 Backstop exceptions (useful, but secondary to just not copying the melody)
Even though the plan in §2/§3 is designed to not need an exception, it’s worth knowing the backstops exist, because Torsten works from Germany and the artist/song is UK in origin:
- US fair use / parody — Campbell v. Acuff-Rose Music (1994) held a parody’s commercial nature doesn’t defeat fair use by itself; 2 Live Crew’s “Pretty Woman” parody, which did copy the original’s music and opening line, was protected because it was transformative commentary on the original. (Oyez case summary, Justia opinion text). Relevant here mainly as evidence that even a much more aggressive reference than what’s proposed below has real legal cover in the US — this project’s plan needs less protection than Campbell’s facts, not more.
- German UrhG §51a (pastiche) — added 2021 implementing the EU DSM Directive, explicitly covers caricature, parody, and pastiche, and the legislative materials name memes, GIFs, mashups, and internet-culture remixing as intended use cases — a closer fit for “a game referencing a famous internet meme” than classic parody doctrine is. (Kluwer Copyright Blog: The dawn of pastiche, statute text via copyrightexceptions.eu). Relevant because Torsten is based in Germany.
- UK CDPA s.30A (parody/pastiche fair dealing) — in force since October 2014, “fair dealing with a work for the purposes of caricature, parody or pastiche does not infringe copyright.” (legislation.gov.uk text, Fieldfisher overview). Relevant because Astley and the song are UK in origin, even though UK law isn’t the most likely forum for a dispute over a hobby project.
The point of listing these: they’re a real, checkable safety net if anyone ever argued the pastiche brief below “evokes too much.” They are not the primary compliance strategy — the primary strategy is simpler and stronger: don’t copy the one thing that’s protected (melody + lyrics), and the exception question mostly never has to come up.
1.4 A separate risk that’s easy to miss: voice, not melody
If the payoff ever adds a sung vocal, there’s a distinct legal track that has nothing to do with copyright: right of publicity / voice misappropriation, for imitating a real person’s distinctive voice closely enough that listeners think it’s them.
Ford Motor Co. hired a former Bette Midler backup singer and told her to “sound as much as possible like the Bette Midler record”; the Ninth Circuit held this was actionable — a person’s distinctive voice is protectable property under California’s right of publicity, separate from any copyright question. — Midler v. Ford Motor Co., 849 F.2d 460 (9th Cir. 1988)
Frito-Lay hired a Tom Waits soundalike for a Doritos radio ad after Waits had publicly refused to do commercials; the jury awarded $2.375M for voice misappropriation and false endorsement. — Waits v. Frito-Lay, Inc., 978 F.2d 1093 (9th Cir. 1992)
Both cases were commercial advertising implying the celebrity’s endorsement of a product — a meaningfully different context from a non-commercial joke inside an indie game that isn’t claiming Astley endorses anything. But the underlying principle (imitating someone’s actual vocal timbre/delivery is a separate legal exposure from imitating a song’s production style) is worth holding as a hard line regardless of context. Practical takeaway for §3: no attempt to mimic Rick Astley’s specific voice/vocal delivery. If a vocal is used at all, keep it non-mimicking (different register, processed/robotic, wordless, or omitted entirely) — this is a “why bother” risk, not a “would definitely lose” risk, but there’s no upside to taking it on.
2. The line this project should hold
Evoke (all in the “not independently protectable” bucket per §1.1):
- The era and genre: late-80s Hi-NRG/dance-pop, Stock Aitken Waterman-style production.
- The tempo: ~113 BPM (the real song’s tempo — SongBPM, GetSongBPM; tempo numbers are metadata, not protected expression, so citing/matching them carries zero risk).
- The mood/key-color: a minor key in the same neighborhood as the original (commonly cited as B♭ minor — Tunebat — algorithmically-detected metadata, same reasoning as tempo above).
- The instrumentation/production texture: bright gated synth-pulse bassline (the real track’s “piano-bass” DX7 line), a punchy drum-machine 4-on-the-floor-adjacent groove, a Juno-106-style pad/chord stab, bright/sharpened reverb-heavy mix character. All documented, unprotected production choices — see Sound on Sound’s “Classic Tracks” writeup for the actual gear list (Yamaha DX7 for the bassline, Linn 9000 drums, Roland Juno-106, Lexicon/AMS reverb and delay on vocals).
Must stay original — not evoked, not approximated:
- The actual melody (verse and especially the hook line — the “never gonna give you up…” tune is the single most recognizable, and most protected, piece of the song).
- The actual lyrics, in whole or in any distinctive fragment.
- The actual chord progression as used in the song, note-for-note/degree-for-degree. Same key-neighborhood and mood is fine (see above); the exact progression is not — replicate the feeling of a minor-key SAW ballad-turned-dance-track, not its harmonic fingerprint.
- Rick Astley’s own vocal timbre/delivery (see §1.4) — if a vocal exists at all, it must not be a soundalike performance.
This is the same “evoke the vibe, not the fingerprint” principle the project’s own
assets/gen/music/season3_exploratory/README.md and AUDIO.txt already apply to every
other track (synthwave groove for neon_backalley.wav, tango for tango.wav, etc.) — none
of those claim to be a specific existing song, they evoke a genre. This is the same
move, just aimed at one very specific, very recognizable target because that’s the joke.
3. Compositional brief for tools/make_music.py
Everything below is achievable with the tooling already in the file (read in full for this
doc — render_voice(), pulse()/triangle(), kick()/hihat()/clap(), the
bar_len()/beats_to_samples() helpers, and the existing per-track make_*() pattern).
Nothing here needs a new synthesis primitive; it needs a new make_rickroll()-style
function following the existing recipe, plus one new melody/chord progression that does
not exist yet — the actual composing work, not just parameter tuning.
Tempo & meter: 113 BPM, 4/4 — matches the real song’s tempo exactly (safe, per §2).
Key: B♭ minor (or any adjacent minor key — A minor and B minor are both fine
substitutes if B♭ is awkward for note_freq()’s octave math) — matches the real song’s
mood/color, not its literal pitch center.
Structure: 8–16 bars, matching the project’s existing loop-length convention
(make_lidl_lunch/make_soccer are 8 bars at similar tempos). A short intro (2 bars,
bass + pad only, no lead) into a “chorus-shaped” main loop (lead melody enters) reads as
more song-like than a flat one-section loop — worth the extra bars for this one gag since
recognizability of structure (verse-into-hook shape) is part of what sells the reference,
and structure/form is exactly the kind of shape not covered by melody copyright ownership.
Bassline (the DX7 “piano-bass” reference): pulse() with a bright, fairly narrow duty
cycle (duty≈0.25–0.35 reads brighter/more synthetic than the 0.5 square used for e.g.
make_soccer’s bass) on a syncopated eighth-note pattern with rests — not a straight
walking bass. render_voice() already supports this via the same (notes, beats) event
list format every other track uses; short release (0.04–0.06) keeps it snappy/gated
rather than smooth, matching the “gated synth bass” character of the reference era.
Drums: reuse kick()/hihat()/clap() as-is (they’re already generic enough).
Pattern: kick on 1 and 3 (or a 4-on-the-floor-adjacent pattern per the “evoke the era”
brief — Hi-NRG/dance-pop of this period leans 4-on-the-floor more than a straight rock
backbeat), clap or hat on the offbeats. make_lidl_lunch’s existing kick/hihat step-loop
(step = beats_to_samples(0.5, bpm), kick every 4 steps, hat on odd steps) is close to the
right shape already and can be adapted directly.
Chords/pad: a Juno-106-style sustained pad — pulse() with a lower duty cycle
(≈0.2–0.25, same approach make_minigolf’s chord voice already uses) or triangle()
for a softer analog-pad feel, on whole/half-note chord changes under the bass and melody.
This progression must be composed fresh — pick a minor i–VI–III–VII or i–iv–v-type
progression (common, unprotectable minor-key pop shapes per §1.1) that is demonstrably
not the real song’s chord sequence. This is the one piece of actual composing work in
this brief, not a parameter to tune — whoever implements this needs to sit down and write
4–8 real chords, not port the real song’s changes with a different root note.
Melody/lead (the “hook” slot): also composed fresh — an original tune, same
register/contour ambition as a big synth-pop hook (mostly stepwise motion with a couple of
larger leaps, landing on strong beats), same rhythmic energy as the era (mostly eighth
notes with the occasional syncopated pickup), but a different actual sequence of pitches
and rhythm from “never gonna give you up, never gonna let you down.” render_voice() with
pulse() at a bright duty cycle (~0.4, matching make_lidl_lunch’s melody voice) is the
right timbre; the melody itself needs composing, not generating from a template.
Vocal: recommend no sung vocal at all — an instrumental synth-pop pastiche reads as
“unmistakably that meme” to a player primed by the visual gag (per the research questions’
own framing) without needing a voice in the mix at all, which sidesteps §1.4 entirely.
If a vocal element is wanted for extra punch, keep it non-mimicking: a wordless “ooh/aah”
pad-style vocal-synth patch (not a performance of Astley’s actual delivery/register/rasp),
or lean on the existing bytebeat-adjacent 8-bit idiom for a “sung” line instead of a real
voice.
What doesn’t need new tooling: waveform types, envelope shaping, percussion
one-shots, the mix/finalize pipeline, the WAV export — all already exist and already
produce exactly this instrumentation family (make_lidl_lunch and make_soccer are both
already “bright pulse bass + drum-machine percussion + pulse-wave lead” in a similar BPM
range). This is squarely inside what the tool already does; it just hasn’t been pointed at
this specific era/mood/melody combination yet.
4. Risk assessment and recommendation
Residual risk, even done exactly as specified above: low, but not literally zero. Two real (if narrow) exposure paths remain even with a fully original melody/chords:
- “Selection and arrangement” arguments (§1.1, Gray v. Perry-style) — a claim that
copying enough generic elements in combination (tempo + key-color + instrumentation
- structure + genre, all at once, all deliberately aimed at one specific song) adds up to something a court could call substantially similar even without melody overlap. This is a real doctrine, but it’s also the losing side more often than not in reported cases, and courts have been especially skeptical of it for “genre pastiche” facts specifically (see the ABA piece in §1.1, written about exactly this AI-generated-pastiche fact pattern).
- Someone unfamiliar with music-copyright nuance (a platform’s automated content-ID system, a casual viewer, a future collaborator) assuming “sounds like Rick Astley” == “is infringing” — a perception/moderation risk, not really a legal one, but worth naming since it could cause friction (e.g. an automated takedown on a video-sharing platform if this ever gets streamed/clipped) even where the legal analysis is sound.
Comparison to the current bytebeat fallback: the bytebeat approach (already built,
already shipped per NEXT.md) carries essentially zero residual risk of either kind —
it doesn’t share tempo, key, instrumentation, or structure with the real song, so there’s
no “selection and arrangement” argument available even in principle, and nothing an
automated system would ever flag. That’s not an accident; it was the explicit design goal
(assets/gen/music/season3_exploratory/README.md: “deliberately weird/broken-sounding is
the joke”).
Recommendation: build the pastiche described in §3 as an addition alongside the bytebeat, not a replacement — reachable as an “upgraded” or alternate rickroll sting rather than a like-for-like swap. This is a genuine two-tier joke (the wrong-but-familiar bytebeat vs. the parody-that-almost-lands-if-you-squint synth-pop track) and it lets the project keep the zero-risk fallback as the default while adding a strictly-more-legally- exposed-but-still-well-inside-the-safe-zone option for the moment the trove actually pays off. Given the residual risk above is genuinely low and well-precedented (§1.1–1.3), and the upside (a payoff that actually reads as “the rickroll” rather than “spooky bit-crushed noise”) is real, this is worth the small amount of extra exposure — do build it, but compose the melody/chords fresh per §3 rather than taking any shortcut that ports the real song’s actual notes with the serial numbers filed off, and skip the sung vocal per §1.4. If Torsten wants a belt-and-suspenders version, the German UrhG §51a pastiche exception (§1.3) is a strong, on-point, and rarely-litigated-against fallback specifically because its legislative history calls out meme/internet-culture pastiche by name — but the composition brief in §3 is designed so that fallback should never actually need invoking.
5. Post-build verification against the real chorus (2026-08-08)
make_rickroll() (tools/make_music.py) was built from this doc’s §3 brief before this
section existed — the melody/chords were composed fresh from the brief’s constraints,
without seeing the real song’s actual transcription. Once Torsten sourced Hooktheory’s
chorus data directly (theorytab page itself 403’d to automated fetching; pasted in
manually), it became possible to check the finished composition against the real thing
note-for-note rather than just trusting the brief avoided it by construction.
Real chorus, as transcribed: Db major, 114 BPM, melody range Ab3–Ab4, most-used chord ii — matching the tempo/key claims already gathered from other sources in §1, and resolving what looked like a source disagreement: a chord-recognition source’s “Ab major, chords Ab-Fm7-Bbm7-Ebm7” turns out to be the same four absolute chords as Hooktheory’s Db-major reading (ii=Ebm9, V=Ab(add9), iii=Fm7, vi=Bbm7) — just labeled from a different tonal center, not a real disagreement. The chorus hook’s actual melody is a syncopated, irregular rhythm (dotted-eighths, sixteenth-note pickup runs, mid-phrase rests) over a stepwise-descent-plus-ascending-pickup contour: F4-F4-Eb4 / Ab3-Bb3-C4-Bb3 / Eb4-Eb4-Db4 / C4-Bb3 / Ab3-Bb3-Db4-Bb3, repeating with variation across 8 bars.
Comparison to make_rickroll()’s hook (Bb minor: Bb4-Db5-F5-Eb5-Db5 |
Gb4-Bb4-Db5-Bb4-Ab4 | F4-Ab4-Db5-Ab4-F4 | Eb4-C5-Eb5-C5-Bb4, an identical
“4 eighths + quarter + rest” shape in every bar):
- Rhythm: no overlap — the real hook’s irregular, syncopated shape shares nothing with the composed hook’s flat, uniform bar-shape.
- Melody/contour: no overlap — different scale-degree sequences, different interval shapes; the real hook is a stepwise descent punctuated by ascending pickups, the composed one leans on repeated-note-then-leap figures.
- Chords: two of the composed progression’s four triads (Bbm, Ab) also appear among the real song’s four chords, but as plain triads (not the real 7th/9th voicings), in a different order with no shared consecutive motion (composed: i→VI→III→VII = Bbm→Gb→Db→Ab; real: ii→V→iii→vi = Ebm→Ab→Fm→Bbm). Per §1.1, individual chords aren’t protectable — only the sequence as used is, and that sequence differs here.
Conclusion: verified clean. The one thing this doc’s brief had to take on faith (that composing from constraints, without copying, wouldn’t accidentally converge on the real melody) held up against an actual side-by-side check, not just a design argument.
6. Decision reversal: literal reproduction instead of original composition (2026-08-08)
Torsten’s explicit decision, after being shown the risk tradeoff directly (asked
whether to (a) stay original and just tune closer to the real tempo/key/voicing, or
(b) rewrite make_rickroll() to literally use the transcribed melody+chords below — the
exact thing §2/§5 above concluded should be avoided): (b), use the real notes. Stated
rationale: relying on meme-culture/parody norms for the legal footing here, not on
avoidance-by-composition. This supersedes §2’s “must stay original” line and §5’s
“verified clean” conclusion for this specific track — both remain accurate accounts of
what was true before this decision, not retracted, just superseded going forward. The
zero-risk bytebeat rickroll track (§4’s fallback) is unaffected and still plays as one
of the two random picks at trigger time.
Source data (Hooktheory theorytab for “Never Gonna Give You Up”, chorus section,
pasted in manually since the page itself 403’s automated fetching — notes/chords/keys
only; the clipboard payload’s redundant tick-level duplicate of the same data is omitted
here for length):
{"notes":[{"beat":1,"duration":0.75,"sd":"3","octave":0},{"beat":1.75,"duration":0.75,"sd":"3","octave":0},{"beat":2.5,"duration":1,"sd":"2","octave":0},{"beat":4,"duration":0.25,"sd":"5","octave":-1},{"beat":4.25,"duration":0.25,"sd":"6","octave":-1},{"beat":4.5,"duration":0.25,"sd":"7","octave":-1},{"beat":4.75,"duration":0.25,"sd":"6","octave":-1},{"beat":5,"duration":0.75,"sd":"2","octave":0},{"beat":5.75,"duration":0.75,"sd":"2","octave":0},{"beat":6.5,"duration":0.5,"sd":"1","octave":0},{"beat":7,"duration":0.25,"sd":"7","octave":-1},{"beat":7.25,"duration":0.75,"sd":"6","octave":-1},{"beat":8,"duration":0.25,"sd":"5","octave":-1},{"beat":8.25,"duration":0.25,"sd":"6","octave":-1},{"beat":8.5,"duration":0.25,"sd":"1","octave":0},{"beat":8.75,"duration":0.25,"sd":"6","octave":-1},{"beat":9,"duration":0.75,"sd":"1","octave":0},{"beat":9.75,"duration":0.75,"sd":"2","octave":0},{"beat":10.5,"duration":0.25,"sd":"7","octave":-1},{"beat":10.75,"duration":0.75,"sd":"6","octave":-1},{"beat":11.5,"duration":0.5,"sd":"5","octave":-1},{"beat":12.5,"duration":0.5,"sd":"5","octave":-1},{"beat":13,"duration":1,"sd":"2","octave":0},{"beat":14,"duration":1,"sd":"1","octave":0},{"beat":16,"duration":0.25,"sd":"5","octave":-1},{"beat":16.25,"duration":0.25,"sd":"6","octave":-1},{"beat":16.5,"duration":0.25,"sd":"1","octave":0},{"beat":16.75,"duration":0.25,"sd":"6","octave":-1},{"beat":17,"duration":0.75,"sd":"3","octave":0},{"beat":17.75,"duration":0.75,"sd":"3","octave":0},{"beat":18.5,"duration":1.25,"sd":"2","octave":0},{"beat":20,"duration":0.25,"sd":"5","octave":-1},{"beat":20.25,"duration":0.25,"sd":"6","octave":-1},{"beat":20.5,"duration":0.25,"sd":"7","octave":-1},{"beat":20.75,"duration":0.25,"sd":"6","octave":-1},{"beat":21,"duration":0.75,"sd":"5","octave":0},{"beat":21.75,"duration":0.5,"sd":"7","octave":-1},{"beat":22.25,"duration":0.5,"sd":"1","octave":0},{"beat":22.75,"duration":0.25,"sd":"7","octave":-1},{"beat":23,"duration":1,"sd":"6","octave":-1},{"beat":24,"duration":0.25,"sd":"5","octave":-1},{"beat":24.25,"duration":0.25,"sd":"6","octave":-1},{"beat":24.5,"duration":0.25,"sd":"7","octave":-1},{"beat":24.75,"duration":0.25,"sd":"6","octave":-1},{"beat":25,"duration":0.75,"sd":"1","octave":0},{"beat":25.75,"duration":0.75,"sd":"2","octave":0},{"beat":26.5,"duration":0.75,"sd":"7","octave":-1},{"beat":27.25,"duration":0.25,"sd":"6","octave":-1},{"beat":27.5,"duration":0.5,"sd":"5","octave":-1},{"beat":28.5,"duration":0.5,"sd":"5","octave":-1},{"beat":29,"duration":0.5,"sd":"2","octave":0},{"beat":29.5,"duration":0.5,"sd":"1","octave":0},{"beat":30,"duration":1,"sd":"1","octave":0}],
"chords":[{"beat":1,"duration":1.5,"root":2,"type":9},{"beat":2.5,"duration":2.5,"root":5,"type":5,"adds":[9]},{"beat":5,"duration":1.5,"root":3,"type":7},{"beat":6.5,"duration":2.5,"root":6,"type":7},{"beat":9,"duration":1.5,"root":2,"type":9},{"beat":10.5,"duration":2.5,"root":5,"type":5,"adds":[9]},{"beat":13,"duration":1.5,"root":3,"type":7},{"beat":14.5,"duration":2.5,"root":6,"type":7},{"beat":17,"duration":1.5,"root":2,"type":9},{"beat":18.5,"duration":2.5,"root":5,"type":5,"adds":[9]},{"beat":21,"duration":1.5,"root":3,"type":7},{"beat":22.5,"duration":2.5,"root":6,"type":7},{"beat":25,"duration":1.5,"root":2,"type":9},{"beat":26.5,"duration":2.5,"root":5,"type":5,"adds":[9]},{"beat":29,"duration":2,"root":3,"type":7},{"beat":31,"duration":1,"root":4,"type":5,"inversion":1,"adds":[9]},{"beat":32,"duration":0.75,"root":5,"type":11},{"beat":32.75,"duration":0.25,"root":4,"type":5,"inversion":2,"adds":[9]}],
"keys":[{"beat":1,"scale":"major","tonic":"Db"}],
"songStats":{"key":"Db Major","tempo":114,"meter":"4/4","genre":["Blues","Pop","House"],"melodyRange":"Ab3-Ab4","mood":["Smooth","Complex","Unexpected","Bright"],"mostUsedChord":"ii"}}
Decoded to actual note names/octaves (Db major; scale degree → semitones-from-tonic
via the standard major-scale pattern 0,2,4,5,7,9,11; octave tag −1/0 is a full octave,
converted to this project’s scientific-pitch-notation octave numbers the same way
note_freq() already reads them):
degree,octave → note: 1,0→Db4 · 2,0→Eb4 · 3,0→F4 · 5,0→Ab4 · 5,-1→Ab3 ·
6,-1→Bb3 · 7,-1→C4 — these are the only seven combinations that actually occur in the
data above.
Melody, gaps filled in as explicit rests (8 bars, 4/4, 114 BPM):
Bar1: F4·.75 F4·.75 Eb4·1 R·.5 | Ab3·.25 Bb3·.25 C4·.25 Bb3·.25
Bar2: Eb4·.75 Eb4·.75 Db4·.5 C4·.25 Bb3·.75
Bar3: Ab3·.25 Bb3·.25 Db4·.25 Bb3·.25 Db4·.75 Eb4·.75 C4·.25 Bb3·.75
Bar4: Ab3·.5 R·.5 Ab3·.5 Eb4·1 Db4·1 R·1
Bar5: Ab3·.25 Bb3·.25 Db4·.25 Bb3·.25 F4·.75 F4·.75 Eb4·1.25 R·.25
Bar6: Ab3·.25 Bb3·.25 C4·.25 Bb3·.25 Ab4·.75 C4·.5 Db4·.5 C4·.25 Bb3·1
Bar7: Ab3·.25 Bb3·.25 C4·.25 Bb3·.25 Db4·.75 Eb4·.75 C4·.75 Bb3·.25 Ab3·.5
Bar8: R·.5 Ab3·.5 Eb4·.5 Db4·.5 Db4·1 R·2
Chords — the ii9–V(add9)–iii7–vi7 loop, 3 full statements plus a 4th ii9–V(add9) before the turnaround bar:
[ii9=Ebm(add9)·1.5, V(add9)=Ab(add9)·2.5, iii7=Fm7·1.5, vi7=Bbm7·2.5] × 3
+ [ii9·1.5, V(add9)·2.5] (bar 7, 4th ii-V)
+ [iii7=Fm7·2, IV(add9)inv1=Gb(add9)·1, V11≈Ab(add9/11)·0.75, IV(add9)inv2·0.25] (bar 8, turnaround)
make_rickroll() in tools/make_music.py is built directly from this decoded table —
voicings are simplified triad/7th/9th chords rather than exact inversions (the engine’s
render_voice() doesn’t model bass-note inversions), and bass notes are the chord roots
sustained per-segment rather than a note-for-note reproduction of the real bassline (not
transcribed here). Rendered to assets/gen/music/rickroll_hooktheory.wav, wired as the
'rickroll_hooktheory' MusicName.
Sources
- ABA Entertainment & Sports Lawyer — “Never Going Out of Style” (AI pastiche, genre non-copyrightability), 2025
- NYU JIPEL — Un-Blurring Substantial Similarity
- BitLaw — Works Unprotected by Copyright Law
- Lexology — Gray v. Perry, selection-and-arrangement of unprotectable elements
- ClickNClear — Sound-alikes, all you need to know (17 U.S.C. §114(b))
- Wikipedia — Sound-alike
- Wood Law Offices — Music Copyright: Covers, Samples & Infringement
- Oyez — Campbell v. Acuff-Rose Music, Inc. (1994)
- Justia — Campbell v. Acuff-Rose Music, Inc., 510 U.S. 569 (1994), full opinion
- Kluwer Copyright Blog — The dawn of pastiche (German UrhG §51a)
- copyrightexceptions.eu — UrhG §51a statute text
- legislation.gov.uk — CDPA 1988, Section 30A (parody/pastiche fair dealing)
- Fieldfisher — The development of the parody exception to copyright infringement
- vLex — Midler v. Ford Motor Co., 849 F.2d 460 (9th Cir. 1988)
- Justia — Waits v. Frito-Lay, Inc., 978 F.2d 1093 (9th Cir. 1992)
- Sound on Sound — Classic Tracks: Rick Astley “Never Gonna Give You Up” (production/gear detail)
- Wikipedia — Never Gonna Give You Up (genre, credits, production)
- SongBPM — Never Gonna Give You Up tempo
- GetSongBPM — Never Gonna Give You Up tempo
- Tunebat — Never Gonna Give You Up key/BPM data