Commit ab600f5d by PLN (Algolia)

feat(parvagues): track analysis, streaming fixes, UX polish

- Tidal source analysis: ~60 tracks across 20 gigs mapped to .tidal files
  with 5 key ingredients each (pattern/sample/effect/technique/structure)
- Fix streaming embeds: SoundCloud user ID, YouTube video ID, Bandcamp params
- Live subpages: rewrite [slug].js with proper frontmatter access, server-side
  isPostEvent, MediaSection with SoundCloud/archive.org inline embeds
- REC badge: clickable button opens best audio source directly
- AsSeenAt: correct URLs (TOPLAP, Opal, Cookie Collective), tighter layout
- Replace em dashes with hyphens across all content
- Fix past events showing "details coming soon"
- FairyTeuf location: PSC
parent 6df2ef65
const credentials = [ const credentials = [
{ name: 'TOPLAP', detail: '20 Years', url: 'https://toplap.org/' }, { name: 'TOPLAP', detail: '20 Years', url: 'https://blog.toplap.org/2024/01/20/toplap20-events-feb-23-25/' },
{ name: 'Algorave', detail: 'GZ Lyon', url: 'https://algorave.com/' }, { name: 'Algorave', detail: 'GZ Lyon', url: 'https://algorave.com/' },
{ name: 'Opal Festival', url: 'https://www.opal-music.com/' }, { name: 'Opal Festival', detail: '2024 · 2025', url: 'https://www.opal-festival.com/' },
{ name: 'Cookie Collective', url: 'https://www.cookie.paris/' }, { name: 'Cookie Collective', detail: 'Compilation', url: 'https://ccc.cookie.paris/projects/ugo-parvague/' },
{ name: '38C3', detail: 'House of Tea', url: 'https://soundcloud.com/parvagues/live-38c3-house-of-tea' }, { name: '38C3', detail: 'House of Tea', url: 'https://soundcloud.com/parvagues/live-38c3-house-of-tea' },
{ name: '39C3', detail: 'House of Tea', url: 'https://soundcloud.com/parvagues/live-39c3' }, { name: '39C3', detail: 'House of Tea', url: 'https://soundcloud.com/parvagues/live-39c3' },
]; ];
...@@ -17,7 +17,7 @@ export default function AsSeenAt() { ...@@ -17,7 +17,7 @@ export default function AsSeenAt() {
> >
As seen at As seen at
</p> </p>
<div className="flex flex-wrap justify-center items-center gap-x-8 gap-y-4"> <div className="flex flex-wrap justify-center items-center gap-x-5 md:gap-x-8 gap-y-3">
{credentials.map(({ name, detail, url }) => ( {credentials.map(({ name, detail, url }) => (
<a <a
key={name} key={name}
......
...@@ -7,7 +7,7 @@ export default function BioSection() { ...@@ -7,7 +7,7 @@ export default function BioSection() {
style={{ color: 'var(--text-primary)' }} style={{ color: 'var(--text-primary)' }}
> >
<strong className="font-display">ParVagues</strong> est un projet de{' '} <strong className="font-display">ParVagues</strong> est un projet de{' '}
<em>livecoding</em> solo musique électronique composée et jouée en <em>livecoding</em> solo, musique électronique composée et jouée en
temps réel par le code. Algorave, techno, drum &amp; bass, breakbeat : temps réel par le code. Algorave, techno, drum &amp; bass, breakbeat :
chaque set est unique, joué sur scène avec{' '} chaque set est unique, joué sur scène avec{' '}
<a <a
......
import Image from 'next/image';
// Variant A: Giant logo as background watermark, very low opacity, centered behind title
export function HeroA() {
return (
<section className="relative h-screen flex items-center justify-center overflow-hidden">
<div className="absolute inset-0 flex items-center justify-center">
<Image
src="/images/parvagues/logo_transparent.png"
alt=""
width={900}
height={900}
className="opacity-[0.07] select-none pointer-events-none"
style={{ filter: 'blur(1px)' }}
priority
/>
</div>
<div className="absolute inset-0" style={{ background: 'radial-gradient(ellipse at center, transparent 30%, var(--surface) 70%)' }} />
<div className="relative z-10 text-center px-6 w-full">
<h1
className="font-display font-extrabold leading-none tracking-tight"
style={{ fontSize: 'clamp(2.5rem, 11vw, 9rem)', textShadow: '0 0 80px rgba(217,0,255,0.2)' }}
>
ParVagues
</h1>
<div className="mx-auto mt-8 mb-8" style={{ width: '6rem', height: '1px', background: 'linear-gradient(to right, transparent, rgba(217,0,255,0.4), transparent)' }} />
<p className="text-base md:text-lg italic leading-relaxed max-w-xl mx-auto" style={{ color: 'var(--text-muted)' }}>
ParVagues, c&apos;est des ondes qui naissent dans un océan binaire pour parfois s&apos;échouer sur vos plages sonores.
</p>
<div className="mt-14 flex flex-col sm:flex-row gap-4 justify-center items-center">
<a href="#tour" className="inline-block px-8 py-3.5 bg-white font-display font-bold text-sm tracking-widest uppercase rounded-full transition-all duration-300" style={{ color: 'var(--surface)' }}>On Tour</a>
<a href="#music" className="inline-block px-8 py-3.5 border border-white/25 text-white font-display font-bold text-sm tracking-widest uppercase rounded-full hover:bg-white/10 transition-all duration-300">Écouter</a>
</div>
</div>
<div className="absolute bottom-10 left-1/2 -translate-x-1/2 z-10">
<div className="animate-pulse" style={{ width: '1px', height: '3rem', background: 'linear-gradient(to bottom, transparent, rgba(255,255,255,0.3))' }} />
</div>
</section>
);
}
// Variant B: Logo top-right, overlapping edge, neon glow, title left-aligned
export function HeroB() {
return (
<section className="relative h-screen flex items-center overflow-hidden">
<div className="absolute -right-20 -top-20 md:right-[-5%] md:top-[-5%] w-[60vw] h-[60vw] max-w-[700px] max-h-[700px]">
<Image
src="/images/parvagues/logo_transparent.png"
alt=""
fill
className="object-contain opacity-[0.08] select-none pointer-events-none"
style={{ filter: 'drop-shadow(0 0 60px rgba(217,0,255,0.15))' }}
priority
/>
</div>
<div className="relative z-10 px-6 md:px-16 max-w-5xl mx-auto w-full">
<h1
className="font-display font-extrabold leading-none tracking-tight text-left"
style={{ fontSize: 'clamp(2.5rem, 11vw, 9rem)', textShadow: '0 0 80px rgba(217,0,255,0.2)' }}
>
ParVagues
</h1>
<div className="mt-8 mb-8" style={{ width: '6rem', height: '1px', background: 'linear-gradient(to right, rgba(217,0,255,0.4), transparent)' }} />
<p className="text-base md:text-lg italic leading-relaxed max-w-xl" style={{ color: 'var(--text-muted)' }}>
ParVagues, c&apos;est des ondes qui naissent dans un océan binaire pour parfois s&apos;échouer sur vos plages sonores.
</p>
<div className="mt-14 flex flex-col sm:flex-row gap-4 items-start">
<a href="#tour" className="inline-block px-8 py-3.5 bg-white font-display font-bold text-sm tracking-widest uppercase rounded-full transition-all duration-300" style={{ color: 'var(--surface)' }}>On Tour</a>
<a href="#music" className="inline-block px-8 py-3.5 border border-white/25 text-white font-display font-bold text-sm tracking-widest uppercase rounded-full hover:bg-white/10 transition-all duration-300">Écouter</a>
</div>
</div>
<div className="absolute bottom-10 left-1/2 -translate-x-1/2 z-10">
<div className="animate-pulse" style={{ width: '1px', height: '3rem', background: 'linear-gradient(to bottom, transparent, rgba(255,255,255,0.3))' }} />
</div>
</section>
);
}
// Variant C: Logo replaces title entirely — big centered logo + subtitle below
export function HeroC() {
return (
<section className="relative h-screen flex items-center justify-center overflow-hidden">
<div className="absolute inset-0" style={{ background: 'radial-gradient(circle at 50% 40%, rgba(217,0,255,0.06) 0%, transparent 60%)' }} />
<div className="relative z-10 text-center px-6 w-full flex flex-col items-center">
<div className="relative w-48 h-48 md:w-72 md:h-72 mb-8">
<Image
src="/images/parvagues/logo_transparent.png"
alt="ParVagues"
fill
className="object-contain"
style={{ filter: 'drop-shadow(0 0 40px rgba(217,0,255,0.25))' }}
priority
/>
</div>
<h1
className="font-display font-extrabold leading-none tracking-[0.15em] uppercase"
style={{ fontSize: 'clamp(1.5rem, 5vw, 3.5rem)', textShadow: '0 0 60px rgba(217,0,255,0.15)' }}
>
ParVagues
</h1>
<div className="mx-auto mt-6 mb-6" style={{ width: '6rem', height: '1px', background: 'linear-gradient(to right, transparent, rgba(217,0,255,0.4), transparent)' }} />
<p className="text-base md:text-lg italic leading-relaxed max-w-xl mx-auto" style={{ color: 'var(--text-muted)' }}>
Des ondes qui naissent dans un océan binaire pour parfois s&apos;échouer sur vos plages sonores.
</p>
<div className="mt-14 flex flex-col sm:flex-row gap-4 justify-center items-center">
<a href="#tour" className="inline-block px-8 py-3.5 bg-white font-display font-bold text-sm tracking-widest uppercase rounded-full transition-all duration-300" style={{ color: 'var(--surface)' }}>On Tour</a>
<a href="#music" className="inline-block px-8 py-3.5 border border-white/25 text-white font-display font-bold text-sm tracking-widest uppercase rounded-full hover:bg-white/10 transition-all duration-300">Écouter</a>
</div>
</div>
<div className="absolute bottom-10 left-1/2 -translate-x-1/2 z-10">
<div className="animate-pulse" style={{ width: '1px', height: '3rem', background: 'linear-gradient(to bottom, transparent, rgba(255,255,255,0.3))' }} />
</div>
</section>
);
}
// Variant D: Full-bleed tiled/scaled logo as texture, neon-tinted, title overlaid
export function HeroD() {
return (
<section className="relative h-screen flex items-center justify-center overflow-hidden">
<div className="absolute inset-0">
<Image
src="/images/parvagues/logo.png"
alt=""
fill
className="object-cover opacity-[0.12] select-none pointer-events-none"
style={{ filter: 'hue-rotate(-20deg) saturate(1.5)' }}
priority
/>
<div className="absolute inset-0" style={{ background: 'linear-gradient(to bottom, var(--surface) 0%, rgba(10,10,10,0.7) 30%, rgba(10,10,10,0.7) 70%, var(--surface) 100%)' }} />
</div>
<div className="relative z-10 text-center px-6 w-full">
<h1
className="font-display font-extrabold leading-none tracking-tight"
style={{ fontSize: 'clamp(2.5rem, 11vw, 9rem)', textShadow: '0 0 80px rgba(217,0,255,0.3), 0 0 160px rgba(217,0,255,0.1)' }}
>
ParVagues
</h1>
<div className="mx-auto mt-8 mb-8" style={{ width: '6rem', height: '1px', background: 'linear-gradient(to right, transparent, rgba(217,0,255,0.4), transparent)' }} />
<p className="text-base md:text-lg italic leading-relaxed max-w-xl mx-auto" style={{ color: 'var(--text-muted)' }}>
ParVagues, c&apos;est des ondes qui naissent dans un océan binaire pour parfois s&apos;échouer sur vos plages sonores.
</p>
<div className="mt-14 flex flex-col sm:flex-row gap-4 justify-center items-center">
<a href="#tour" className="inline-block px-8 py-3.5 bg-white font-display font-bold text-sm tracking-widest uppercase rounded-full transition-all duration-300" style={{ color: 'var(--surface)' }}>On Tour</a>
<a href="#music" className="inline-block px-8 py-3.5 border border-white/25 text-white font-display font-bold text-sm tracking-widest uppercase rounded-full hover:bg-white/10 transition-all duration-300">Écouter</a>
</div>
</div>
<div className="absolute bottom-10 left-1/2 -translate-x-1/2 z-10">
<div className="animate-pulse" style={{ width: '1px', height: '3rem', background: 'linear-gradient(to bottom, transparent, rgba(255,255,255,0.3))' }} />
</div>
</section>
);
}
// Variant E: Split — logo left half, text right half, horizontal layout
export function HeroE() {
return (
<section className="relative h-screen flex items-center overflow-hidden">
<div className="absolute inset-0" style={{ background: 'radial-gradient(ellipse at 25% 50%, rgba(217,0,255,0.05) 0%, transparent 50%)' }} />
<div className="relative z-10 w-full max-w-6xl mx-auto px-6 grid md:grid-cols-2 gap-8 items-center">
<div className="flex justify-center md:justify-end">
<div className="relative w-64 h-64 md:w-96 md:h-96">
<Image
src="/images/parvagues/logo_transparent.png"
alt="ParVagues"
fill
className="object-contain"
style={{ filter: 'drop-shadow(0 0 50px rgba(217,0,255,0.2))' }}
priority
/>
</div>
</div>
<div className="text-center md:text-left">
<h1
className="font-display font-extrabold leading-none tracking-tight"
style={{ fontSize: 'clamp(2.5rem, 8vw, 7rem)', textShadow: '0 0 80px rgba(217,0,255,0.2)' }}
>
ParVagues
</h1>
<div className="mt-6 mb-6 mx-auto md:mx-0" style={{ width: '6rem', height: '1px', background: 'linear-gradient(to right, rgba(217,0,255,0.4), transparent)' }} />
<p className="text-base md:text-lg italic leading-relaxed max-w-md mx-auto md:mx-0" style={{ color: 'var(--text-muted)' }}>
Des ondes qui naissent dans un océan binaire pour parfois s&apos;échouer sur vos plages sonores.
</p>
<div className="mt-10 flex flex-col sm:flex-row gap-4 justify-center md:justify-start">
<a href="#tour" className="inline-block px-8 py-3.5 bg-white font-display font-bold text-sm tracking-widest uppercase rounded-full transition-all duration-300" style={{ color: 'var(--surface)' }}>On Tour</a>
<a href="#music" className="inline-block px-8 py-3.5 border border-white/25 text-white font-display font-bold text-sm tracking-widest uppercase rounded-full hover:bg-white/10 transition-all duration-300">Écouter</a>
</div>
</div>
</div>
<div className="absolute bottom-10 left-1/2 -translate-x-1/2 z-10">
<div className="animate-pulse" style={{ width: '1px', height: '3rem', background: 'linear-gradient(to bottom, transparent, rgba(255,255,255,0.3))' }} />
</div>
</section>
);
}
...@@ -62,7 +62,7 @@ const streamingPlatforms = [ ...@@ -62,7 +62,7 @@ const streamingPlatforms = [
label: 'SoundCloud', label: 'SoundCloud',
icon: FaSoundcloud, icon: FaSoundcloud,
color: '#ff5500', color: '#ff5500',
embedUrl: 'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/users/1084818893&color=%23a700d1&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true', embedUrl: 'https://w.soundcloud.com/player/?visual=true&url=https%3A%2F%2Fapi.soundcloud.com%2Fusers%2F788076298&color=%23a700d1&auto_play=false&show_artwork=true&show_user=true&show_reposts=false&show_teaser=true',
embedHeight: 450, embedHeight: 450,
profileUrl: 'https://soundcloud.com/parvagues', profileUrl: 'https://soundcloud.com/parvagues',
}, },
...@@ -71,7 +71,7 @@ const streamingPlatforms = [ ...@@ -71,7 +71,7 @@ const streamingPlatforms = [
label: 'Bandcamp', label: 'Bandcamp',
icon: FaBandcamp, icon: FaBandcamp,
color: '#1da0c3', color: '#1da0c3',
embedUrl: 'https://bandcamp.com/EmbeddedPlayer/album=644862623/size=large/bgcol=0a0a0a/linkcol=a700d1/tracklist=true/transparent=true/', embedUrl: 'https://bandcamp.com/EmbeddedPlayer/album=644862623/size=large/bgcol=0a0a0a/linkcol=a700d1/tracklist=false/artwork=small/transparent=true/',
embedHeight: 450, embedHeight: 450,
profileUrl: 'https://parvagues.bandcamp.com/', profileUrl: 'https://parvagues.bandcamp.com/',
}, },
...@@ -91,7 +91,7 @@ const streamingPlatforms = [ ...@@ -91,7 +91,7 @@ const streamingPlatforms = [
label: 'YouTube', label: 'YouTube',
icon: FaYoutube, icon: FaYoutube,
color: '#ff0000', color: '#ff0000',
embedUrl: 'https://www.youtube-nocookie.com/embed/videoseries?list=OLAK5uy_l4MF3OCIXcdPMpsHGVX2Q9MiX6oU1zT6g', embedUrl: 'https://www.youtube-nocookie.com/embed/BIG8iGRHCOg?list=OLAK5uy_l4MF3OCIXcdPMpsHGVX2Q9MiX6oU1zT6g',
embedHeight: 400, embedHeight: 400,
profileUrl: 'https://www.youtube.com/@parvagues/videos', profileUrl: 'https://www.youtube.com/@parvagues/videos',
isVideo: true, isVideo: true,
......
...@@ -43,6 +43,7 @@ export default function TourTimeline({ lives }) { ...@@ -43,6 +43,7 @@ export default function TourTimeline({ lives }) {
{grouped[year].map((live) => { {grouped[year].map((live) => {
const isFuture = live._date > now; const isFuture = live._date > now;
const hasMedia = live.audio || live.video || live.archive; const hasMedia = live.audio || live.video || live.archive;
const bestLink = live.audio || live.video || live.archive;
const city = live.location?.includes(',') const city = live.location?.includes(',')
? live.location.split(',')[0].trim() ? live.location.split(',')[0].trim()
: live.location; : live.location;
...@@ -83,13 +84,16 @@ export default function TourTimeline({ lives }) { ...@@ -83,13 +84,16 @@ export default function TourTimeline({ lives }) {
{city} {city}
</span> </span>
{/* Media dot */} {/* Recording available - direct link to best source */}
{hasMedia && ( {hasMedia && (
<span <button
className="flex-shrink-0 rounded-full" type="button"
style={{ width: '6px', height: '6px', backgroundColor: 'rgba(217,0,255,0.5)' }} onClick={(e) => { e.preventDefault(); e.stopPropagation(); window.open(bestLink, '_blank', 'noopener'); }}
title="Enregistrement disponible" className="flex-shrink-0 flex items-center gap-1.5 px-2 py-0.5 rounded-full text-[9px] tracking-wider uppercase border border-[var(--neon-high)]/20 text-[var(--neon-high)] opacity-60 hover:opacity-100 hover:bg-[var(--neon-high)]/10 transition-all cursor-pointer"
/> >
<svg className="w-2.5 h-2.5" viewBox="0 0 24 24" fill="currentColor"><polygon points="5,3 19,12 5,21" /></svg>
<span className="hidden sm:inline">rec</span>
</button>
)} )}
</Link> </Link>
); );
......
...@@ -8,7 +8,7 @@ const featuredVideo = { ...@@ -8,7 +8,7 @@ const featuredVideo = {
id: 'bS5jcIJfU6c', id: 'bS5jcIJfU6c',
source: 'youtube', source: 'youtube',
title: 'Algorave GZ25', title: 'Algorave GZ25',
subtitle: 'w/ Pérégrine · Algorave Lyon European-wide annual event', subtitle: 'w/ Pérégrine · Algorave Lyon, European-wide annual event',
date: 'Fév 2025', date: 'Fév 2025',
featured: true, featured: true,
}; };
......
--- ---
title: "Live Algolia Fête de la Musique 2022" title: "Live Algolia - Fête de la Musique 2022"
date: "2022-06-21" date: "2022-06-21"
time: "18:00" time: "18:00"
location: "Paris, France" location: "Paris, France"
...@@ -13,6 +13,6 @@ archive: "" ...@@ -13,6 +13,6 @@ archive: ""
tags: ["livecoding", "algolia", "fdlm"] tags: ["livecoding", "algolia", "fdlm"]
--- ---
# Live Algolia Fête de la Musique 2022 # Live Algolia - Fête de la Musique 2022
Fête de la Musique at Algolia HQ, Paris. Fête de la Musique at Algolia HQ, Paris.
{
"gig": "bazurto",
"title": "Bazurto Live @ Tignes",
"date": "2022-03-15",
"bpmRange": [90, 160],
"styleDistribution": {
"lounge": 2,
"breakbeat": 3,
"techno": 2,
"dnb": 2,
"chiptune": 1,
"ambient": 1
},
"samplePacks": [
{ "name": "jazz/808bd/kick", "usage": "layered kick foundation across all tracks" },
{ "name": "FMRhodes1/FMRhodes2", "usage": "FM piano in Solar, Lunar, Michael, Nightly Repair" },
{ "name": "bassWarsaw", "usage": "primary bass synth in Solar, Lunar, Nightly Repair" },
{ "name": "fbass", "usage": "chopped bass loops in Invoque l'ete and Alerte Verte" },
{ "name": "fguitar", "usage": "chopped guitar in Invoque l'ete and Alerte Verte" },
{ "name": "cpluck", "usage": "plucked bass/lead in Burn this Book" },
{ "name": "90s_synatm", "usage": "atmospheric synth pads in Burn this Book, Nightly Repair, Atari-ght" },
{ "name": "jungle_breaks/breaks165", "usage": "chopped jungle breaks in multiple tracks" },
{ "name": "drums_atari", "usage": "retro drum samples in Atari-ght" },
{ "name": "moogBass/moog", "usage": "moog synth bass/pad in Invoque l'ete, Alerte Verte" },
{ "name": "break", "usage": "breakbeat loops sliced in Solar and Lunar" },
{ "name": "fbreak120", "usage": "120 BPM break loop in Michael" }
],
"tracks": [
{
"name": "Invoque l'ete",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (115/60/4)", "description": "115 BPM lounge groove with MIDI mask/mute system for live arrangement" },
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\"", "description": "Son clave pattern on snare:22 with variable ghost-note gain" },
{ "type": "sample", "code": "$ \"fbass:13\" $ loopAt 2 $ slice 8 (run \"<4!4 8 8 [4 8 4] [8 4 8]>\")", "description": "Sliced bass loop doubling slice count for complexity buildup" },
{ "type": "effect", "code": "# crushbus 51 (range 16 4.5 \"^53\") # roombus 52 (range 0 0.8 \"^33\")", "description": "MIDI-controlled bitcrush and reverb on bass for texture morphing" },
{ "type": "technique", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\" + \"0*<4 [4 16]>\") # \"moogBass\"", "description": "Moog bass on a I-bVII-i-IV jazz progression with arpeggiated superimpose" }
]
},
{
"name": "Solar",
"file": "live/midi/nova/breaks/solar.tidal",
"bpm": 110,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM breakbeat with dual DJF bus for A/B filtering" },
{ "type": "sample", "code": "$ loopAt 2 $ slice 8 (run 8) $ \"break:11\" # hpf 500", "description": "High-passed breakbeat loop with striate and ply variations" },
{ "type": "technique", "code": "arp \"<up!8 converge!7 diverge>\" \"c'maj'8\" # \"bassWarsaw\"", "description": "Arpeggiated Warsaw bass cycling through up/converge/diverge patterns" },
{ "type": "sample", "code": "# \"FMRhodes1\" # modIndex (range 0 128 \"^34\")", "description": "FM Rhodes with MIDI-controlled modulation index for timbre sweeping" },
{ "type": "effect", "code": "# crushbus 51 (range 16 4.6 \"^53\")", "description": "Shared bitcrush bus across bass and piano channels" }
]
},
{
"name": "Lunar",
"file": "live/midi/nova/breaks/lunar.tidal",
"bpm": 110,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM companion piece to Solar - darker, deeper" },
{ "type": "technique", "code": "note (scale \"aeolian\" \"<3 3 5 <5 4> 5 4 3 <~ 2 3 ~>>\") # \"bassWarsaw\"", "description": "Aeolian-mode bass melody with rests creating breathing space" },
{ "type": "sample", "code": "\"break\" # n \"<13!12 14!4 15!12 14!4>\"", "description": "Cycling through 3 break variants on rotating 32-cycle pattern" },
{ "type": "technique", "code": "|+| note \"~ 12(<1 1 2 1 2 5 2 1 2 2 5 2 2 4 3 8>,8)\"", "description": "Euclidean octave jumps on Rhodes superimpose for rhythmic sparkle" },
{ "type": "effect", "code": "# modIndex (range 0.1 32 \"^54\")", "description": "Low modulation index ceiling on FMRhodes1 for warmer timbres" }
]
},
{
"name": "Michael",
"file": "live/midi/nova/lounge/michael.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM lounge piano/brass hybrid" },
{ "type": "technique", "code": "fix (... . arp \"pinkyup\" . (>| note (\"c'maj'3\" - 7))) \"a\"", "description": "Fix-based layering: three synth brass voices (a/b/c) with pinkyup arp" },
{ "type": "sample", "code": "\"fsynth:3\" sliced across [a,b,c] bus with note offsets -12 and -24", "description": "Multi-octave brass choir from a single fsynth sample" },
{ "type": "sample", "code": "$ juxBy 0.8 (rev . (# cut 51)) $ slice 8 (run ...) $ \"fpiano:3\"", "description": "Reversed piano jux with sliced groove for jumpy texture" },
{ "type": "effect", "code": "# crushbus 41 (range 16 1.6 \"^13\") # room 0.3 # sz 0.6", "description": "Light crush + room reverb on brass for warm analog character" }
]
},
{
"name": "Nightly Repair",
"file": "live/techno/nightly_repair.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM slow techno with blues scale and custom scale definition" },
{ "type": "technique", "code": "note (scale \"blues\" (arp \"<up pinkyup downup thumbupdown>\" \"[0,1,2,<3 4>,<4 <5 6>>]\"))", "description": "Blues-scale FM Rhodes run with rotating arp modes and expanding chord voicings" },
{ "type": "sample", "code": "# \"90s_matrix:3\" # lesliebus 41 (range \"-1\" 1 \"^17\")", "description": "Leslie speaker simulation on 90s matrix bass with rate ramp" },
{ "type": "effect", "code": "# crushbus 43 (range 16 2 (\"^53\" - 0.1 * (fast 4 perlin)))", "description": "Perlin-noise jittered bitcrush for organic grit on bass" },
{ "type": "sample", "code": "$ \"90s_matrix:1/4\" # squizbus 92 (range 0 10 perlin)", "description": "Squiz distortion with perlin on 90s matrix lead for evolving texture" }
]
},
{
"name": "Contre visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 90,
"style": "ambient",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM ambient techno with layered mute groups for gradual unveiling" },
{ "type": "sample", "code": "\"90s_synatm:8/4\" # cut 4 # room 0.8 # legato 4", "description": "Quarter-speed atmospheric synth pad with heavy reverb" },
{ "type": "technique", "code": "$ superimpose (struct \"t(5,8)\" . arp \"[down,up]\" . (|+ note 12))", "description": "Euclidean arp superimpose on the aerial synth for question-answer motif" },
{ "type": "sample", "code": "$ \"90s_synatm:14/4\" # delayfb 0.25 # delayt 0.25 # delay 0.8", "description": "Second synth layer with dotted-eighth delay for rhythmic depth" },
{ "type": "effect", "code": "# octersubbus 53 (range 0 1.85 \"^34\")", "description": "MIDI-controlled sub-octave for bass reinforcement on synth" }
]
},
{
"name": "Burn this Book",
"file": "live/techno/noir/burn_this_book.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM dark techno with ASCII art banner and fire emojis" },
{ "type": "technique", "code": "note (scale \"aeolian\" ...) # \"cpluck:0\" # roombus 42 (range 0 0.8 \"^33\")", "description": "Aeolian pluck bass with arpeggiated superimpose triggered by MIDI" },
{ "type": "sample", "code": "$ chop 16 $ loopAt 4 $ \"drums_nes:3\" # lpf 4000", "description": "NES drum chip sample chopped into 16 slices at slow speed for dark texture" },
{ "type": "effect", "code": "# delay 0.85 # delayfb \"<0.25!3 <0.5 0.9>>\" # delayt 0.125", "description": "Ping-pong delay with escalating feedback on the NES drums" },
{ "type": "technique", "code": "midiOn \"^58\" (>| note (scale \"aeolian\" (arp \"down\" ...))) $ \"cpluck:1\"", "description": "Second pluck voice overriding notes with descending arp on MIDI trigger" }
]
},
{
"name": "Break the Loop",
"file": "live/midi/nova/dnb/break_the_loop.tidal",
"bpm": 165,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (165/60/4)", "description": "165 BPM drum & bass with MIDI-controlled break switching" },
{ "type": "technique", "code": "midiOn \"^76\" (scramble (8 - 4 * \"^44\"))", "description": "MIDI knob controls scramble amount on break slices for live glitching" },
{ "type": "sample", "code": "$ \"90s_synatm:9\" # lesliebus 42 (range 0 1 \"^17\")", "description": "Leslie-processed 90s synth bass with MIDI-controlled rotation depth" },
{ "type": "sample", "code": "note (scale \"aeolian\" ...) # \"FMRhodes1\" # modIndex (range 0 100 \"^54\")", "description": "Aeolian FM Rhodes with MIDI mod-index sweep" },
{ "type": "technique", "code": "note (scale \"aeolian\" (arp \"<up downup down updown>\" ...)) # \"90s_matrix:3\"", "description": "Matrix synth voices with rotating arp patterns for evolving chord textures" }
]
},
{
"name": "Atari-ght",
"file": "live/chip/ataright.tidal",
"bpm": 120,
"style": "chiptune",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM chiptune techno with Atari ASCII art header" },
{ "type": "sample", "code": "$ chop 8 $ loopAt 4 $ \"drums_atari\" # n \"[29 29 <29 [29 28 29]> 28]\"", "description": "Atari drum machine samples chopped and looped" },
{ "type": "technique", "code": "note (\"c'maj'4\" + \"<c!3 g g g [g, [~ c]] c>\" - 12) # \"90s_synatm:8/4\"", "description": "Synth pad ghost from an easier time with major chord progressions" },
{ "type": "sample", "code": "$ chop 8 $ loopAt 16 $ \"synth_commodore\" # n \"0\"", "description": "Commodore synth sample as the retro BASIC bus lead" },
{ "type": "effect", "code": "# crushbus 61 (range 20 2.25 \"^55\") # squizbus 62 (range 0 1.5 \"^35\")", "description": "Crush + squiz on Commodore synth for authentic 8-bit degradation" }
]
},
{
"name": "Alerte Verte",
"file": "live/midi/nova/dnb/alerte_verte.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM DnB with layered kick (squiz+octersub) and MIDI mute matrix" },
{ "type": "sample", "code": "$ loopAt 4 $ chop 16 $ \"fbass:25\"", "description": "Chopped bass loop with MIDI-switchable forward/reverse slicing" },
{ "type": "technique", "code": "$ whenmod 16 12 (struct \"t*<4 4 8 16>\")", "description": "Snare rush pattern building from quarter to sixteenth notes" },
{ "type": "sample", "code": "$ chop 16 $ loopAt 0.5 $ \"breaks165\"", "description": "Nassim button: half-speed breaks165 chopped for live glitch drops" },
{ "type": "effect", "code": "# leslie \"^34\" # lsize (1 + (slow 16 perlin * 2)) # lrate 6.7", "description": "MIDI-controlled Leslie speaker on guitar with perlin-modulated cabinet size" }
]
},
{
"name": "It's About Time",
"file": "live/midi/nova/breaks/its_about_time.tidal",
"bpm": 110,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM breakbeat with slow introduction masks revealing layers over 64 cycles" },
{ "type": "sample", "code": "$ \"[808bd:4,kick:4]\"", "description": "Dual-layered kick with 808 and acoustic for body and punch" },
{ "type": "technique", "code": "$ mask \"<[[t <f!4 t!4>] <f!8 t!8>]!8 t!24 t!96>\"", "description": "Long-form mask: FMRhodes bird call emerges after 8 cycles of silence" },
{ "type": "sample", "code": "note (\"<c!4 ef!2 f g>\" ...) # \"808hc:2\" # octersubbus 72 (range 0 1.4 \"^55\")", "description": "808 hi-hat carillon with sub-octave reinforcement via MIDI" },
{ "type": "effect", "code": "# delaybus 51 (range 0 0.8 \"^34\") # delayt \"<h>\" # delayfb 0.25", "description": "MIDI-controlled delay amount on FMRhodes for growing spatial depth" }
]
}
]
}
\ No newline at end of file
{
"gig": "cmny-2",
"title": "Live @ CMNY #2",
"date": "2023-09-01",
"bpmRange": [90, 160],
"styleDistribution": {
"breakbeat": 3,
"ambient": 2,
"lounge": 2,
"dnb": 1,
"techno": 1
},
"samplePacks": [
{ "name": "FMRhodes1/FMRhodes2", "usage": "FM piano across Solar, Lunar, Empreinte du numerique" },
{ "name": "bassWarsaw", "usage": "primary bass synth in Solar, Lunar, CBOW, Nightly Repair" },
{ "name": "break", "usage": "breakbeat loops in Solar and Lunar" },
{ "name": "cbow/cpluck", "usage": "cello bow and plucked strings in CBOW" },
{ "name": "90s_synatm", "usage": "atmospheric synth in Contre Visite and Nightly Repair" },
{ "name": "90s_matrix", "usage": "bass synth in Nightly Repair" },
{ "name": "fbass", "usage": "chopped bass in Empreinte du numerique and Alerte Verte" },
{ "name": "supermandolin", "usage": "mandolin lead in Empreinte du numerique" },
{ "name": "jungle_breaks/breaks165", "usage": "DnB breaks in Alerte Verte and Invoque l'ete" },
{ "name": "moogBass", "usage": "moog bass/pad across Invoque l'ete and CBOW" }
],
"tracks": [
{
"name": "We call it AlgoRave",
"file": null,
"bpm": 120,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "live improvisation", "description": "Improvised intro demonstrating TidalCycles basics - building from silence to beat" },
{ "type": "technique", "code": "once $ arpeggiate $ note \"c'majPent'3\" # \"moog\"", "description": "Live one-shot demonstrations of samples, synths, and arpeggiation" },
{ "type": "pattern", "code": "d1 $ \"jazz <cp [dr*<8 [8 16]>]>\"", "description": "Simple kick+clap loop as live-coded introduction to pattern syntax" }
]
},
{
"name": "Solar",
"file": "live/midi/nova/breaks/solar.tidal",
"bpm": 110,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM breakbeat with dual DJF bus filtering" },
{ "type": "sample", "code": "$ loopAt 2 $ slice 8 (run 8) $ \"break:11\" # hpf 500", "description": "High-passed breakbeat loop with ply and striate variations" },
{ "type": "technique", "code": "arp \"<up!8 converge!7 diverge>\" \"c'maj'8\" # \"bassWarsaw\"", "description": "Warsaw bass cycling through arpeggiation modes over C major" },
{ "type": "sample", "code": "# \"FMRhodes1\" # modIndex (range 0 128 \"^34\")", "description": "FM Rhodes with full MIDI modulation sweep" },
{ "type": "effect", "code": "# crushbus 51 (range 16 4.6 \"^53\")", "description": "Shared bitcrush bus for unified distortion across channels" }
]
},
{
"name": "Lunar",
"file": "live/midi/nova/breaks/lunar.tidal",
"bpm": 110,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM - darker companion to Solar with aeolian modality" },
{ "type": "technique", "code": "note (scale \"aeolian\" \"<3 3 5 <5 4> 5 4 3 <~ 2 3 ~>>\") # \"bassWarsaw\"", "description": "Melodic bass line with rests for breathing space" },
{ "type": "sample", "code": "\"break\" # n \"<13!12 14!4 15!12 14!4>\"", "description": "Three break variants cycling on 32-cycle rotation" },
{ "type": "technique", "code": "superimpose (|+| note \"~ 12(<1 1 2 1 2 5 2 1 2 2 5 2 2 4 3 8>,8)\")", "description": "Euclidean octave jumps on Rhodes superimpose" },
{ "type": "effect", "code": "# modIndex (range 0.1 32 \"^54\")", "description": "Restrained FM modulation for warmer timbre than Solar" }
]
},
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 90,
"style": "ambient",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM ambient with layered synth pads and gradual mute unveiling" },
{ "type": "sample", "code": "\"90s_synatm:8/4\" # room 0.8 # legato 4", "description": "Quarter-speed atmospheric pad with heavy reverb wash" },
{ "type": "technique", "code": "superimpose (struct \"t(5,8)\" . arp \"[down,up]\" . (|+ note 12))", "description": "Euclidean arp on synth creating call-and-response" },
{ "type": "sample", "code": "\"90s_synatm:14/4\" # delay 0.8 # delayfb 0.25 # delayt 0.25", "description": "Second synth voice with dotted-eighth delay" },
{ "type": "effect", "code": "# octersubbus 53 (range 0 1.85 \"^34\")", "description": "Sub-octave on synth for bass reinforcement" }
]
},
{
"name": "Empreinte du numerique",
"file": "live/midi/nova/ambient/empreinte_du_numerique.tidal",
"bpm": 110,
"style": "ambient",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM with ASCII art header (computer/keyboard) - digital footprint theme" },
{ "type": "sample", "code": "$ \"fbass:51\" # lesliebus 52 \"^33\" # lsizebus 51 (range 0.8 4.8 \"^17\")", "description": "Bass with Leslie speaker effect - MIDI-controlled cabinet size and speed" },
{ "type": "technique", "code": "note (\"d4/2\" + scale \"<augmented!6 diminished2!2>\" (run 16)) # \"FMRhodes1\"", "description": "FM Rhodes running through augmented/diminished2 scales for digital dissonance" },
{ "type": "sample", "code": "$ note \"<d <d a> <gf> c>\" # \"supermandolin\"", "description": "Mandolin lead with tritone (gf) creating tension in the progression" },
{ "type": "effect", "code": "# crushbus 53 (range 10 1.61 \"^53\") # modIndex (range \"-0.1\" 100 \"^34\")", "description": "Bitcrush on bass and full-range mod index on Rhodes for timbral extremes" }
]
},
{
"name": "CBOW",
"file": "live/midi/nova/lounge/cbow.tidal",
"bpm": 100,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (100/60/4)", "description": "100 BPM lounge with cello bow (cbow) as primary instrument" },
{ "type": "technique", "code": "note (arp \"up <up!8 down!8>\" \"d4'min7'4\") # \"cbow:0\"", "description": "CBOW electric bass arpeggiating d minor 7th with alternating up/down" },
{ "type": "sample", "code": "$ note (arp \"converge\" chord) # \"cbow:2\" # lesliebus 41 (range 0 2 \"^54\")", "description": "High cbow lead with converging arp and MIDI Leslie effect" },
{ "type": "technique", "code": "$ midiOn \"^57\" (euclid \"<1 <1 [1 2] 5> 3 5>\" 8) $ (\"0.125\" ~>)", "description": "Euclidean pattern evolving from sparse (1,8) to dense (5,8) with micro-offset" },
{ "type": "effect", "code": "# crushbus 31 (range 10 2 \"^53\") # room 0.6 # sz 0.5", "description": "Light bitcrush and medium reverb for warm analog cello character" }
]
},
{
"name": "Nightly Repair",
"file": "live/techno/nightly_repair.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM slow techno - 'La nuit te repare'" },
{ "type": "technique", "code": "note (scale \"blues\" (arp \"<up pinkyup downup thumbupdown>\" \"[0,1,2,<3 4>,<4 <5 6>>]\"))", "description": "Blues-scale Rhodes with 4 rotating arp modes and expanding voicings" },
{ "type": "sample", "code": "# \"90s_matrix:3\" # lesliebus 41 (range \"-1\" 1 \"^17\")", "description": "Matrix bass with bidirectional Leslie simulation" },
{ "type": "effect", "code": "# crushbus 43 (range 16 2 (\"^53\" - 0.1 * (fast 4 perlin)))", "description": "Perlin-jittered bitcrush for organic grit" },
{ "type": "sample", "code": "# \"90s_matrix:1/4\" # squizbus 92 (range 0 10 perlin)", "description": "Squiz distortion with full perlin range for evolving texture" }
]
},
{
"name": "Alerte Verte",
"file": "live/midi/nova/dnb/alerte_verte.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM DnB with layered kick (squiz+octersub) and MIDI mute matrix" },
{ "type": "sample", "code": "$ loopAt 4 $ chop 16 $ \"fbass:25\"", "description": "Chopped bass loop with forward/reverse slice switching" },
{ "type": "technique", "code": "$ whenmod 16 12 (struct \"t*<4 4 8 16>\")", "description": "Snare rush building from quarter to 16th notes" },
{ "type": "sample", "code": "$ chop 16 $ loopAt 0.5 $ \"breaks165\"", "description": "Half-speed breaks165 for live glitch drops (Nassim button)" },
{ "type": "effect", "code": "# leslie \"^34\" # lsize (1 + (slow 16 perlin * 2))", "description": "Leslie speaker on guitar with perlin-modulated cabinet" }
]
},
{
"name": "Invoque l'Ete",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (115/60/4)", "description": "115 BPM lounge closer - 'Il ne viendra pas tout seul'" },
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\"", "description": "Son clave on snare:22 with variable ghost-note gain" },
{ "type": "sample", "code": "$ slice 8 (run \"<4!4 8 8 [4 8 4] [8 4 8]>\") $ \"fbass:13\"", "description": "Bass sliced with escalating complexity" },
{ "type": "technique", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\") # \"moogBass\"", "description": "I-bVII-i-IV jazz progression on Moog bass" },
{ "type": "effect", "code": "# octersub 0.5 # crushbus 71 (range 16 2.5 \"^55\")", "description": "Sub-octave and crush on the piano for warm thickness" }
]
}
]
}
\ No newline at end of file
{
"gig": "devcon23",
"title": "DevCon23 Performance",
"date": "2023-11-15",
"bpmRange": [60, 165],
"styleDistribution": {
"lofi": 2,
"lounge": 1,
"breakbeat": 2,
"dnb": 2,
"techno": 1
},
"samplePacks": [
{ "name": "bassWarsaw", "usage": "primary bass synth in SlowMo, Lendemain Divin, Premiere Grillade, Nouveau Soleil" },
{ "name": "FMRhodes1/FMRhodes2", "usage": "FM piano in SlowMo, Lendemain Divin, Premiere Grillade, Ete a Mauerpark" },
{ "name": "jungle_breaks", "usage": "jungle breakbeats in Lendemain Divin, Nouveau Soleil, Ete a Mauerpark, Break Dynasty" },
{ "name": "come_guitar", "usage": "guitar samples in Lendemain Divin" },
{ "name": "shiloh", "usage": "lo-fi vocal chop samples in Premiere Grillade and Break Dynasty" },
{ "name": "bass_gameboy/synth_gameboy/synth_atari", "usage": "retro game console sounds in Nouveau Soleil" },
{ "name": "moogBass", "usage": "moog synth in SlowMo intro and Nouveau Soleil/Ete a Mauerpark" },
{ "name": "cbow", "usage": "cello bow in Ete a Mauerpark" },
{ "name": "90s_megafx", "usage": "cinematic FX pad in SlowMo" },
{ "name": "fbreak80/fbass", "usage": "breakbeat and bass samples in Sessions Break" },
{ "name": "breaks165", "usage": "fast break loop in Break Dynasty" },
{ "name": "vec1_snare/rolandtr808/rolandtr606", "usage": "drum machine samples in Lendemain Divin" }
],
"tracks": [
{
"name": "SlowMo",
"file": "live/hip/lofi/slow_mo.tidal",
"bpm": 60,
"style": "lofi",
"ingredients": [
{ "type": "structure", "code": "setcps (60/60/4)", "description": "60 BPM lo-fi - opens with live TidalCycles demo before transitioning into the track" },
{ "type": "technique", "code": "note (scale \"aeolian\" \"[7, ~!7 <~!3 3 ~ 3 ~ 3>] . [4, ~!3 <~ <[~ 8] [8 9] ...>]\")", "description": "Organically grown aeolian main theme on FMRhodes1 with evolving counter-melody" },
{ "type": "sample", "code": "# \"bassWarsaw\" # octave \"<2!16 3!16>\"", "description": "Warsaw bass shifting octaves every 16 cycles for gradual bass evolution" },
{ "type": "effect", "code": "$ jux ((# crush (slow 16 (range 10 5 saw))) . (|* gain 0.93))", "description": "Stereo jux with slow saw-driven bitcrush creating lo-fi spatial depth" },
{ "type": "technique", "code": "$ mask \"<f!32 t!32>\" $ whenmod 16 8 (superimpose (chop \"[<4!4 8!4>!3 1]!2\"))", "description": "Bass overdrone appears halfway through via mask, with evolving chop granularity" }
]
},
{
"name": "Lendemain Divin",
"file": "live/midi/nova/lofi/lendemain_divin.tidal",
"bpm": 95,
"style": "lofi",
"ingredients": [
{ "type": "structure", "code": "setcps (95/60/4)", "description": "95 BPM lo-fi with MIDI mute matrix and triple control groups" },
{ "type": "technique", "code": ">| note \"<<d4!6 [d4@7 <f4 g4>]!2> <a3!4 [a3@7 <c4 c3>]!4> ...>\"", "description": "Dual-mode bass line: MIDI toggles between complainte and ritournelle patterns" },
{ "type": "sample", "code": "$ n \"<0 0 <6 5> 0 1 1 2 7>\" # \"come_guitar\" # crushbus 61 ...", "description": "Finger-picked guitar cycling through 8 takes with bitcrush" },
{ "type": "sample", "code": "$ drumFrom \"[rolandtr808,rolandtr606]\" \"[hh]\"", "description": "drumFrom function layering 808 and 606 hi-hats for hybrid analog character" },
{ "type": "effect", "code": "# crushbus 41 (range 16 2.5 \"^53\") # octersubbus 42 (range 0 2.5 \"^33\")", "description": "Bitcrush + sub-octave on bass for lo-fi warmth and low-end reinforcement" }
]
},
{
"name": "Invoque l'Ete",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (115/60/4)", "description": "115 BPM lounge with clave-driven groove and jazz progression" },
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\"", "description": "Son clave pattern with variable ghost-note gain modulation" },
{ "type": "sample", "code": "$ slice 8 (run \"<4!4 8 8 [4 8 4] [8 4 8]>\") $ \"fbass:13\"", "description": "Bass loop with escalating slice complexity for buildup" },
{ "type": "technique", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\") # \"moogBass\"", "description": "Moog bass on I-bVII-i-IV jazz chord cycle" },
{ "type": "effect", "code": "# crushbus 51 (range 16 4.5 \"^53\") # roombus 52 (range 0 0.8 \"^33\")", "description": "MIDI-controlled crush and reverb for live texture morphing" }
]
},
{
"name": "Sessions Break",
"file": "live/midi/nova/breaks/break_the_rentree.tidal",
"bpm": 80,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM slow breakbeat - 'le rythme de la rentree' (back-to-sessions)" },
{ "type": "technique", "code": "$ whenmod 16 15 (slice 4 \"0*5 ~*3\") $ whenmod 8 7 (slice 4 \"0*8\")", "description": "Cascading break glitch: stutter patterns intensify at cycle boundaries" },
{ "type": "sample", "code": "$ \"fbreak80:0\" # room 0.3 # dry 1 # sz 0.6", "description": "80 BPM break sample with spacious reverb and dry mix" },
{ "type": "sample", "code": "$ loopAt 2 $ \"fbass:24/2\" # crushbus 61 (range 16 4 \"^53\")", "description": "Programmatic bass with MIDI-triggered slice recombinations" },
{ "type": "effect", "code": "# delay (range 0.25 0.5 perlin) # delayt 0.375 # delayfb 0", "description": "Perlin-modulated delay amount on drumroll for organic temporal smearing" }
]
},
{
"name": "Nouveau Soleil",
"file": "live/midi/nova/dnb/nouveau_soleil.tidal",
"bpm": 110,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM mid-tempo DnB with gameboy/atari console sounds" },
{ "type": "sample", "code": "$ \"bass_gameboy\" with midiOn \"^57\" (# \"bass_gameboy:5\")", "description": "Game Boy bass switching between two presets via MIDI for tonal contrast" },
{ "type": "technique", "code": "$ whenmod 64 32 (off \"q\" ((|+ note 12) . (# pan 0.8)))", "description": "Progressive octave-up offsets activating at deeper cycle depths (64/32/16/8)" },
{ "type": "sample", "code": "$ note \"<fs3 b4 a4 cs5 fs4 e4 d4 cs5 ...>\" # \"moogBass\"", "description": "Moog melody with 16-step chromatic sequence and octave reinforcement" },
{ "type": "effect", "code": "# hpfbus 51 (range 0 8000 \"^34\")", "description": "MIDI high-pass filter on synth_gameboy for dramatic filter sweeps" }
]
},
{
"name": "Premiere Grillade",
"file": "live/midi/nova/lofi/premiere_grillade.tidal",
"bpm": 80,
"style": "lofi",
"ingredients": [
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM lo-fi with Yamaha RM50 drums and jazz major 7th progression" },
{ "type": "technique", "code": "let prog = \"<[c,e,g,b] [c,e,g,bf] [c,ef,g,bf] [c,e,g,b]>\"", "description": "CMaj7-C7-CMin7-CMaj7 chord cycle on FMRhodes2 - classic lo-fi harmony" },
{ "type": "sample", "code": "$ \"shiloh:1\" # lpf 5000 # room 0.4 # sz 0.59 # dry 2", "description": "Shiloh vocal sample with lo-fi filtering and saturated dry signal" },
{ "type": "technique", "code": "note (\"<[c,c(3,8)] [g,[~ f6],g*4] [bf,bf(3,8)] c4>\" - 24) # \"bassWarsaw\"", "description": "Warsaw bass with euclidean-patterned chord tones for rhythmic bass line" },
{ "type": "effect", "code": "# crushbus 51 (range 16 2 \"^53\") # room 0.2 # sz 0.2", "description": "Subtle bitcrush and tight room reverb for lo-fi warmth without muddiness" }
]
},
{
"name": "Ete a Mauerpark",
"file": "live/midi/nova/techno/ete_a_mauerpark.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM Berlin techno with 64-cycle LPF sweeps and cello lead" },
{ "type": "technique", "code": "let gLPF = whenmod 64 48 (# lpfbus 4 (slow 16 $ range 20000 200 saw))", "description": "Global low-pass filter sweep from 20kHz to 200Hz over 16 cycles for massive breakdowns" },
{ "type": "sample", "code": "note (\"<[g4 c ef@14] ...>\") # \"[cbow:3]\" # crushbus 71 ...", "description": "Cello bow lead with sustained notes (@14) and bitcrush texture" },
{ "type": "technique", "code": "$ slow 2 $ someCyclesBy (\"^33\") (mask \"<t!2 f t f f t t> f t@14\")", "description": "MIDI probability-gated bass pattern with long sustain for Germanic weight" },
{ "type": "effect", "code": "# lesliebus 102 (range 0 2 \"^18\") # chorus (range 0 2 \"^19\")", "description": "MIDI Leslie and chorus on moog for evolving stereo pad texture" }
]
},
{
"name": "VelociTeuf",
"file": "live/midi/nova/breaks/break_dynasty.tidal",
"bpm": 165,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (165/60/4)", "description": "165 BPM closing ramp-up - 'Ready for Mix / Takeoff' energy" },
{ "type": "sample", "code": "$ loopAt 2 $ chop 16 $ \"jungle_breaks:6\"", "description": "Jungle breaks loop as the core drum pattern at DnB tempo" },
{ "type": "technique", "code": "note (\"<<b4 [b4@3 cs5]> gs4@2 ~ gs4>\" - 24) # \"bassWarsaw\"", "description": "Warsaw bass with chromatic tension (b4/cs5) and sustained rests" },
{ "type": "sample", "code": "$ slow 2 $ slice 16 \"~ <0 1 1 0 0 2 0 2 2 1 2 3 2 3 4 5>\" $ \"shiloh:2\"", "description": "Shiloh vocal chops in half-time with growing slice selection" },
{ "type": "effect", "code": "# delaybus 61 (range 0 1 \"^55\") # delayfb 0.5 # delaytime 0.375", "description": "MIDI delay on Shiloh vocal creating dub echo trails" }
]
}
]
}
\ No newline at end of file
...@@ -4,7 +4,7 @@ date: "2023-10-01" ...@@ -4,7 +4,7 @@ date: "2023-10-01"
time: "23:00" time: "23:00"
location: "Paris, France" location: "Paris, France"
address: "MephisTeuf" address: "MephisTeuf"
description: "Dark livecoding set Cette nuit t'appartient." description: "Dark livecoding set - Cette nuit t'appartient."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "" video: ""
......
...@@ -4,7 +4,7 @@ date: "2023-12-21" ...@@ -4,7 +4,7 @@ date: "2023-12-21"
time: "20:00" time: "20:00"
location: "Online (Grand Paris)" location: "Online (Grand Paris)"
address: "TOPLAP Stream" address: "TOPLAP Stream"
description: "Breaks&Beats TidalCycles+MIDI Cookie Collective winter solstice stream." description: "Breaks&Beats TidalCycles+MIDI - Cookie Collective winter solstice stream."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "https://archive.org/details/latesolstice2023-parvagues" video: "https://archive.org/details/latesolstice2023-parvagues"
......
{
"gig": "toplap-solstice",
"title": "TOPLAP SOLSTICE 23",
"date": "2023-12-21",
"bpmRange": [100, 150],
"styleDistribution": {
"techno": 1,
"nu-jazz": 2,
"breakbeat": 1
},
"samplePacks": [
{ "name": "techno:0/808bd/909/kick", "usage": "layered techno kick stack in Permanence" },
{ "name": "bass_nes", "usage": "NES bass chopped with freeze/squiz in Permanence" },
{ "name": "fguitar", "usage": "distorted guitar with crushbus in Permanence" },
{ "name": "jungle_breaks", "usage": "jungle breakbeats across Permanence and Bain Bouillant" },
{ "name": "nujazz_keys120", "usage": "jazz piano chords in Bain Bouillant and Salut Nu" },
{ "name": "nujazz_beats120", "usage": "jazz drum patterns in Bain Bouillant and Salut Nu" },
{ "name": "nujazz_wahwah125", "usage": "wah-wah guitar in Salut Nu" },
{ "name": "bassWarsaw", "usage": "primary bass synth in Bain Bouillant and Salut Nu" },
{ "name": "FMRhodes1", "usage": "FM piano in Haunted House bird-call motif" },
{ "name": "trance_pads", "usage": "atmospheric pad layer in Haunted House" },
{ "name": "weird_dialogs", "usage": "vocal dialogue samples in Haunted House (sliced question/answer)" },
{ "name": "moogBass", "usage": "moog pad in Permanence and Salut Nu" }
],
"tracks": [
{
"name": "Permanence",
"file": "live/collab/raph/permanence.tidal",
"bpm": 150,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (150/60/4)", "description": "150 BPM high-energy techno with triple mute groups" },
{ "type": "sample", "code": "$ \"[techno:0,808bd:2,909,kick:4]\" # lpf 1200", "description": "Four-layer kick stack low-passed at 1200 Hz for heavy sub weight" },
{ "type": "sample", "code": "$ chop 4 $ loopAt 4 $ \"bass_nes:1\" # octersubbus 43 (range 0 1.5 \"^17\")", "description": "NES bass loop with MIDI-controlled sub-octave for massive low-end" },
{ "type": "technique", "code": "$ note (\"0@3 0 . <gs4 f4 ef4 d4>\" + \"<g4!3 f4> . 0\" + \"[0,12]\") # \"superfork\"", "description": "Superfork lead with chromatic descent and octave-doubled unison" },
{ "type": "effect", "code": "# crushbus 41 (range 16 2.5 \"^53\") # squizbus 44 (range 0 1.5 \"^33\")", "description": "Dual distortion: bitcrush + squiz on the NES bass for gnarly texture" }
]
},
{
"name": "Bain Bouillant",
"file": "live/midi/nova/nujazz/cafe_bouillant.tidal",
"bpm": 120,
"style": "nu-jazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM nu-jazz with house kick foundation and jazz sample layers" },
{ "type": "sample", "code": "$ \"nujazz_keys120\" # n \"<61!24 60!8>\"", "description": "Jazz piano chords alternating between two voicings on 32-cycle rotation" },
{ "type": "technique", "code": "note (\"e3 <b2!3 <ef3 g3>>\" |+| \"[0 ~ ~ 0 ~ ~ 0 ~] [...]\") # \"bassWarsaw\"", "description": "Warsaw bass with syncopated euclidean-style note triggering pattern" },
{ "type": "sample", "code": "$ \"nujazz_bass120\" # n \"<33!64 34!64>\"", "description": "Plucked jazz bass alternating samples every 64 cycles for evolution" },
{ "type": "effect", "code": "# roombus 42 (range 0 0.4 \"^33\") # crushbus 41 (range 16 3.4 \"^53\")", "description": "MIDI-controlled room reverb and bitcrush on bass for live dynamics" }
]
},
{
"name": "Haunted House",
"file": "live/midi/nova/beatober/oct_16_haunted_house_insouciance.tidal",
"bpm": 120,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM Beatober track (Oct 16) - released as La Fin de l'Insouciance" },
{ "type": "technique", "code": "note (\"<[<g4 <g4!3 gs4> gs4 gs4>@3 <c!13 gs4 c c>@2 ...]\") # \"FMRhodes1\"", "description": "Bird-call FM Rhodes melody with chromatic voice-leading (g/gs alternation)" },
{ "type": "sample", "code": "\"weird_dialogs:39\" with fix slicing: begin/end for effects/almost/variations/answer", "description": "Vocal dialogue sample surgically sliced into 4 semantic sections for Q&A texture" },
{ "type": "sample", "code": "$ \"trance_pads:7\" # legato 2 # room 0.4", "description": "Atmospheric trance pad layer with sustained legato and reverb wash" },
{ "type": "effect", "code": "# delaybus 51 (range 0 0.8 \"^34\") # delayt \"<h>\" # delayfb 0.25", "description": "MIDI-controlled delay on FMRhodes creating spatial depth on demand" }
]
},
{
"name": "Salut nu",
"file": "live/midi/nova/nujazz/salut_nu.tidal",
"bpm": 120,
"style": "nu-jazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM nu-jazz with jazz samples and wah-wah guitar" },
{ "type": "sample", "code": "$ \"nujazz_keys120\" # n \"<54!16 53!16>\" with juxBy 0.9 mirror", "description": "Jazz piano with reversed mirror superimpose creating stereo depth" },
{ "type": "technique", "code": "note (\"<[a4@4 c5 <c5 d5 c5 fs4>] a4>\" + \"[0,12]\" - 36) # \"bassWarsaw\"", "description": "Warsaw bass with tritone movement (a4 to fs4) and octave doubling" },
{ "type": "sample", "code": "$ \"nujazz_wahwah125\" # octersubbus 71 (range 0 2 \"^55\")", "description": "Wah-wah guitar with MIDI sub-octave for funky bass reinforcement" },
{ "type": "effect", "code": "$ jux rev $ note (...) # \"moogBass\" # chorus 0.2 # att 0.3 # rel 2", "description": "Moog choir with jux-reversed stereo and slow attack/release for evolving pad" }
]
}
]
}
\ No newline at end of file
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
"style": "dnb", "style": "dnb",
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM, fast DNB-adjacent tempo" }, { "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM, fast DNB-adjacent tempo" },
{ "type": "sample", "code": "\"ghost\" # n (slow 4 $ \"<0 1 2 3>\")", "description": "Ghost samples cycling through 4 variations the track's namesake" }, { "type": "sample", "code": "\"ghost\" # n (slow 4 $ \"<0 1 2 3>\")", "description": "Ghost samples cycling through 4 variations - the track's namesake" },
{ "type": "technique", "code": "slice 16 \"[0 .. 7] . <[0 .. 7]!3 [0 1 . [2 3]]>\"", "description": "Breakbeat slicer on breaks165 with variable resequencing" }, { "type": "technique", "code": "slice 16 \"[0 .. 7] . <[0 .. 7]!3 [0 1 . [2 3]]>\"", "description": "Breakbeat slicer on breaks165 with variable resequencing" },
{ "type": "effect", "code": "# octersubsub 2 # octersub 2 # sz 0.01 # room 1.0", "description": "Heavy octave sub-bass doubling with tight reverb" }, { "type": "effect", "code": "# octersubsub 2 # octersub 2 # sz 0.01 # room 1.0", "description": "Heavy octave sub-bass doubling with tight reverb" },
{ "type": "pattern", "code": "note (\"<e3 fs3 <gs3 d4> <a3 df4>>\" - 12) # \"bassWarsaw\"", "description": "Dark Warsaw bass with diminished/augmented interval cycle" } { "type": "pattern", "code": "note (\"<e3 fs3 <gs3 d4> <a3 df4>>\" - 12) # \"bassWarsaw\"", "description": "Dark Warsaw bass with diminished/augmented interval cycle" }
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
"bpm": 155, "bpm": 155,
"style": "punk-dnb", "style": "punk-dnb",
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps (155/60/4)", "description": "155 BPM punk energy territory" }, { "type": "structure", "code": "setcps (155/60/4)", "description": "155 BPM - punk energy territory" },
{ "type": "sample", "code": "chop 4 $ \"punk:0/4\" # crushbus 41 (range 16 1.5 \"^53\")", "description": "Punk guitar chopped with MIDI-controlled bitcrush" }, { "type": "sample", "code": "chop 4 $ \"punk:0/4\" # crushbus 41 (range 16 1.5 \"^53\")", "description": "Punk guitar chopped with MIDI-controlled bitcrush" },
{ "type": "pattern", "code": "note \"<e g a <b4 b4>>\" # \"meth_bass:3\" # hpf 2000", "description": "High-passed meth_bass following E-G-A-B progression" }, { "type": "pattern", "code": "note \"<e g a <b4 b4>>\" # \"meth_bass:3\" # hpf 2000", "description": "High-passed meth_bass following E-G-A-B progression" },
{ "type": "technique", "code": "struct \"t(<3!3 5>,8,<0!7 1>)\" $ arp \"up\" ... # \"cpluck:2\"", "description": "Euclidean-rhythmed arpeggiated 'Violoncelle Manouche punko-magique'" }, { "type": "technique", "code": "struct \"t(<3!3 5>,8,<0!7 1>)\" $ arp \"up\" ... # \"cpluck:2\"", "description": "Euclidean-rhythmed arpeggiated 'Violoncelle Manouche punko-magique'" },
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
"bpm": 170, "bpm": 170,
"style": "punk-dnb", "style": "punk-dnb",
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps (170/60/4)", "description": "170 BPM full DNB speed, fastest track" }, { "type": "structure", "code": "setcps (170/60/4)", "description": "170 BPM - full DNB speed, fastest track" },
{ "type": "pattern", "code": "note (\"d*<3 4 3 2> . ds ds df\" + 2) # \"vec1_acid:11\"", "description": "Acid bassline with variable-density note patterns" }, { "type": "pattern", "code": "note (\"d*<3 4 3 2> . ds ds df\" + 2) # \"vec1_acid:11\"", "description": "Acid bassline with variable-density note patterns" },
{ "type": "technique", "code": "superimpose ((|* gain \"^17\") . (# n 10) . (# legato 0.8))", "description": "Layered acid superimposition with MIDI gain crossfade" }, { "type": "technique", "code": "superimpose ((|* gain \"^17\") . (# n 10) . (# legato 0.8))", "description": "Layered acid superimposition with MIDI gain crossfade" },
{ "type": "sample", "code": "loopAt 2 $ slice 2 $ \"meth_bass:9\" # delay ... # delayfb ...", "description": "Meth bass with building dub-delay wash (0 to 0.8 feedback)" }, { "type": "sample", "code": "loopAt 2 $ slice 2 $ \"meth_bass:9\" # delay ... # delayfb ...", "description": "Meth bass with building dub-delay wash (0 to 0.8 feedback)" },
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
{ "type": "pattern", "code": "n \"<30!16 31!16>\" # \"vec2_synth_acid\"", "description": "Triple-layered acid bass stack: vec2 alternating + two vec1 lines" }, { "type": "pattern", "code": "n \"<30!16 31!16>\" # \"vec2_synth_acid\"", "description": "Triple-layered acid bass stack: vec2 alternating + two vec1 lines" },
{ "type": "technique", "code": ">| note (\"[b d6 b cs6 d6 b cs6 b]*2\" - \"<0!32 12!32>\")", "description": "Acid sequence with octave drop every 32 cycles" }, { "type": "technique", "code": ">| note (\"[b d6 b cs6 d6 b cs6 b]*2\" - \"<0!32 12!32>\")", "description": "Acid sequence with octave drop every 32 cycles" },
{ "type": "sample", "code": "note (\"b ~ ~ b ~ ~ <d!7 e6> <~ d>\") # \"FMRhodes1\" # tremdp 4 # tremr 1.8", "description": "FM Rhodes 'Piano lead acidulé' with tremolo droplet texture" }, { "type": "sample", "code": "note (\"b ~ ~ b ~ ~ <d!7 e6> <~ d>\") # \"FMRhodes1\" # tremdp 4 # tremr 1.8", "description": "FM Rhodes 'Piano lead acidulé' with tremolo droplet texture" },
{ "type": "pattern", "code": "note (\"<b5!3 <g d>>@7 <c6 c6 cs6 a6>\") # \"moog:0\"", "description": "Caring bass Moog with chromatic C-C#-A movement" } { "type": "pattern", "code": "note (\"<b5!3 <g d>>@7 <c6 c6 cs6 a6>\") # \"moog:0\"", "description": "Caring bass - Moog with chromatic C-C#-A movement" }
] ]
}, },
{ {
...@@ -81,11 +81,11 @@ ...@@ -81,11 +81,11 @@
"bpm": 124, "bpm": 124,
"style": "downtempo", "style": "downtempo",
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps(124/60/4)", "description": "124 BPM slowest, most melodic track" }, { "type": "structure", "code": "setcps(124/60/4)", "description": "124 BPM - slowest, most melodic track" },
{ "type": "sample", "code": "\"suns_keys\" # n \"<0 <1 2> 3 3>\"", "description": "Suns of Gold keyboard stabs with tremolo and euclidean slicing" }, { "type": "sample", "code": "\"suns_keys\" # n \"<0 <1 2> 3 3>\"", "description": "Suns of Gold keyboard stabs with tremolo and euclidean slicing" },
{ "type": "technique", "code": "fast (4/3) $ note (\"<[fs4 <a5!2 gs!4 fs5!4 ...>@3]*4>\")", "description": "Polymetric (4/3) Warsaw bass triplets against 4/4 grid" }, { "type": "technique", "code": "fast (4/3) $ note (\"<[fs4 <a5!2 gs!4 fs5!4 ...>@3]*4>\")", "description": "Polymetric (4/3) Warsaw bass - triplets against 4/4 grid" },
{ "type": "sample", "code": "slice 8 \"<0 1 2 3>(3,8)\" $ \"suns_guitar:2\" # room 0.8", "description": "Euclidean-sliced guitar with lush reverb and L/R panning" }, { "type": "sample", "code": "slice 8 \"<0 1 2 3>(3,8)\" $ \"suns_guitar:2\" # room 0.8", "description": "Euclidean-sliced guitar with lush reverb and L/R panning" },
{ "type": "effect", "code": "# crushbus 73 (range 16 2.9 \"^55\") # lpfbus 72", "description": "'CRASH/BURN THIS GUITAR' MIDI-driven total destruction" } { "type": "effect", "code": "# crushbus 73 (range 16 2.9 \"^55\") # lpfbus 72", "description": "'CRASH/BURN THIS GUITAR' - MIDI-driven total destruction" }
] ]
} }
] ]
......
{
"gig": "algolia-fdlm",
"title": "Algolia FDLM 2024",
"date": "2024-06-21",
"bpmRange": [80, 160],
"styleDistribution": { "nujazz": 4, "dnb": 3, "lofi": 1, "techno": 2, "breaks": 2, "collab": 2 },
"samplePacks": [
{ "name": "nujazz_keys120/125", "usage": "Sampled jazz piano across Cafe trilogy" },
{ "name": "nujazz_bass120/125", "usage": "Upright bass samples in Cafe tracks" },
{ "name": "nujazz_beats120", "usage": "Live jazz drum loops in Salut Nu" },
{ "name": "jungle_breaks", "usage": "Chopped breakbeats across most tracks" },
{ "name": "bassWarsaw", "usage": "Synth bass in multiple tracks" },
{ "name": "FMRhodes", "usage": "Electric piano in Cafe Tiede, Lendemain Divin" },
{ "name": "come_guitar", "usage": "Guitar samples in Lendemain Divin" },
{ "name": "breaks165", "usage": "High-energy breakbeat in Permanence, JeuDrill" }
],
"tracks": [
{
"name": "Lendemain Divin",
"file": "live/midi/nova/lofi/lendemain_divin.tidal",
"bpm": 95,
"style": "lofi",
"ingredients": [
{ "type": "pattern", "code": ">| note \"<<d4!6 [d4@7 <f4 g4>]!2> <a3!4 [a3@7 <c4 c3>]!4> [<g3 [g3@7 f3]>] d3>\"", "description": "Dual-mode bassWarsaw bassline switching between habitual and alternative voicings" },
{ "type": "sample", "code": "\"come_guitar\" # n \"<0 0 <6 5> 0 1 1 2 7>\"", "description": "Guitar sample sequence with crushbus and LPF" },
{ "type": "effect", "code": "# octersubbus 42 (range 0 2.5 \"^33\")", "description": "Deep sub-octave on bass for heavy low end" },
{ "type": "technique", "code": "note \"0 7 <0!3 [0 15]> 12\" # \"FMRhodes1\"", "description": "FMRhodes1 lead mirroring bass movement with interval jumps" },
{ "type": "structure", "code": "setcps (95/60/4)", "description": "95 BPM, roland tr808/606 hats, vec1_snare, warm opener" }
]
},
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 80,
"style": "ambient",
"ingredients": [
{ "type": "sample", "code": "\"celtic_guitar80\" # n \"4\"", "description": "Celtic guitar sample repurposed as bass" },
{ "type": "pattern", "code": "note \"<ef ef {b, [~!7 fs]} fs>\"", "description": "Moog bass with sparse set-theoretic note pattern" },
{ "type": "effect", "code": "# octerbus 52 (range 0 0.63 \"^36\")", "description": "Octaver on moog bass for sub depth" },
{ "type": "technique", "code": "chop 4 $ \"voices_celtic\"", "description": "Celtic vocal sample chopped and sequenced" },
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM ambient with LPF automation over 64 cycles" }
]
},
{
"name": "Nightly Repair",
"file": "live/techno/nightly_repair.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "pattern", "code": "note (\"<bf g bf g bf g bf c c!4 g bf c6@2>\" - 24)", "description": "Voltaic bassline on 90s_matrix:3 with long melodic phrases" },
{ "type": "sample", "code": "\"[jazz,909,808bd:4]\"", "description": "Triple-layered kick for heavy low end" },
{ "type": "effect", "code": "# lesliebus 41 (range \"-1\" 1 \"^17\")", "description": "Leslie speaker on 90s_matrix bass creating rotary modulation" },
{ "type": "technique", "code": "note (scale \"blues\" (arp \"<up pinkyup downup thumbupdown>\" \"[0,1,2,<3 4>,<4 <5 6>>]\"))", "description": "Blues scale arpeggiation on FMRhodes1 with varied arp directions" },
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM, custom blues scale, 90s_matrix Godzilla bass on d7" }
]
},
{
"name": "Invoque l'Ete",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\"", "description": "Latin clave rhythm forming the backbone" },
{ "type": "sample", "code": "\"fguitar:12\"", "description": "Sweet guitar with loopAt 4 and variable chopping" },
{ "type": "effect", "code": "# crushbus 61 (range 16 1.4 \"^54\")", "description": "Warm bitcrush on guitar" },
{ "type": "technique", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\")", "description": "Jazz chord progression on moogBass and 90s_synatm" },
{ "type": "structure", "code": "setcps (115/60/4)", "description": "115 BPM, fpiano:13 with slice patterns, breaks125 + breaks165" }
]
},
{
"name": "Venons Ensemble",
"file": "live/midi/nova/dnb/venons_ensemble.tidal",
"bpm": 170,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"come_bass\"", "description": "Custom multi-sample bass" },
{ "type": "pattern", "code": "fast 2 . struct \"t t t <t!3 t*2>\"", "description": "DNB kick pattern with half-time switching" },
{ "type": "effect", "code": "# crushbus 43 (range 16 3.5 \"^53\")", "description": "Bitcrush on bass" },
{ "type": "technique", "code": "come_voice with conditional sample selection", "description": "Voice samples triggered by MIDI probability" },
{ "type": "structure", "code": "setcps (85/60/4)", "description": "170 BPM half-time, electric guitar + voice call-and-response" }
]
},
{
"name": "JeuDrill",
"file": "live/collab/raph/jeudrill.tidal",
"bpm": 140,
"style": "drill",
"ingredients": [
{ "type": "pattern", "code": "slow 2 $ note (\"<<fs <[fs@15 e] [fs@14 cs e]>> b4>\" - 12 + 2)", "description": "Slow-evolving giorgio_syn bassline with chromatic movement" },
{ "type": "sample", "code": "\"bogdan_grime:1\"", "description": "Cardiff grime vocal sample with conditional playback" },
{ "type": "effect", "code": "# octersubsubbus 42 (range 0 2 \"^33\")", "description": "Deep sub-sub-octave on bass for extreme low end" },
{ "type": "technique", "code": "someCyclesBy \"<1!16 1!32 0!16>\" (>| note \"<b3 ~ ~ [~ ~ as4 ~]>\")", "description": "Multi-phase synth menace on 90s_synatm:10 with Adrianesque variants" },
{ "type": "structure", "code": "setcps (140/60/4)", "description": "140 BPM, marimba on d5, breaks165 with Nassim button, bogdan vocal stabs" }
]
},
{
"name": "PERMANENCE",
"file": "live/collab/raph/permanence.tidal",
"bpm": 150,
"style": "techno",
"ingredients": [
{ "type": "pattern", "code": "chop 4 $ loopAt 4 $ \"bass_nes:1\"", "description": "NES bass sample chopped and looped with freeze effect" },
{ "type": "sample", "code": "\"fguitar:40\"", "description": "Guitar sample with distort and crush for industrial texture" },
{ "type": "effect", "code": "# distortbus 52 (range 0 1.5 \"^34\")", "description": "MIDI-controlled distortion on guitar" },
{ "type": "technique", "code": "note (\"<c4 ef4 <bf3 <g3 g4>> <af3 f4 af3 af4>>\") # \"moogBass\"", "description": "moogBass pad following chromatic minor progression" },
{ "type": "structure", "code": "setcps (150/60/4)", "description": "150 BPM, superfork lead with delay, fsynth with octer/crush" }
]
},
{
"name": "Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Nu-jazz bass sample chopped and sliced" },
{ "type": "pattern", "code": "note (\"[g@2 ~!4 <f ~ as5 c6>]\" - 12)", "description": "FMRhodes1 lead with sparse melodic intervals" },
{ "type": "effect", "code": "# crushbus 71 (range 12 3.4 \"^55\")", "description": "Bitcrush on giorgio_syn creating gritty synth texture" },
{ "type": "technique", "code": "midiOn \"^58\" (off 0.125 id . rev)", "description": "Reversed Rhodes with micro-offset creating echo-before-attack" },
{ "type": "structure", "code": "setcps (125/60/4)", "description": "125 BPM, cbow cello on d11, risers on d10, jungle_vocals on d9" }
]
},
{
"name": "Cafe Tiede",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys125\" # n \"<56 56 57 56 58!4 59 59 56 59>\"", "description": "Sampled nu-jazz piano keys driving the harmony" },
{ "type": "pattern", "code": "midiOn \"^42\" (<| \"k k k <k <k*2 [k <k ~> k ~]>>\")", "description": "Kick pattern with evolving 4th-beat variation" },
{ "type": "effect", "code": "# crushbus 41 (range 12 4.5 \"^53\")", "description": "Gentle bitcrush on nujazz bass" },
{ "type": "technique", "code": "chop 8 $ loopAt 2 $ \"nujazz_keys125\"", "description": "Live-recorded jazz keys chopped into 8 for real-time slicing" },
{ "type": "structure", "code": "setcps(125/60/4)", "description": "125 BPM, FMRhodes1 with arpeggiated chords on d10, h2ogmcp clap" }
]
},
{
"name": "Cafe Bouillant",
"file": "live/midi/nova/nujazz/cafe_bouillant.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys120\" # n \"<61!24 60!8>\"", "description": "Piano keys switching between two voicings" },
{ "type": "pattern", "code": "note (\"e3 <b2!3 <ef3 g3>>\" |+| \"[0 ~ ~ 0 ~ ~ 0 ~]\")", "description": "bassWarsaw with irregular euclidean-style note triggers" },
{ "type": "effect", "code": "# roombus 42 (range 0 0.4 \"^33\")", "description": "MIDI-controlled reverb on bass" },
{ "type": "technique", "code": "\"d([16 <16 [8 <8 32 16 32>]>],32,0)\"", "description": "Complex euclidean hi-hat pattern on rampleS57" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, nujazz_bass120 plucked doubts on d11, cpluck:4 on d10" }
]
},
{
"name": "Cafe Glace",
"file": "live/midi/nova/nujazz/cafe_glace.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys120\" # n (slow 4 \"<5 6 7 8>\")", "description": "Piano samples rotating through 4 voicings" },
{ "type": "pattern", "code": "midiOn \"^42\" (<| \"k k k <k!3 <[~ k*<1!3 2>]!3 k*2>>\")", "description": "Evolving kick with occasional rolls on 4th beat" },
{ "type": "effect", "code": "# crushbus 51 (range 16 6.4 \"^54\")", "description": "Wide-range bitcrush on keys" },
{ "type": "technique", "code": "\"meth_bass\" # n \"<10!3 [<10 11> 11] 9!24>\" $ loopAt 0.25", "description": "Glitchy meth_bass at 4x speed creating rhythmic noise texture" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, double jungle_breaks on d7+d8, nujazz_bass120:4 sliced" }
]
},
{
"name": "Salut Nu",
"file": "live/midi/nova/nujazz/salut_nu.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_beats120\"", "description": "Live jazz drum loops as primary rhythm source" },
{ "type": "pattern", "code": "note (\"<[a4@3 <c5 f5>] e5 [<d5!3 f5>] <a5!3 c6>>\" + \"<0!8 [0,12]!8>\")", "description": "moogBass melody with jux rev and octave doubling" },
{ "type": "effect", "code": "# freezebus 51 (range 0 0.7 \"^34\")", "description": "Freeze effect on nujazz_keys120 piano" },
{ "type": "technique", "code": "midiOn \"^58\" (juxBy 0.9 (mask \"<<f t> [<f t> t]>\" . (# begin 0.5) . rev . (|+ note 12)))", "description": "Complex jux with reversed, offset, octave-shifted piano reflection" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, nujazz_wahwah125 guitar on d7, bassWarsaw with octer/squiz" }
]
},
{
"name": "Nuit Agitee",
"file": "live/midi/nova/breaks/nuit_agitee.tidal",
"bpm": 160,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"bass_commodore:7\"", "description": "Commodore bass sample stretched over 8 cycles with heavy modulation" },
{ "type": "pattern", "code": "note (scale \"gameboy\" (\"<1(3,8) [1(3,8), <~ [~!7 2]>] 0(3,8) <0!3 -2>(3,8)>\"))", "description": "Custom gameboy scale on harpsichord2 with euclidean rhythm" },
{ "type": "effect", "code": "# lesliebus 43 (range 0 2 \"^29\")", "description": "Leslie speaker on Commodore bass" },
{ "type": "technique", "code": "loopAt 8 $ chop 64 $ \"bass_commodore:7\"", "description": "Extreme granular slicing: 64 chops over 8-cycle loop" },
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM, custom gameboy scale, amencutup hats, moogBass angels" }
]
},
{
"name": "MauerPark",
"file": "live/midi/nova/techno/ete_a_mauerpark.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "pattern", "code": "note (\"<[g4 c ef@14] [<c g> ef g@14]>\" - 24)", "description": "Long sustained bass with brief melodic pickups" },
{ "type": "sample", "code": "\"[techno:0,808bd:2,909,kick:4]\"", "description": "Four-layer kick stack" },
{ "type": "effect", "code": "# chorus (range 0 2 \"^19\")", "description": "Chorus effect on moogBass nano-angels" },
{ "type": "technique", "code": "arp \"<up!6 down downup>\" $ note (\"<ef4 g4 <ef g> d>\" + \"c'maj'4\")", "description": "Evolving arpeggio direction on FMRhodes1" },
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM, cbow cello, moogBass chorus, heavy closer" }
]
}
]
}
--- ---
title: "Algolia Last All Hands" title: "Algolia - Last All Hands"
date: "2024-12-15" date: "2024-12-15"
time: "18:00" time: "18:00"
location: "Paris, France" location: "Paris, France"
...@@ -13,7 +13,7 @@ archive: "" ...@@ -13,7 +13,7 @@ archive: ""
tags: ["livecoding", "algolia", "paris"] tags: ["livecoding", "algolia", "paris"]
--- ---
# Algolia Last All Hands # Algolia - Last All Hands
## Tracklist ## Tracklist
- Blue Gold - Blue Gold
......
{
"gig": "algolia-last-all-hands",
"title": "Algolia - Last All Hands",
"date": "2024-12-15",
"bpmRange": [90, 160],
"styleDistribution": { "breaks": 3, "nujazz": 2, "techno": 1, "lounge": 1, "ambient": 2, "dnb": 1, "punk": 1 },
"samplePacks": [
{ "name": "bassWarsaw", "usage": "Main synth bass across multiple tracks" },
{ "name": "suns_keys", "usage": "Suns of Gold key samples for Blue Gold" },
{ "name": "suns_guitar", "usage": "Guitar layers for Blue Gold" },
{ "name": "jungle_breaks", "usage": "Breakbeat fills and variations" },
{ "name": "nujazz_keys120", "usage": "Pre-recorded nujazz piano loops" },
{ "name": "FMRhodes1", "usage": "FM electric piano" },
{ "name": "90s_synatm", "usage": "90s synth atmosphere pads" },
{ "name": "fguitar", "usage": "Funk guitar samples" },
{ "name": "bass_nes", "usage": "NES-style bass for Permanence" },
{ "name": "moogBass", "usage": "Moog bass synth for atmospheric layers" }
],
"tracks": [
{
"name": "Blue Gold",
"file": "live/collab/mousquetaires/blue_gold.tidal",
"bpm": 124,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"suns_keys\"", "description": "Suns of Gold key samples with tremolo and slice" },
{ "type": "sample", "code": "\"suns_guitar\"", "description": "Triple guitar: main, flying triplet, falling angel layers" },
{ "type": "pattern", "code": "$ fast (4/3)", "description": "Signature 4/3 polyrhythmic bassWarsaw line" },
{ "type": "sample", "code": "\"suns_voice:0\"", "description": "Father's voice sample with phrase slicing" },
{ "type": "technique", "code": "$ whenmod 32 16 (swingBy (slow 16 $ range 0.08 0.01 saw) 4)", "description": "Progressive swing reduction" }
]
},
{
"name": "Something About Drums",
"file": "live/midi/nova/dnb/something_about_drums.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "pattern", "code": "note (cat [\"[bf3, d4, f4, a4]\", \"[a3, c4, e4, g4]\", \"[d4, f4, a4, c5, <e5 e4>]\", \"[g3, b4, d5, <f5 ~>]\"])", "description": "Jazz chord arpeggiation: Bbmaj7-Am7-Dm9-G7" },
{ "type": "sample", "code": "\"FMRhodes2\"", "description": "FM Rhodes with modIndex and stutter" },
{ "type": "sample", "code": "\"moogBass\"", "description": "Moog doubling chords with delay" },
{ "type": "sample", "code": "\"break:2\"", "description": "Break with iter and splice manipulation" },
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM jazz-DnB fusion" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "sample", "code": "\"sunny_bass\"", "description": "Warm bass with octave sub variations" },
{ "type": "sample", "code": "\"sunny_brass\"", "description": "Brass with progressive mask reveal" },
{ "type": "pattern", "code": "\"acidOto3092\" |- note 36", "description": "Acid synth overlay in F/G#/C/G" },
{ "type": "sample", "code": "\"nujazz_keys120:35/4\"", "description": "Piano loop outro" },
{ "type": "technique", "code": "$ mask \"<t f <f t> f>\"", "description": "Gradual 4-bar sample deployment" }
]
},
{
"name": "Cafe Bouillant",
"file": "live/midi/nova/nujazz/cafe_bouillant.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass120\"", "description": "Plucked bass with perlin-driven crush" },
{ "type": "pattern", "code": "note (\"e3 <b2!3 <ef3 g3>>\" |+| ...)", "description": "BassWarsaw with euclidean offbeats" },
{ "type": "sample", "code": "\"cpluck:4\"", "description": "Plucked melody with probabilistic transposition" },
{ "type": "sample", "code": "\"jungle_breaks:22\"", "description": "Stereo-panned jungle break" },
{ "type": "technique", "code": "$ someCyclesBy \"<1!32 0!32>\" (|+ note ...)", "description": "32-cycle alternating note transposition" }
]
},
{
"name": "Cafe Tiede",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Jazz bass chopped and sliced with MIDI control" },
{ "type": "sample", "code": "\"nujazz_keys125\"", "description": "Multi-layer piano: main, octave, pad, slice patterns" },
{ "type": "technique", "code": "$ slice 4 \"<<[0 1 2 3]...> [0 1 2 3]>\"", "description": "Alternating piano slice variations" },
{ "type": "effect", "code": "# roombus 110 (slow 16 $ range 0 0.9 saw)", "description": "Progressive reverb build" },
{ "type": "sample", "code": "\"FMRhodes1\"", "description": "FM piano pad with modIndex and arpeggio superimposition" }
]
},
{
"name": "Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Jazz bass with crush and octave bus" },
{ "type": "sample", "code": "\"FMRhodes1\"", "description": "FM piano with modIndex and reverse offsets" },
{ "type": "sample", "code": "\"giorgio_syn:22\"", "description": "Giorgio synth with euclidean struct" },
{ "type": "sample", "code": "\"cbow:2\"", "description": "Cello bow with stutter superimposition at bar 32" },
{ "type": "sample", "code": "\"meth_bass:3\"", "description": "Meth bass sub-melody" }
]
},
{
"name": "Love First",
"file": "live/collab/nass/love_first.tidal",
"bpm": 120,
"style": "breaks",
"ingredients": [
{ "type": "pattern", "code": "note (\"<c <ef ...>> f@2>\" - 24)", "description": "BassWarsaw in C/Eb/F with octave doubling" },
{ "type": "sample", "code": "\"nujazz_keys120:13\"", "description": "Piano with crush and reverb processing" },
{ "type": "sample", "code": "\"nujazz_guitar120:3\"", "description": "Guitar with progressive delay build" },
{ "type": "sample", "code": "\"movie_cat\"", "description": "Cat movie samples with stutter and slice variations" },
{ "type": "technique", "code": "$ midiOn (\"^92\") (slice 8 ... . loopAt 1 . (# \"breaks165\"))", "description": "Nassim button: breaks165 sliced in real-time" }
]
},
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 90,
"style": "ambient",
"ingredients": [
{ "type": "sample", "code": "\"90s_synatm:8/4\"", "description": "Atmospheric synth with MIDI note shift and chop" },
{ "type": "sample", "code": "\"90s_synatm:14/4\"", "description": "Electronic answer synth with octave sub and crush" },
{ "type": "sample", "code": "\"90s_synatm:18\"", "description": "High lead with jux reversal and doubt echoes" },
{ "type": "technique", "code": "$ someCyclesBy \"^36\" (loopAt 1 . mask \"[f t]*4\")", "description": "MIDI probability-driven break mask pattern" },
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM contemplative ambient" }
]
},
{
"name": "Nuit Agitee",
"file": "live/midi/nova/breaks/nuit_agitee.tidal",
"bpm": 160,
"style": "breaks",
"ingredients": [
{ "type": "technique", "code": "let scale = getScale (scaleTable ++ [(\"gameboy\", [1,2,4,5,7,9,11])])", "description": "Custom gameboy scale for retro melody" },
{ "type": "sample", "code": "\"bass_commodore:7\"", "description": "Commodore bass with leslie modulation" },
{ "type": "sample", "code": "\"harpsichord2\"", "description": "Harpsichord in gameboy scale" },
{ "type": "sample", "code": "\"amencutup\"", "description": "Amen break with stereo pan" },
{ "type": "pattern", "code": "note (scale \"gameboy\" ...)", "description": "Gameboy-scale melody with euclidean timing" }
]
},
{
"name": "Invoque l'Ete",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "sample", "code": "\"fbass:13\"", "description": "Funk bass with 8-slice run variations" },
{ "type": "sample", "code": "\"fguitar:12\"", "description": "Gentle guitar with chop and whenmod reversal" },
{ "type": "sample", "code": "\"fpiano:13\"", "description": "Piano with mask deploy and octave sub" },
{ "type": "pattern", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\" + \"0*<4 [4 16]>\")", "description": "Moog angel bassline in A/G/Am/D progression" },
{ "type": "technique", "code": "$ (|* gain (\"0.75 1 1 1 0.75 1 1 1\"))", "description": "Clave-like accent pattern for snare groove" }
]
},
{
"name": "Permanence",
"file": "live/collab/raph/permanence.tidal",
"bpm": 150,
"style": "punk",
"ingredients": [
{ "type": "sample", "code": "\"bass_nes:1\"", "description": "NES bass with freeze, ply, and squiz effects" },
{ "type": "sample", "code": "\"fguitar:40\"", "description": "Guitar with slice, distort, and LPF modulation" },
{ "type": "pattern", "code": "note (\"<c4 ef4 <bf3 <g3 g4>> <af3 f4 af3 af4>>\")", "description": "Moog bass in chromatic dark progression" },
{ "type": "sample", "code": "\"fsynth\"", "description": "Synth lead with crush and triple octave sub" },
{ "type": "effect", "code": "# squizbus 44 (range 0 1.5 \"^33\")", "description": "MIDI squiz on NES bass for lo-fi texture" }
]
}
]
}
--- ---
title: "Bazurto Live @ Tignes" title: "Bazurto - Live @ Tignes"
date: "2024-03-15" date: "2024-03-15"
time: "20:00" time: "20:00"
location: "Tignes, France" location: "Tignes, France"
address: "Montagnettes" address: "Montagnettes"
description: "Live set pour les Montagnettes Apéritif to Digestif." description: "Live set pour les Montagnettes - Apéritif to Digestif."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "" video: ""
...@@ -13,15 +13,15 @@ archive: "" ...@@ -13,15 +13,15 @@ archive: ""
tags: ["livecoding", "montagne", "tignes"] tags: ["livecoding", "montagne", "tignes"]
--- ---
# Bazurto Live @ Tignes # Bazurto - Live @ Tignes
Pour Montagnettes <3 Pour Montagnettes <3
## Setlist ## Setlist
- Apéritif Invoque l'Été - Apéritif - Invoque l'Été
- Entrée Solar / Lunar - Entrée - Solar / Lunar
- Accompagnement Michael / Nightly Repair / Contre Visite - Accompagnement - Michael / Nightly Repair / Contre Visite
- Plat de résistance Burn this Book - Plat de résistance - Burn this Book
- Dessert Break the Loop / Atari-ght - Dessert - Break the Loop / Atari-ght
- Dernier Verre Alerte Verte - Dernier Verre - Alerte Verte
- Digestif It's About Time - Digestif - It's About Time
{
"gig": "bazurto-tignes",
"title": "Bazurto - Live @ Tignes",
"date": "2024-03-15",
"bpmRange": [90, 165],
"styleDistribution": {
"lounge": 2,
"breaks": 3,
"techno": 3,
"dnb": 2,
"chiptune": 1
},
"samplePacks": [
{ "name": "fbass / fguitar / fpiano", "usage": "sliced funk recordings across Invoque l'Été" },
{ "name": "FMRhodes1 / FMRhodes2", "usage": "FM synthesis piano in Solar, Lunar, Atari-ght" },
{ "name": "bassWarsaw", "usage": "primary analog-modeled bass in Solar, Lunar, Burn this Book" },
{ "name": "90s_synatm / 90s_matrix", "usage": "atmospheric 90s synth pads in Nightly Repair, Burn this Book" },
{ "name": "breaks125 / jungle_breaks / breaks165", "usage": "breakbeat backbone across most tracks" },
{ "name": "drums_atari / synth_commodore", "usage": "8-bit drum machines and Commodore synth in Atari-ght" },
{ "name": "moogBass", "usage": "warm Moog synth in Invoque l'Été and Alerte Verte" },
{ "name": "808bd / 808lc / 808hc / 808mc", "usage": "Roland 808 drum sounds in kick patterns and clave" }
],
"tracks": [
{
"name": "Invoque l'Été",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (115/60/4)", "description": "115 BPM summer lounge with MIDI mask/mute system for live performance" },
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\"", "description": "Latin-inspired clave pattern on snare driving the groove" },
{ "type": "sample", "code": "\"fbass:13\" / \"fguitar:12\" / \"fpiano:13\"", "description": "Trio of sliced funk recordings: bass, guitar, piano - each loopAt 2-4 cycles" },
{ "type": "technique", "code": "slice 8 (run \"<4!4 8 8 [4 8 4] [8 4 8]>\") $ loopAt 2", "description": "Variable slice count on bass creates evolving rhythmic phrase" },
{ "type": "effect", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\" + \"0*<4 [4 16]>\") # \"moogBass\"", "description": "Moog chord progression Am-G-Am-D with frequency shift for movement" }
]
},
{
"name": "Solar",
"file": "live/midi/nova/breaks/solar.tidal",
"bpm": 110,
"style": "breaks",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM nostalgic breakbeat with dual DJF bus filters" },
{ "type": "pattern", "code": "note \"e3'maj\" # \"bassWarsaw\"", "description": "E major bassWarsaw with converge/diverge arpeggiation over 16 cycles" },
{ "type": "sample", "code": "\"break:11\" # hpf 500", "description": "High-passed break sample sliced into 8, with striate and ply transforms" },
{ "type": "technique", "code": "$ note (mel - 12) # \"superpwm\" # semitone \"<7!3 5>\"", "description": "PWM synth lead with quinte/quarte 2nd oscillator and accelerate sweeps" },
{ "type": "effect", "code": "# \"FMRhodes1\" # modIndex (range 0 128 \"^34\")", "description": "FM Rhodes with MIDI-controlled modulation index for timbral morphing" }
]
},
{
"name": "Lunar",
"file": "live/midi/nova/breaks/lunar.tidal",
"bpm": 110,
"style": "breaks",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM companion piece to Solar - darker breakbeat" },
{ "type": "pattern", "code": "note (scale \"aeolian\" \"<3 3 5 <5 4> 5 4 3 <~ 2 3 ~>>\" - 24) # \"bassWarsaw\"", "description": "Aeolian bassWarsaw walking line with rests and direction changes" },
{ "type": "sample", "code": "\"break\" # n \"<13!12 14!4 15!12 14!4>\"", "description": "4 break variations cycling over 32 bars, sliced 8-way" },
{ "type": "technique", "code": "superimpose ((# cut 51) . (|+| note \"~ 12(...)\") . (|* gain 0.9))", "description": "Rhodes self-superimposition with octave Euclidean ornaments" },
{ "type": "effect", "code": "# \"FMRhodes1\" # modIndex (range 0.1 32 \"^54\")", "description": "Lower modIndex range than Solar - warmer, more contained FM tone" }
]
},
{
"name": "Michael",
"file": "live/midi/nova/lounge/michael.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM lounge with piano, brass choir, and organ" },
{ "type": "pattern", "code": "slice 4 \"<0 1 2 3>\" $ \"[a,b,c]\" # \"fsynth:3\"", "description": "3-voice brass choir (a/b/c) with independent note offsets and pinkyup arp" },
{ "type": "sample", "code": "\"fpiano:3\" / \"forgan:17\" / \"fbreak120\"", "description": "Sliced piano, organ, and 120BPM break for jazzy layering" },
{ "type": "technique", "code": "juxBy 0.8 (rev . (# cut 51)) $ slice 8 (run (\"4 <4 8>\"))", "description": "Piano juxtaposed with reversed copy for stereo depth" },
{ "type": "effect", "code": "# crushbus 41 (range 16 1.6 \"^13\") # room 0.3 # sz 0.6", "description": "MIDI bitcrush on brass with room reverb for warmth" }
]
},
{
"name": "Nightly Repair",
"file": "live/techno/nightly_repair.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM dark slow techno - 'La nuit te répare'" },
{ "type": "pattern", "code": "note (\"<bf g bf g bf g bf c c!4 g bf c6@2>\" - 24) # \"90s_matrix:3\"", "description": "Bb-G bass oscillation with rare C6 jumps, Leslie speaker modulation" },
{ "type": "sample", "code": "\"FMRhodes1\" # note (scale \"blues\" (arp \"<up pinkyup downup thumbupdown>\" ...))", "description": "Blues scale Rhodes with 4 rotating arpeggio modes" },
{ "type": "technique", "code": "# lesliebus 41 ... # lrate (slow 4 $ \"<[0.7 1.2!3] 2.4 4.8 6.7>\") # lsize ...", "description": "MIDI-controlled Leslie speaker on bass with accelerating rotation" },
{ "type": "effect", "code": "# octersubbus 53 (range 0 1.85 \"^34\")", "description": "Sub-octave doubling on 90s synth pads for depth" }
]
},
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM atmospheric techno with 3-layer mute system" },
{ "type": "pattern", "code": "note (scale \"aeolian\" \"<0!3 [0@6 <4 -1>@2]> 2\") # \"90s_synatm:18\"", "description": "Aeolian high lead with sparse melodic questioning - 'Winds of truth'" },
{ "type": "sample", "code": "\"90s_synatm:8\" / \"90s_synatm:14\" / \"jungle_breaks:1\"", "description": "Aerial 90s synths for questions and answers, jungle breaks for rhythm" },
{ "type": "technique", "code": "whenmod 32 8 (superimpose (arp \"<up!3 down>\" . (+| note \"[12,19,<21 21 17 18>]\")))", "description": "Every 32 cycles: 8-cycle burst of arpeggiated 'echoes of doubts'" },
{ "type": "effect", "code": "# crushbus 62 (range 16 2.25 \"^55\") # panbus 63 (range 0.05 0.95 \"^19\")", "description": "Dual MIDI control: bitcrush + panoramic sweep on lead synth" }
]
},
{
"name": "Burn this Book",
"file": "live/techno/noir/burn_this_book.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM dark techno - ASCII fire art header" },
{ "type": "pattern", "code": "note (scale \"aeolian\" \"<0 [0, <<7 7 8 9>!3 ...>>]>\") # \"cpluck:0\"", "description": "Aeolian bass on cpluck with stacked intervals and Warsaw superimposition" },
{ "type": "sample", "code": "\"cpu2:3\" / \"drums_nes:3\" / \"90s_synatm:16\"", "description": "CPU hat, NES drums with delay, and long 90s synth pad" },
{ "type": "technique", "code": "sometimesBy (1 - \"^18\") (mask ...) $ arp \"up\" ... # \"cpluck:1\"", "description": "MIDI-inverted probability mask on aeolian arp - more knob = more notes" },
{ "type": "effect", "code": "# delay 0.85 # delayfb \"<0.25!3 <0.5 0.9>>\" # delayt 0.125", "description": "NES drums through delay with feedback building to near-infinite at bar 4" }
]
},
{
"name": "Break the Loop",
"file": "live/midi/nova/dnb/break_the_loop.tidal",
"bpm": 165,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (165/60/4)", "description": "165 BPM fast DnB with run-and-stumble kick pattern" },
{ "type": "pattern", "code": "midiOn \"^41\" (<| \"k <k!4 ~ k!3> k <k [~ k] k [<k!4 ~!3 k> k]>\") -- Run & stumble", "description": "Kick alternates between frantic run pattern and sparse waiting mode" },
{ "type": "sample", "code": "\"90s_synatm:9\" / \"FMRhodes1\" / \"90s_matrix:3\"", "description": "90s burning synth bass, FM Rhodes ritornello, Matrix voices from the storm" },
{ "type": "technique", "code": "midiOn \"^57\" (... (+| note (scale \"aeolian\" (arp \"converge\" ...))))", "description": "Converging arp on aeolian bass creates tension on MIDI trigger" },
{ "type": "effect", "code": "# squizbus 61 (range 0 4 \"^55\")", "description": "Squiz distortion on matrix voices for lo-fi choir effect" }
]
},
{
"name": "Atari-ght",
"file": "live/chip/ataright.tidal",
"bpm": 120,
"style": "chiptune",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM chiptune - with ASCII Atari console art" },
{ "type": "pattern", "code": "note (arp \"down\" (\"<c'maj'4!2 ... ef'maj'4 g'min'4>\" |+| \"ef3\" - 12)) # \"FMRhodes2\"", "description": "FM Rhodes rain pattern: Cm-Eb-Gm chord arps with down direction" },
{ "type": "sample", "code": "\"drums_atari\" / \"synth_commodore\" / \"808bd:6\"", "description": "Atari drums, Commodore 64 synth bus, and 808 kick" },
{ "type": "technique", "code": "# crushbus 61 (range 20 2.25 \"^55\") # squizbus 62 (range 0 1.5 \"^35\")", "description": "Double MIDI distortion on Commodore synth: bitcrush + squiz" },
{ "type": "effect", "code": "$ midiOn \"^58\" (off \"s\" id . off \"e\" id) # \"FMRhodes1\" # modIndex (range 0 128 \"^53\")", "description": "FM Rhodes with sixteenth and eighth note offset echoes" }
]
},
{
"name": "Alerte Verte",
"file": "live/midi/nova/dnb/alerte_verte.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM DnB with 32-cycle bridge dynamics" },
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\" # \"[<808lc!6 808hc!2>,<~!4 808mc!4>]\"", "description": "808 clave pattern alternating low/mid/high cowbell" },
{ "type": "sample", "code": "\"fbass:25\" / \"fguitar\" / \"moog\" / \"supersiren\"", "description": "Resolute sliced bass, dual guitar A/B, moog pads, and siren" },
{ "type": "technique", "code": "$ midiOn \"^57\" (rev . slice 8 \"0 [1 0] 2 <3 0 3 3*4>\") -- La morale à l'envers", "description": "Reversed bass slicing: 'morality upside down' on MIDI trigger" },
{ "type": "effect", "code": "# delay \"<0!12 0.3!3 0.8>\" # delayfb \"<0!3 0.5>\" # delayt 0.2", "description": "Delayed kick with feedback building across 16-bar phrase" }
]
},
{
"name": "It's About Time",
"file": "live/midi/nova/breaks/its_about_time.tidal",
"bpm": 110,
"style": "breaks",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM breakbeat with 3-layer mute/mask system" },
{ "type": "pattern", "code": "midiOn \"^42\" (<| \"k k k <k k*2 k <k [<~ k> k]>>\") $ \"[808bd:4,kick:4]\"", "description": "808+kick layered with variable fourth beat - run or stumble" },
{ "type": "sample", "code": "\"drums_atari\" / \"breaks165\" / \"90s_synatm:9\"", "description": "Atari drums chopped into 32, 165BPM breaks, burning 90s synth bass" },
{ "type": "technique", "code": "$ midiOn \"^57\" (superimpose (... (|+ note ...) . chop \"8 . <8!3 16>\"))", "description": "Bass self-superimposition with note offsets and variable chop density" },
{ "type": "effect", "code": "# crushbus 51 (range 16 2.5 \"^54\")", "description": "Bitcrush on 90s synth ghost pads - 'Ghosts from an easier time'" }
]
}
]
}
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM breakbeat tempo" }, { "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM breakbeat tempo" },
{ "type": "technique", "code": "let scale = getScale (scaleTable ++ [(\"gameboy\", [1,2,4,5,7,9,11])])", "description": "Custom 'gameboy' scale definition for melodic content" }, { "type": "technique", "code": "let scale = getScale (scaleTable ++ [(\"gameboy\", [1,2,4,5,7,9,11])])", "description": "Custom 'gameboy' scale definition for melodic content" },
{ "type": "sample", "code": "$ loopAt 8 $ chop 64 $ \"bass_commodore:7\"", "description": "Commodore bass chopped into 64 slices granular bass texture" }, { "type": "sample", "code": "$ loopAt 8 $ chop 64 $ \"bass_commodore:7\"", "description": "Commodore bass chopped into 64 slices - granular bass texture" },
{ "type": "effect", "code": "# crushbus 41 # octersubbus 42 # lesliebus 43", "description": "Triple simultaneous bus effects on bass, all MIDI-controlled" }, { "type": "effect", "code": "# crushbus 41 # octersubbus 42 # lesliebus 43", "description": "Triple simultaneous bus effects on bass, all MIDI-controlled" },
{ "type": "sample", "code": "# \"harpsichord2\" # distortbus 51", "description": "Harpsichord lead using gameboy scale with MIDI distortion" } { "type": "sample", "code": "# \"harpsichord2\" # distortbus 51", "description": "Harpsichord lead using gameboy scale with MIDI distortion" }
] ]
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
{ "type": "technique", "code": "$ superimpose (|+| note \"~ 7(<3!3 5>,8)\")", "description": "Supersaw bassline with euclidean 5th-interval superimposition" }, { "type": "technique", "code": "$ superimpose (|+| note \"~ 7(<3!3 5>,8)\")", "description": "Supersaw bassline with euclidean 5th-interval superimposition" },
{ "type": "sample", "code": "$ \"forgan:24\" # crushbus 5", "description": "Massive organ sample with perlin-noise-driven bitcrush" }, { "type": "sample", "code": "$ \"forgan:24\" # crushbus 5", "description": "Massive organ sample with perlin-noise-driven bitcrush" },
{ "type": "technique", "code": "arp \"up\" \"<[c'maj'4 c'maj'3]!12 ...>\"", "description": "FM Rhodes arpeggios using chord inversions" }, { "type": "technique", "code": "arp \"up\" \"<[c'maj'4 c'maj'3]!12 ...>\"", "description": "FM Rhodes arpeggios using chord inversions" },
{ "type": "sample", "code": "$ \"movie_vitality:10\"", "description": "'I WANT TO GO TO MARS' movie sample with expanding window" } { "type": "sample", "code": "$ \"movie_vitality:10\"", "description": "'I WANT TO GO TO MARS' - movie sample with expanding window" }
] ]
}, },
{ {
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, cooler than Cafe Tiede" }, { "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, cooler than Cafe Tiede" },
{ "type": "sample", "code": "$ \"nujazz_bass120:4\"", "description": "Nu-jazz bass at 120 BPM with MIDI-controlled bitcrush" }, { "type": "sample", "code": "$ \"nujazz_bass120:4\"", "description": "Nu-jazz bass at 120 BPM with MIDI-controlled bitcrush" },
{ "type": "technique", "code": "$ midiOn \"^58\" ((# freeze 0.2))", "description": "Spectral freeze effect triggered by MIDI on keys" }, { "type": "technique", "code": "$ midiOn \"^58\" ((# freeze 0.2))", "description": "Spectral freeze effect triggered by MIDI on keys" },
{ "type": "sample", "code": "$ \"meth_bass\" # crush 8 # lpf (slow 32 $ range 4000 400 sine)", "description": "'UN GLITCH DANS MON CAFE!!?!' glitch bass with closing filter" }, { "type": "sample", "code": "$ \"meth_bass\" # crush 8 # lpf (slow 32 $ range 4000 400 sine)", "description": "'UN GLITCH DANS MON CAFE!!?!' - glitch bass with closing filter" },
{ "type": "technique", "code": "$ midiOn \"^55\" (loopAt 1 . (|> \"jungle_breaks:19\"))", "description": "MIDI-switchable jungle break layers with variable slice density" } { "type": "technique", "code": "$ midiOn \"^55\" (loopAt 1 . (|> \"jungle_breaks:19\"))", "description": "MIDI-switchable jungle break layers with variable slice density" }
] ]
}, },
...@@ -141,7 +141,7 @@ ...@@ -141,7 +141,7 @@
{ "type": "technique", "code": "juxBy 0.9 (mask ... . rev . (|+ note 12) . (|+ pan 0.2))", "description": "MIDI-triggered stereo mirror: reversed, octave-up, panned piano reflection" }, { "type": "technique", "code": "juxBy 0.9 (mask ... . rev . (|+ note 12) . (|+ pan 0.2))", "description": "MIDI-triggered stereo mirror: reversed, octave-up, panned piano reflection" },
{ "type": "sample", "code": "$ slice 4 ... $ \"nujazz_keys120\" # n \"<54!16 53!16>\"", "description": "Piano with 16-step slice choreography between two presets" }, { "type": "sample", "code": "$ slice 4 ... $ \"nujazz_keys120\" # n \"<54!16 53!16>\"", "description": "Piano with 16-step slice choreography between two presets" },
{ "type": "sample", "code": "note ... # \"bassWarsaw\" # octersub 0.5 # squizbus 42", "description": "Warsaw bass with sub-octave and MIDI-controlled squiz distortion" }, { "type": "sample", "code": "note ... # \"bassWarsaw\" # octersub 0.5 # squizbus 42", "description": "Warsaw bass with sub-octave and MIDI-controlled squiz distortion" },
{ "type": "technique", "code": "$ jux rev $ note ... # \"moogBass\" # chorus 0.2 # room 0.8", "description": "'La chorale du jugement' Moog bass with stereo call-and-response" } { "type": "technique", "code": "$ jux rev $ note ... # \"moogBass\" # chorus 0.2 # room 0.8", "description": "'La chorale du jugement' - Moog bass with stereo call-and-response" }
] ]
} }
] ]
......
{
"gig": "cookie-collective-compilation",
"title": "Cookie Collective Compilation Release Party",
"date": "2024-10-25",
"bpmRange": [93, 170],
"styleDistribution": { "dnb": 3, "nujazz": 2, "breaks": 1, "collab": 2, "lounge": 2 },
"samplePacks": [
{ "name": "jungle_breaks", "usage": "Breakbeats throughout the set" },
{ "name": "breaks165", "usage": "High-energy breaks in multiple tracks" },
{ "name": "bassWarsaw", "usage": "Primary bass synth" },
{ "name": "FMRhodes", "usage": "Electric piano in L'ACID d'abord, Fabuleux" },
{ "name": "vec1_acid/vec2_synth_acid", "usage": "Acid bass in L'ACID d'abord" },
{ "name": "nujazz_keys120/125", "usage": "Jazz piano in Cafe tracks" },
{ "name": "nujazz_beats120", "usage": "Jazz drum loops in Salut Nu" },
{ "name": "aoc_fr", "usage": "French vocal samples in Fabuleux" },
{ "name": "suns_keys/guitar/voice", "usage": "Leifur James samples in Blue Gold" }
],
"tracks": [
{
"name": "L'ACID d'abord",
"file": "live/collab/raph/acidule.tidal",
"bpm": 135,
"style": "acid",
"ingredients": [
{ "type": "pattern", "code": ">| note (\"[b d6 b cs6 d6 b cs6 b]*2\" - \"<0!32 12!32>\")", "description": "Acid bassline alternating between octaves every 32 cycles" },
{ "type": "sample", "code": "\"vec1_acid:40\" and \"vec2_synth_acid\"", "description": "Dual acid synth layers blended via MIDI crossfade" },
{ "type": "effect", "code": "# tremdp 4 # tremr 1.8", "description": "Tremolo on FMRhodes1 lead creating bouncy droplet texture" },
{ "type": "technique", "code": "stack [n \"<30!16 31!16>\" # \"vec2_synth_acid\", \"vec1_acid:40\", \"vec1_acid:39\"]", "description": "Triple-stacked acid bass with independent MIDI gain control per layer" },
{ "type": "structure", "code": "setcps (135/60/4)", "description": "135 BPM, rhadamanthe_vocal self-destruct sequence, moog caring bass on d7" }
]
},
{
"name": "Alerte Verte",
"file": "live/midi/nova/dnb/alerte_verte.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"fbass:25\"", "description": "Bass sample chopped into 16 with evolving slice patterns" },
{ "type": "pattern", "code": "\"~ s . ~ <~ ~ s ~ s!3 ~ s s ~ s s ~ s s ~ s s s>\"", "description": "20-cycle snare pattern with gradual acceleration" },
{ "type": "effect", "code": "# delay \"<0!12 0.3!3 0.8>\"", "description": "Dub-style delayed kick at phrase ends" },
{ "type": "technique", "code": "rhadamanthe_vocal:45 self-destruct sequence on d11", "description": "Vocal sample with timed destruction and movie samples" },
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM, supersiren + moog pads, fguitar A/B, rhadamanthe angel choir" }
]
},
{
"name": "Blue Gold",
"file": "live/collab/mousquetaires/blue_gold.tidal",
"bpm": 124,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"suns_keys\" # n \"<0 <1 2> 3 3>\"", "description": "Leifur James 'Suns of Gold' piano samples sliced and rearranged" },
{ "type": "pattern", "code": "fast (4/3) $ note (\"<[fs4 <a5!2 gs!4 fs5!4>@3]*4>\")", "description": "Triplet bassWarsaw line by Valentin creating polyrhythmic tension" },
{ "type": "effect", "code": "# octersubbus 71 (range 0 1.9 \"^35\")", "description": "Deep octaver burning the suns_guitar samples" },
{ "type": "technique", "code": "someCyclesBy \"<0!16 1!16>\" (slice 10 \"<5 5 <2 2 7 2> <7 4>>\")", "description": "Phase-switching vocal slice patterns on suns_voice" },
{ "type": "structure", "code": "setcps(124/60/4)", "description": "124 BPM, suns_guitar on d7+d11+d12, suns_voice on d9, Leifur James remix" }
]
},
{
"name": "Nuit Agitee",
"file": "live/midi/nova/breaks/nuit_agitee.tidal",
"bpm": 160,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"bass_commodore:7\"", "description": "Commodore bass stretched with extreme granular processing" },
{ "type": "pattern", "code": "note (scale \"gameboy\" (\"<1(3,8) [1(3,8), <~ [~!7 2]>]>\"))", "description": "Custom gameboy scale on harpsichord2" },
{ "type": "effect", "code": "# lesliebus 43 (range 0 2 \"^29\")", "description": "Leslie speaker on Commodore bass" },
{ "type": "technique", "code": "loopAt 8 $ chop 64", "description": "Extreme 64-chop granular on 8-cycle bass loop" },
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM, gameboy scale, jungbass arps, moogBass angels of constance" }
]
},
{
"name": "Nass Revient de Mars",
"file": "live/dnb/nass_revient.tidal",
"bpm": 140,
"style": "dnb",
"ingredients": [
{ "type": "pattern", "code": "note (\"<c c ds <c g>>\" + (arp \"up\" \"<[c'maj'4 c'maj'3]!12>\") - 24)", "description": "Rhodes arpeggios following minor progression with octave alternation" },
{ "type": "sample", "code": "\"supersaw\" # voice 0.1", "description": "Supersaw bass with voice detuning for massive sound" },
{ "type": "effect", "code": "# crushbus 6 (slow 16 $ range 16 4 saw)", "description": "Slow-ramping bitcrush on FMRhodes over 16 cycles" },
{ "type": "technique", "code": "midiOn \"^36\" ((loopAt 1) . (# hpf 1500) . (# \"jungle_breaks:45\"))", "description": "MIDI-triggered jungle break with high-pass creating bell-like texture" },
{ "type": "structure", "code": "setcps (140/60/4)", "description": "140 BPM, giorgio_syn bass friend, cosmicg glitch noise, forgan:24 organ, movie_vitality Mars vocals" }
]
},
{
"name": "Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Nu-jazz bass sample chopped and sliced" },
{ "type": "pattern", "code": "note (\"[g@2 ~!4 <f ~ as5 c6>]\" - 12)", "description": "Sparse FMRhodes1 lead" },
{ "type": "effect", "code": "# crushbus 71 (range 12 3.4 \"^55\")", "description": "Bitcrush on giorgio_syn" },
{ "type": "technique", "code": "midiOn \"^58\" (off 0.125 id . rev)", "description": "Reversed Rhodes with micro-offset" },
{ "type": "structure", "code": "setcps (125/60/4)", "description": "125 BPM, cbow cello, risers, jungle_vocals" }
]
},
{
"name": "Cafe Tiede",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys125\" # n \"<56 56 57 56 58!4 59 59 56 59>\"", "description": "Sampled jazz piano keys" },
{ "type": "pattern", "code": "midiOn \"^42\" (<| \"k k k <k <k*2 [k <k ~> k ~]>>\")", "description": "Evolving kick pattern" },
{ "type": "effect", "code": "# crushbus 41 (range 12 4.5 \"^53\")", "description": "Gentle bitcrush on bass" },
{ "type": "technique", "code": "chop 8 $ loopAt 2 $ \"nujazz_keys125\"", "description": "Jazz keys chopped for slicing" },
{ "type": "structure", "code": "setcps(125/60/4)", "description": "125 BPM, FMRhodes1 arpeggiated chords" }
]
},
{
"name": "Cafe Glace",
"file": "live/midi/nova/nujazz/cafe_glace.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys120\" # n (slow 4 \"<5 6 7 8>\")", "description": "Rotating piano voicings" },
{ "type": "pattern", "code": "midiOn \"^42\" (<| \"k k k <k!3 <[~ k*<1!3 2>]!3 k*2>>\")", "description": "Kick with occasional rolls" },
{ "type": "effect", "code": "# crushbus 51 (range 16 6.4 \"^54\")", "description": "Wide-range bitcrush on keys" },
{ "type": "technique", "code": "\"meth_bass\" $ loopAt 0.25", "description": "Glitchy meth_bass at 4x speed" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, double jungle_breaks" }
]
},
{
"name": "Salut Nu",
"file": "live/midi/nova/nujazz/salut_nu.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_beats120\"", "description": "Live jazz drum loops" },
{ "type": "pattern", "code": "note (\"<[a4@3 <c5 f5>] e5 [<d5!3 f5>] <a5!3 c6>>\")", "description": "moogBass melody with jux rev" },
{ "type": "effect", "code": "# freezebus 51 (range 0 0.7 \"^34\")", "description": "Freeze on piano" },
{ "type": "technique", "code": "juxBy 0.9 (mask . rev . (|+ note 12))", "description": "Complex jux reflection on piano" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, wahwah guitar, bassWarsaw with octer" }
]
},
{
"name": "Fabuleux",
"file": "live/midi/nova/lounge/fabuleux.tidal",
"bpm": 93,
"style": "lounge",
"ingredients": [
{ "type": "sample", "code": "\"aoc_fr\"", "description": "French vocal samples (Alexandria Ocasio-Cortez speeches in French) with octer modulation" },
{ "type": "pattern", "code": "note (\"[0,7(<3 5 [5 3] <3 [3 5]>>,8,1)]\" + \"<d b4 g4 fs4>\" - 24)", "description": "bassWarsaw with 5th-interval euclidean triggers (Bm-A-G-D progression)" },
{ "type": "effect", "code": "# modIndex (range 0 16 \"^54\")", "description": "FM modulation on FMRhodes2 creating evolving timbres" },
{ "type": "technique", "code": "someCyclesBy \"<0!8 1!8 0!16>\" (>| n \"<0 1 0 <4 6>>\")", "description": "Phase-cycling vocal sample selection creating narrative arc" },
{ "type": "structure", "code": "setcps (93/60/4)", "description": "93 BPM, feelfx submarine pad, moogBass choir, warm closer vibe" }
]
}
]
}
...@@ -4,7 +4,7 @@ date: "2024-06-09" ...@@ -4,7 +4,7 @@ date: "2024-06-09"
time: "20:00" time: "20:00"
location: "Paris, France" location: "Paris, France"
address: "Divin" address: "Divin"
description: "Livecoding rituel du Paradis perdu au Rite Final." description: "Livecoding rituel - du Paradis perdu au Rite Final."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "" video: ""
...@@ -24,4 +24,4 @@ tags: ["livecoding", "rituel", "paris"] ...@@ -24,4 +24,4 @@ tags: ["livecoding", "rituel", "paris"]
- Nuit : Atari-ght - Nuit : Atari-ght
- Bouquet : It's About Time - Bouquet : It's About Time
- Rite Final : Été à MauerPark - Rite Final : Été à MauerPark
- Bonus : Quart d'heure de politesse Invoque l'Été / Alerte Verte - Bonus : Quart d'heure de politesse - Invoque l'Été / Alerte Verte
{
"gig": "divin-live",
"title": "Divin Live",
"date": "2024-06-09",
"bpmRange": [80, 170],
"styleDistribution": { "breaks": 3, "dnb": 2, "ambient": 1, "chip": 1, "techno": 1, "lounge": 1, "lofi": 1 },
"samplePacks": [
{ "name": "jungle_breaks", "usage": "Foundation breakbeats in most tracks" },
{ "name": "FMRhodes", "usage": "Electric piano leads (Ete a MauerPark, Green Land)" },
{ "name": "bassWarsaw", "usage": "Primary bass synth across multiple tracks" },
{ "name": "bass_gameboy", "usage": "Chiptune bass in Nouveau Soleil" },
{ "name": "drums_atari", "usage": "Retro percussion in Atari-ght" },
{ "name": "come_bass", "usage": "Custom sample-based bass in Venons Ensemble" },
{ "name": "moogBass", "usage": "Analog-style bass in Ete a MauerPark and Invoque l'Ete" }
],
"tracks": [
{
"name": "Green Land",
"file": "live/midi/nova/breaks/green_land.tidal",
"bpm": 80,
"style": "breaks",
"ingredients": [
{ "type": "pattern", "code": "note (\"<[c,e,g,b] [c,e,g,bf] [c,ef,g,bf] [c,e,g,b]>\" - 12)", "description": "Jazz chord voicings on FMRhodes2 with FM modulation index control" },
{ "type": "sample", "code": "\"shiloh:2\"", "description": "Shiloh vocal sample with delay and reverb for atmosphere" },
{ "type": "effect", "code": "# delaybus 61 (range 0 1 \"^55\")", "description": "MIDI-controlled delay wet amount on vocal sample" },
{ "type": "technique", "code": "midiOn \"^74\" (fast 2)", "description": "MIDI button doubles kick speed for dynamic energy shifts" },
{ "type": "structure", "code": "setcps (165/60/4)", "description": "165 BPM half-time breaks, jungle_breaks:13 with loopAt variations" }
]
},
{
"name": "Break Dynasty",
"file": "live/midi/nova/breaks/break_dynasty.tidal",
"bpm": 165,
"style": "breaks",
"ingredients": [
{ "type": "pattern", "code": "\"<<b4 [b4@3 cs5]> gs4@2 ~ gs4>\" - 24", "description": "bassWarsaw riff with sustained notes and chromatic tension" },
{ "type": "sample", "code": "\"jungle_breaks:6\"", "description": "Chopped jungle break on d3 with loopAt 2 and ply variations" },
{ "type": "effect", "code": "# crushbus 51 (range 16 2 \"^53\")", "description": "Bitcrush on bass creating gritty texture" },
{ "type": "technique", "code": "midiOn \"^75\" (ply \"<2 [2 <4 <2 4>>]>\")", "description": "Multi-level ply for snare rolls controlled by MIDI" },
{ "type": "structure", "code": "setcps (165/60/4)", "description": "165 BPM, jungle_vocals on d10, FMRhodes2 with modIndex" }
]
},
{
"name": "Venons Ensemble",
"file": "live/midi/nova/dnb/venons_ensemble.tidal",
"bpm": 170,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"come_bass\"", "description": "Custom multi-sample bass with crush and octer modulation" },
{ "type": "pattern", "code": "\"~ cp ~ cp*<1!3 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2>\"", "description": "Extended snare pattern with accelerating fills across 20 cycles" },
{ "type": "effect", "code": "# crushbus 43 (range 16 3.5 \"^53\")", "description": "Bitcrush on come_bass creating distorted sub textures" },
{ "type": "technique", "code": "someCyclesBy (\"^35\" - \"^91\") (>| n \"<0 1 2 3 4 5 6 7>/2\")", "description": "MIDI-conditional voice sample buildup" },
{ "type": "structure", "code": "setcps (85/60/4)", "description": "170 BPM half-time, come_eguitar + come_voice samples, call-and-response" }
]
},
{
"name": "Nouveau Soleil",
"file": "live/midi/nova/dnb/nouveau_soleil.tidal",
"bpm": 110,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"bass_gameboy\"", "description": "Gameboy-era bass sample chopped and looped" },
{ "type": "pattern", "code": "note (\"<fs3 b4 a4 cs5 fs4 e4 d4 cs5 fs3 b4 a4 cs5 fs4 b5 a5 cs6>\")", "description": "16-step moogBass melody with superimposed 5th intervals" },
{ "type": "effect", "code": "# octerbus 72 (range 0 1 \"^35\")", "description": "MIDI-controlled octaver adding sub harmonics to moogBass" },
{ "type": "technique", "code": "whenmod 64 32 (off \"q\" ((|+ note 12) . (# pan 0.8)))", "description": "Long-form octave offset creating buildup over 64 cycles" },
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM, synth_gameboy lead + synth_atari horn, breaks165 with jungle_breaks" }
]
},
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 80,
"style": "ambient",
"ingredients": [
{ "type": "sample", "code": "\"celtic_guitar80\" # n \"4\"", "description": "Celtic guitar sample repurposed as bass" },
{ "type": "pattern", "code": "note \"<ef ef {b, [~!7 fs]} fs>\"", "description": "Moog bass with sparse set-theoretic note pattern" },
{ "type": "effect", "code": "# octerbus 52 (range 0 0.63 \"^36\")", "description": "MIDI-controlled octaver on moog bass" },
{ "type": "technique", "code": "chop 4 $ \"voices_celtic\" # n \"4 <4 4 5 <4 3>> 5 <6 5 5 4>\"", "description": "Celtic vocal sample chopped and sequenced" },
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM ambient piece with LPF automation over 64 cycles" }
]
},
{
"name": "Atari-ght",
"file": "live/chip/ataright.tidal",
"bpm": 120,
"style": "chip",
"ingredients": [
{ "type": "sample", "code": "\"drums_atari:21\"", "description": "Atari drum machine sample chopped at 32 subdivisions" },
{ "type": "pattern", "code": "note (arp \"down\" (\"<c'maj'4!2 <c'maj'4!3 ef'maj'4> g'min'4>\" |+| \"ef3\" - 12))", "description": "Arpeggiated chord progression on FMRhodes2 (THE RAIN)" },
{ "type": "effect", "code": "# modIndex (range 0 128 \"^53\")", "description": "Full-range FM modulation on Rhodes creating metallic timbres" },
{ "type": "technique", "code": "midiOn \"^58\" ((whenmod 8 7 (off \"s\" id)) .(off \"e\" id))", "description": "Multi-offset echo technique creating rhythmic canon (THE RAIN)" },
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM, thematic orbits named THE ROAD/FUEL/GUIDELINES/THUNDER/RAIN" }
]
},
{
"name": "It's About Time",
"file": "live/midi/nova/breaks/its_about_time.tidal",
"bpm": 110,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"drums_atari\" # n \"[29 29 <29 [29 28 29]> 28]\"", "description": "Atari drum machine samples driving the main beat" },
{ "type": "pattern", "code": "slice 8 (\"0 1 2 3 4 5 <6!3 4> <7!3 [5 4]>\") . (loopAt \"q\")", "description": "Nassim-triggered break slicer on breaks165" },
{ "type": "effect", "code": "# crushbus 51 (range 16 2.5 \"^54\")", "description": "Bitcrush on 90s_synatm pad synth" },
{ "type": "technique", "code": "midiOn \"^89\" ((0.125 ~>) . chop (slow 4 $ \"[16 32 64 128]\"))", "description": "Accelerating chop granularity for builds" },
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM, synth_commodore on d7 with squiz/crush, fx_gameboy riser" }
]
},
{
"name": "Ete a MauerPark",
"file": "live/midi/nova/techno/ete_a_mauerpark.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "pattern", "code": "note (\"<[g4 c ef@14] [<c g> ef g@14] <[g4 c ef@14] [c5 bf5 g5@14]> [c ef d@13 ~]>\" - 24)", "description": "Long sustained bass notes with brief melodic pickups (Basse Germanique)" },
{ "type": "sample", "code": "\"[techno:0,808bd:2,909,kick:4]\"", "description": "Four-layer kick stack for heavy four-on-the-floor" },
{ "type": "effect", "code": "# lesliebus 102 (range 0 2 \"^18\")", "description": "Leslie speaker effect on moogBass creating rotary modulation" },
{ "type": "technique", "code": "arp \"<up!6 down downup>\" $ note (\"<ef4 g4 <ef g> d>\" + \"c'maj'4\" - 12)", "description": "FMRhodes1 lead with evolving arpeggio direction" },
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM, cbow cello on d7, moogBass nano-angels chorus on d9" }
]
},
{
"name": "Invoque l'Ete",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\"", "description": "Latin clave rhythm on snare forming the rhythmic backbone" },
{ "type": "sample", "code": "\"fguitar:12\"", "description": "Sweet guitar sample with loopAt 4 and variable chopping" },
{ "type": "effect", "code": "# crushbus 61 (range 16 1.4 \"^54\")", "description": "Subtle bitcrush on guitar creating warm distortion" },
{ "type": "technique", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\" + \"0*<4 [4 16]>\" + 0)", "description": "Jazz progression (vi-V-iv-I) on moogBass and 90s_synatm synth" },
{ "type": "structure", "code": "setcps (115/60/4)", "description": "115 BPM, piano on fpiano:13, breaks125 + breaks165 layered" }
]
},
{
"name": "Alerte Verte",
"file": "live/midi/nova/dnb/alerte_verte.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"fbass:25\"", "description": "Bass sample chopped into 16 with evolving slice patterns" },
{ "type": "pattern", "code": "\"~ s . ~ <~ ~ s ~ s!3 ~ s s ~ s s ~ s s ~ s s s>\"", "description": "20-cycle snare pattern with gradual fill acceleration" },
{ "type": "effect", "code": "# delay \"<0!12 0.3!3 0.8>\" # delayfb \"<0!3 0.5>\"", "description": "Delayed kick creating dub-style echo at phrase ends" },
{ "type": "technique", "code": "rhadamanthe_vocal:45 with self-destruct sequence", "description": "Vocal sample with whenmod-triggered destruction sequence on d11" },
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM, supersiren + moog bass pads, fguitar A/B switching, 808 clave" }
]
}
]
}
{
"gig": "la-french-stack",
"title": "La French Stack",
"date": "2024-09-20",
"bpmRange": [90, 160],
"styleDistribution": {
"techno": 1,
"breaks": 2,
"nujazz": 3,
"lounge": 1,
"dnb": 2
},
"samplePacks": [
{ "name": "bassWarsaw", "usage": "primary bass synth in Salut Nu, Something about Drums" },
{ "name": "nujazz_keys120 / nujazz_keys125", "usage": "nu-jazz piano samples in Salut Nu, Café Tiède" },
{ "name": "nujazz_bass125 / nujazz_bass120", "usage": "sliced jazz upright bass in Café Tiède, Force Motrice" },
{ "name": "sunny_bass / sunny_brass / acidOto3092", "usage": "custom sunny pack + acid synth in Sunny Side Up" },
{ "name": "jungle_breaks / breaks165", "usage": "breakbeat core across 6+ tracks" },
{ "name": "FMRhodes1 / FMRhodes2", "usage": "FM Rhodes piano in Force Motrice, Permanence" },
{ "name": "giorgio_syn", "usage": "Moroder synth in Force Motrice and Bain Électrique" },
{ "name": "nujazz_wahwah125", "usage": "wah-wah guitar samples in Salut Nu" },
{ "name": "weird_dialogs", "usage": "sci-fi movie dialogs about electricity in Bain Électrique" },
{ "name": "suns_keys / suns_guitar / suns_voice", "usage": "Leifur James-inspired samples in L'Or Bleu" }
],
"tracks": [
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM atmospheric techno opener" },
{ "type": "pattern", "code": "note (scale \"aeolian\" \"<0!3 [0@6 <4 -1>@2]> 2\") # \"90s_synatm:18\"", "description": "Aeolian high lead: sparse questioning melody - 'Winds of truth'" },
{ "type": "sample", "code": "\"90s_synatm:8\" / \"90s_synatm:14\"", "description": "Dual 90s synth: aerial questions and electronic answers" },
{ "type": "technique", "code": "juxBy 0.5 ((# cut 61) . rev)", "description": "Juxtaposed reversal at 50% stereo width on lead" },
{ "type": "effect", "code": "# delayfb 0.25 # delayt 0.25 # delay 0.8", "description": "Quarter-note delay with moderate feedback on answer synth" }
]
},
{
"name": "Bain Électrique",
"file": "live/midi/nova/breaks/bain_electrique.tidal",
"bpm": 128,
"style": "breaks",
"ingredients": [
{ "type": "structure", "code": "setcps (128/60/4)", "description": "128 BPM electro breaks - 'ex Bain Bouillant'" },
{ "type": "pattern", "code": "note \"<fs3 [fs3@7 b3] [fs3@7 g3] ...>\" # \"giorgio_syn:0\"", "description": "Long-form Giorgio bass: 8-bar phrase with chromatic F#-B-G-D movement" },
{ "type": "sample", "code": "\"weird_dialogs\"", "description": "30+ sci-fi dialog samples about atomic energy, electricity, faith - sequenced as narrative" },
{ "type": "technique", "code": "slice 16 \"0*[4 <4 4 1 ...>]\" $ chop 16 $ loopAt 2 $ \"fguitar:55\"", "description": "Guitar granularly sliced with evolving rhythmic density" },
{ "type": "effect", "code": "# octersubbus 5 (range 0 1 \"^29\") . (# octerbus 6 (range 0 0.52 \"^29\"))", "description": "Global octave bus on single MIDI knob - transforms everything" }
]
},
{
"name": "Salut Nu",
"file": "live/midi/nova/nujazz/salut_nu.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM nu-jazz with 3-layer mute system" },
{ "type": "pattern", "code": "note (\"<[a4@4 c5 <c5 d5 c5 fs4>] a4>\" + \"[0,12]\" - 36) # \"bassWarsaw\"", "description": "Warsaw bass with octave doubling, Am melody with chromatic F#4 surprise" },
{ "type": "sample", "code": "\"nujazz_keys120\" / \"nujazz_wahwah125\" / \"nujazz_beats120\"", "description": "Nu-jazz keys, wah-wah guitar, and live jazz beats - all sliced" },
{ "type": "technique", "code": "midiOn \"^58\" (juxBy 0.9 (mask ... . (# begin 0.5) . rev . (|+ note 12)))", "description": "Piano reflected: juxtaposed reversed copy from halfway, octave up" },
{ "type": "effect", "code": "# freezebus 51 (range 0 0.7 \"^34\")", "description": "MIDI-controlled spectral freeze on piano samples" }
]
},
{
"name": "Café Tiède",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(125/60/4)", "description": "125 BPM nu-jazz - lukewarm café tempo" },
{ "type": "pattern", "code": "$ \"nujazz_bass125:1\" # crushbus 41 (range 12 4.5 \"^53\")", "description": "Sliced jazz upright bass with MIDI-controlled bitcrush" },
{ "type": "sample", "code": "\"nujazz_keys125\" / \"jungle_breaks:20\"", "description": "125BPM jazz piano + jungle breaks for rhythmic backbone" },
{ "type": "technique", "code": "note (\"<c5 g4 <ef4!2 bf4!2> <c4 f4>>\" + \"0(3,8) 0(3,8)\") # \"FMRhodes1\"", "description": "FM Rhodes with Euclidean note repetition on Cm-G-Eb-Bb-C-F progression" },
{ "type": "effect", "code": "# octerbus 71 (range 0 0.5 \"^55\")", "description": "Subtle octave doubling on secondary piano layer" }
]
},
{
"name": "Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (125/60/4)", "description": "125 BPM DnB - 'Atelier de force motrice'" },
{ "type": "pattern", "code": "note (\"[g@2 ~!4 <f ~ as5 c6>]\" - 12) # \"FMRhodes1\"", "description": "Sparse FM Rhodes: G sustain then chromatic surprise (F, As, C6)" },
{ "type": "sample", "code": "\"nujazz_bass125:1\" / \"giorgio_syn:22\" / \"cbow:2\"", "description": "Jazz bass, Giorgio synth, and cello bowed for triple melodic texture" },
{ "type": "technique", "code": "midiOff \"^89\" (slice 4 \"1 2*<1 2> 3*<1 4> 4\")", "description": "Bass slice pattern that doubles and quadruples density per bar" },
{ "type": "effect", "code": "# crushbus 71 (range 12 3.4 \"^55\")", "description": "Bitcrush on Giorgio synth Euclidean pad" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM upbeat sunny lounge" },
{ "type": "sample", "code": "\"sunny_bass\" / \"sunny_brass\"", "description": "Custom sunny pack: bass stays on root 4 bars, brass deploys via mask" },
{ "type": "technique", "code": "arp \"up\" $ note (\"0(3,8) 0(<3!3 5>,8)\" + \"f gs c g\" + 12) # \"acidOto3092\"", "description": "Arpeggiated acid synth on F-Ab-C-G with dual Euclidean rhythm" },
{ "type": "pattern", "code": "n \"<0 0 0 0 1 1 1 <0 1 2 <2!3 [2 2 3 2]>>>\" # \"sunny_bass\"", "description": "Patient bass: 4 bars on root then slow harmonic evolution" },
{ "type": "effect", "code": "# octersubbus 42 (range 0 2.5 \"^33\") # octersubsubbus 43 ...", "description": "Dual sub-octave on same knob for massive low end" }
]
},
{
"name": "Something about Drums",
"file": "live/midi/nova/dnb/something_about_drums.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM fast DnB with jazz chord voicings" },
{ "type": "pattern", "code": "note (cat [\"[bf3, d4, f4, a4]\", \"[a3, c4, e4, g4]\", ...] - 12) # \"bassWarsaw\"", "description": "Bbmaj7-Am7-Dm9-G7 jazz chord progression on Warsaw bass at half speed" },
{ "type": "sample", "code": "\"drumtraks:9\" / \"drum:2\" / \"jungle_breaks\"", "description": "DrumTraks snare, drum rolls, and jungle breaks for rhythmic variety" },
{ "type": "technique", "code": "note (... \"[bf3, d4, f4, a4]\" ...) # \"FMRhodes2\" |+ note 2", "description": "FM Rhodes2 with +2 semitone adjustment to C, modIndex MIDI-controlled" },
{ "type": "effect", "code": "# delay 0.7 # delayt 0.125 # delayfb 0.5", "description": "Eighth-note delay with 50% feedback on moogBass pad" }
]
},
{
"name": "Permanence",
"file": "live/collab/raph/permanence.tidal",
"bpm": 150,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (150/60/4)", "description": "150 BPM - DnB collab with Raph" },
{ "type": "pattern", "code": "note (\"<c4 ef4 <bf3 <g3 g4>> <af3 f4 af3 af4>>\") # \"moogBass\"", "description": "Dark chromatic moogBass: C-Eb-Bb/G-Ab/F with octave jumps" },
{ "type": "sample", "code": "\"bass_nes:1\" / \"fguitar:40\" / \"fsynth\"", "description": "NES bass, distorted guitar slices, and synth pads" },
{ "type": "technique", "code": "note (\"0@3 0 . <gs4 f4 ef4 d4>\" + \"<g4!3 f4>\" + \"[0,12]\") # \"superfork\"", "description": "Superfork melody: sustained G then chromatic descent with octave doubling" },
{ "type": "effect", "code": "# crushbus 51 (range 16 2.5 \"^54\") # distortbus 52 (range 0 1.5 \"^34\")", "description": "Guitar dual destruction: bitcrush + distortion on separate MIDI knobs" }
]
},
{
"name": "L'Or Bleu",
"file": "live/midi/nova/lounge/suns_of_gold.tidal",
"bpm": 94,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps (94/60/4)", "description": "94 BPM downtempo - Leifur James-inspired golden hour" },
{ "type": "sample", "code": "\"suns_keys\" / \"suns_guitar\" / \"suns_voice\"", "description": "3-part original sample pack: keys, guitar, and voice" },
{ "type": "technique", "code": "loopAt 8 $ chop 16 $ \"suns_keys\"", "description": "8-cycle piano loop chopped into 16 grains with Leslie modulation" },
{ "type": "pattern", "code": "note (\"[b,fs6]@1.5 [a,e6]@1.5 ...\" - 24) # \"bassWarsaw\"", "description": "Weighted timing bass (1.5+1.5+3) with Euclidean sub-patterns" },
{ "type": "effect", "code": "# lesliebus 42 (range 0 1 \"^33\") # lrate 0.92 # lsize 1.9", "description": "MIDI Leslie speaker on piano: rotary warmth" }
]
}
]
}
{
"gig": "toi-toi-mon-toit",
"title": "Live @ Toi Toi Mon Toit",
"date": "2024-05-10",
"bpmRange": [80, 165],
"styleDistribution": {
"lofi": 1,
"dnb": 2,
"hip-hop": 1,
"breakbeat": 1
},
"samplePacks": [
{ "name": "FMRhodes2", "usage": "FM piano in Premiere Grillade with lo-fi chord progression" },
{ "name": "bassWarsaw", "usage": "primary bass synth in Premiere Grillade, Break Dynasty, Nouveau Soleil" },
{ "name": "jungle_breaks", "usage": "jungle breakbeats in Break Dynasty, Nouveau Soleil, It's About Time" },
{ "name": "shiloh", "usage": "lo-fi vocal samples in Premiere Grillade and Break Dynasty" },
{ "name": "90s_matrix/bass1", "usage": "sub bass layers in Clameur" },
{ "name": "voices_celtic/voices_persian", "usage": "vocal textures in Clameur (Morohai/Wooh)" },
{ "name": "moogBass/superpiano", "usage": "pad and piano in Clameur lead section" },
{ "name": "bass_gameboy/synth_gameboy/synth_atari", "usage": "retro console sounds in Nouveau Soleil" },
{ "name": "808bd/808hc", "usage": "808 kick and hi-hat in It's About Time" },
{ "name": "FMRhodes1", "usage": "bird-call melody in It's About Time" }
],
"tracks": [
{
"name": "Premiere Grillade",
"file": "live/midi/nova/lofi/premiere_grillade.tidal",
"bpm": 80,
"style": "lofi",
"ingredients": [
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM lo-fi opener with Yamaha RM50 drum machine and jazz harmony" },
{ "type": "technique", "code": "let prog = \"<[c,e,g,b] [c,e,g,bf] [c,ef,g,bf] [c,e,g,b]>\"", "description": "CMaj7-C7-CMin7-CMaj7 cycle on FMRhodes2 - classic jazz voicing" },
{ "type": "sample", "code": "$ \"shiloh:1\" # lpf 5000 # room 0.4 # dry 2", "description": "Shiloh vocal chop with lo-fi filter and saturated dry mix" },
{ "type": "technique", "code": "note (\"<[c,c(3,8)] [g,[~ f6],g*4] [bf,bf(3,8)] c4>\" - 24) # \"bassWarsaw\"", "description": "Euclidean-patterned bass with chord-tone rhythm" },
{ "type": "effect", "code": "# crushbus 51 (range 16 2 \"^53\")", "description": "Subtle bitcrush for lo-fi warmth" }
]
},
{
"name": "Break Dynasty",
"file": "live/midi/nova/breaks/break_dynasty.tidal",
"bpm": 165,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (165/60/4)", "description": "165 BPM DnB with jungle breaks and lo-fi vocal chops" },
{ "type": "sample", "code": "$ loopAt 2 $ chop 16 $ \"jungle_breaks:6\"", "description": "Chopped jungle break loop as the core high-energy drum pattern" },
{ "type": "technique", "code": "note (\"<<b4 [b4@3 cs5]> gs4@2 ~ gs4>\" - 24) # \"bassWarsaw\"", "description": "Warsaw bass with chromatic tension and dramatic rests" },
{ "type": "sample", "code": "$ slow 2 $ slice 16 \"~ <0 1 1 0 0 2 0 2 ...>\" $ \"shiloh:2\"", "description": "Half-time Shiloh vocal chops with evolving slice selection" },
{ "type": "effect", "code": "# delaybus 61 (range 0 1 \"^55\") # delayfb 0.5 # delaytime 0.375", "description": "MIDI-controlled delay on vocal for dub echo trails" }
]
},
{
"name": "Clameur",
"file": "live/hip/darkside/clameur.tidal",
"bpm": 93,
"style": "hip-hop",
"ingredients": [
{ "type": "structure", "code": "setcps (93/60/4)", "description": "93 BPM dark hip-hop - 'Clameur pour Clement' - dedicated piece" },
{ "type": "technique", "code": "fix (...(# \"90s_matrix:0\") . (# note (scale \"aeolian\" (slow 2 \"<0 0 2 3>\")))) \"matrix\"", "description": "Fix-based dual bass: matrix synth + bass1 infra sub in parallel via fix routing" },
{ "type": "sample", "code": "$ stack [\"~ <~!3 wooh>\", \"<morohai ~>\"] with voices_celtic:32 and voices_persian:10", "description": "Celtic and Persian vocal layers stacked: Morohai chant + Wooh exclamation" },
{ "type": "technique", "code": "(# \"superpiano\") . whenmod 64 16 (whenmod 4 3 (arp \"up\" . ply \"1!3 2\"))", "description": "Piano with conditional arp: only in the last quarter of 64-cycle phrases" },
{ "type": "effect", "code": "# squizbus 61 (range 0 4 \"^55\")", "description": "MIDI squiz on celtic voices for controlled vocal degradation" }
]
},
{
"name": "Nouveau Soleil",
"file": "live/midi/nova/dnb/nouveau_soleil.tidal",
"bpm": 110,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM mid-tempo DnB with retro console sounds" },
{ "type": "sample", "code": "$ \"bass_gameboy\" with midiOn \"^57\" (# \"bass_gameboy:5\")", "description": "Game Boy bass with MIDI-triggered preset switching" },
{ "type": "technique", "code": "$ whenmod 64 32 (off \"q\" ((|+ note 12) . (# pan 0.8)))", "description": "Progressive octave offsets at nested cycle depths for gradual buildup" },
{ "type": "sample", "code": "$ slice 8 \"<0 0 1 <[1 1] [2 <~ 2> 3 <~ 3>]>>\" $ \"synth_atari:5\"", "description": "Atari synth lead with expanding slice exploration" },
{ "type": "effect", "code": "# roombus 71 (range 0.3 1.2 \"^55\") # dry 1.8 # sz 0.7", "description": "MIDI reverb on moog melody with dry emphasis for presence" }
]
},
{
"name": "It's About Time",
"file": "live/midi/nova/breaks/its_about_time.tidal",
"bpm": 110,
"style": "breakbeat",
"ingredients": [
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM breakbeat closer with long-form masks for gradual layer revelation" },
{ "type": "technique", "code": "$ mask \"<[[t <f!4 t!4>] <f!8 t!8>]!8 t!24 t!96>\"", "description": "Multi-level mask: FMRhodes bird-call emerges after 8 cycles of silence" },
{ "type": "sample", "code": "$ \"[808bd:4,kick:4]\"", "description": "Dual-layer kick combining 808 sub with acoustic punch" },
{ "type": "sample", "code": "note (\"<c!4 ef!2 f g>\") # \"808hc:2\" # octersubbus 72 (range 0 1.4 \"^55\")", "description": "808 hi-hat carillon with chromatic melody and MIDI sub-octave" },
{ "type": "effect", "code": "# delaybus 51 (range 0 0.8 \"^34\") # delayt \"<h>\" # delayfb 0.25", "description": "MIDI-controlled delay on Rhodes for growing spatial depth over time" }
]
}
]
}
\ No newline at end of file
...@@ -4,7 +4,7 @@ date: "2024-02-24" ...@@ -4,7 +4,7 @@ date: "2024-02-24"
time: "09:45" time: "09:45"
location: "Grand Paris, France" location: "Grand Paris, France"
address: "TOPLAP Stream" address: "TOPLAP Stream"
description: "20 years of TOPLAP 20 breaks, 4 beats. Cookie Collective celebration." description: "20 years of TOPLAP - 20 breaks, 4 beats. Cookie Collective celebration."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "https://archive.org/details/toplap20-parvagues---z0rg" video: "https://archive.org/details/toplap20-parvagues---z0rg"
...@@ -15,7 +15,7 @@ tags: ["livecoding", "toplap", "cookie-collective", "collab"] ...@@ -15,7 +15,7 @@ tags: ["livecoding", "toplap", "cookie-collective", "collab"]
# TOPLAP 20 Years # TOPLAP 20 Years
20 breaks, 4 beats celebrating 20 years of creativity with z0rg. 20 breaks, 4 beats - celebrating 20 years of creativity with z0rg.
Cookie Collective performance. Cookie Collective performance.
......
{
"gig": "toplap-20-years",
"title": "TOPLAP 20 Years (w/ z0rg)",
"date": "2024-02-24",
"bpmRange": [120, 160],
"styleDistribution": { "nujazz": 2, "dnb": 1, "breaks": 1, "techno": 1 },
"samplePacks": [
{ "name": "nujazz_keys125", "usage": "Sampled jazz piano in Cafe Tiede" },
{ "name": "nujazz_bass125", "usage": "Jazz bass sample in Cafe Tiede and Force Motrice" },
{ "name": "jungle_breaks", "usage": "Breakbeats in most tracks" },
{ "name": "bass_commodore", "usage": "Commodore bass in Nuit Agitee" },
{ "name": "bass_nes", "usage": "NES bass in Permanence" },
{ "name": "FMRhodes", "usage": "Electric piano in Force Motrice and Cafe Tiede" }
],
"tracks": [
{
"name": "Cafe Tiede",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys125\" # n \"<56 56 57 56 58!4 59 59 56 59>\"", "description": "Sampled nu-jazz piano keys driving the harmony" },
{ "type": "pattern", "code": "midiOn \"^42\" (<| \"k k k <k <k*2 [k <k ~> k ~]>>\")", "description": "Kick with evolving 4th-beat variation" },
{ "type": "effect", "code": "# crushbus 41 (range 12 4.5 \"^53\")", "description": "Gentle bitcrush on nujazz bass sample" },
{ "type": "technique", "code": "chop 8 $ loopAt 2 $ \"nujazz_keys125\"", "description": "Live-recorded jazz keys chopped for real-time slicing" },
{ "type": "structure", "code": "setcps(125/60/4)", "description": "125 BPM, FMRhodes1 arpeggiated chords, h2ogmcp clap" }
]
},
{
"name": "Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Nu-jazz bass sample chopped and sliced" },
{ "type": "pattern", "code": "note (\"[g@2 ~!4 <f ~ as5 c6>]\" - 12)", "description": "FMRhodes1 lead with sparse intervals" },
{ "type": "effect", "code": "# crushbus 71 (range 12 3.4 \"^55\")", "description": "Bitcrush on giorgio_syn synth" },
{ "type": "technique", "code": "midiOn \"^58\" (off 0.125 id . rev)", "description": "Reversed Rhodes with micro-offset echo-before-attack" },
{ "type": "structure", "code": "setcps (125/60/4)", "description": "125 BPM, cbow cello on d11, risers on d10, jungle_vocals on d9" }
]
},
{
"name": "Cafe Glace",
"file": "live/midi/nova/nujazz/cafe_glace.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys120\" # n (slow 4 \"<5 6 7 8>\")", "description": "Piano samples rotating through 4 voicings" },
{ "type": "pattern", "code": "midiOn \"^57\" (mask \"t(4,8)\")", "description": "Euclidean bass mask on nujazz_bass120:4" },
{ "type": "effect", "code": "# crushbus 51 (range 16 6.4 \"^54\")", "description": "Wide-range bitcrush on keys" },
{ "type": "technique", "code": "\"meth_bass\" # n \"<10!3 [<10 11> 11] 9!24>\" $ loopAt 0.25", "description": "Glitchy meth_bass at 4x speed for rhythmic noise" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM, double jungle_breaks on d7+d8" }
]
},
{
"name": "Nuit Agitee",
"file": "live/midi/nova/breaks/nuit_agitee.tidal",
"bpm": 160,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"bass_commodore:7\"", "description": "Commodore bass stretched over 8 cycles with granular processing" },
{ "type": "pattern", "code": "note (scale \"gameboy\" (\"<1(3,8) [1(3,8), <~ [~!7 2]>] 0(3,8) <0!3 -2>(3,8)>\"))", "description": "Custom gameboy scale on harpsichord2" },
{ "type": "effect", "code": "# lesliebus 43 (range 0 2 \"^29\")", "description": "Leslie speaker on Commodore bass" },
{ "type": "technique", "code": "loopAt 8 $ chop 64 $ \"bass_commodore:7\"", "description": "Extreme granular: 64 chops over 8-cycle loop" },
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM, gameboy scale, amencutup hats, moogBass angels" }
]
},
{
"name": "Permanence",
"file": "live/collab/raph/permanence.tidal",
"bpm": 150,
"style": "techno",
"ingredients": [
{ "type": "pattern", "code": "chop 4 $ loopAt 4 $ \"bass_nes:1\"", "description": "NES bass sample chopped with freeze and squiz effects" },
{ "type": "sample", "code": "\"fguitar:40\"", "description": "Guitar with distort and crush for industrial texture" },
{ "type": "effect", "code": "# distortbus 52 (range 0 1.5 \"^34\")", "description": "MIDI-controlled distortion on guitar" },
{ "type": "technique", "code": "note (\"<c4 ef4 <bf3 <g3 g4>> <af3 f4 af3 af4>>\") # \"moogBass\"", "description": "Chromatic minor progression on moogBass pad" },
{ "type": "structure", "code": "setcps (150/60/4)", "description": "150 BPM, superfork lead with delay, fsynth with octer/crush" }
]
}
]
}
...@@ -4,7 +4,7 @@ date: "2024-12-21" ...@@ -4,7 +4,7 @@ date: "2024-12-21"
time: "20:30" time: "20:30"
location: "Les Carroz d'Arâches, France" location: "Les Carroz d'Arâches, France"
address: "TOPLAP Stream (from the Alps)" address: "TOPLAP Stream (from the Alps)"
description: "Breakbeat to techno and more ALL I WANT FOR CHRISTMAS IS LIVECODE. Cookie Collective." description: "Breakbeat to techno and more - ALL I WANT FOR CHRISTMAS IS LIVECODE. Cookie Collective."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "https://archive.org/details/toplap-solstice-dec2024-parvagues-" video: "https://archive.org/details/toplap-solstice-dec2024-parvagues-"
...@@ -17,6 +17,6 @@ tags: ["livecoding", "toplap", "solstice", "cookie-collective", "alps"] ...@@ -17,6 +17,6 @@ tags: ["livecoding", "toplap", "solstice", "cookie-collective", "alps"]
ALL I WANT FOR CHRISTMAS IS LIVECODE ALL I WANT FOR CHRISTMAS IS LIVECODE
Breakbeat to techno and more performed live from the Alps, Les Carroz d'Arâches. Breakbeat to techno and more - performed live from the Alps, Les Carroz d'Arâches.
A Cookie Collective performance. A Cookie Collective performance.
{
"gig": "velociteuf",
"title": "VelociTeuf",
"date": "2024-07-05",
"bpmRange": [80, 134],
"styleDistribution": { "ambient": 2, "breaks": 2, "lofi": 2, "techno": 1, "dnb": 1, "collab": 1 },
"samplePacks": [
{ "name": "jungle_breaks", "usage": "Chopped breakbeats across multiple tracks" },
{ "name": "FMRhodes", "usage": "Electric piano leads and pads" },
{ "name": "bassWarsaw", "usage": "Signature bass synth" },
{ "name": "90s_matrix", "usage": "Bass and atmosphere in Oct4 Glitch Sauvages" },
{ "name": "drums_atari", "usage": "Retro drum machine in It's About Time" },
{ "name": "celtic_guitar80", "usage": "Sampled guitar turned bassline in Contre Visite" },
{ "name": "shiloh", "usage": "Lofi vocal chops in Premiere Grillade" }
],
"tracks": [
{
"name": "Prestance",
"file": "live/midi/nova/ambient/prestance.tidal",
"bpm": 134,
"style": "ambient",
"ingredients": [
{ "type": "pattern", "code": "\"<[~ d5 d4 e4 g4 a4 b4 d4] [e4 g4 a4 b4 <e4 g4>@4]>\"", "description": "Melodic sequence ('praxis') reused across multiple synth voices with transposition and reversal" },
{ "type": "sample", "code": "\"[jazz,808bd:3]\"", "description": "Layered kick combining jazz kit with 808 sub" },
{ "type": "effect", "code": "# crushbus 41 (range 16 2.5 \"^53\")", "description": "MIDI-controlled bitcrush on FMRhodes chord pad" },
{ "type": "technique", "code": "juxBy 0.3 (mask \"t(3,8) . t(12,16)\" . (|+ note 12))", "description": "Stereo jux with euclidean masking and octave shift on moogBass" },
{ "type": "structure", "code": "setcps (134/60/4)", "description": "134 BPM, 10 orbits: drums/bass/synths layered via MIDI mute groups" }
]
},
{
"name": "Oct4 Glitch Sauvages",
"file": "live/midi/nova/beatober/oct_glitchs_sauvages.tidal",
"bpm": 117,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"90s_matrix:0\"", "description": "90s matrix bass with tremolo and comb filter modulation" },
{ "type": "pattern", "code": "note \"f@2 f <gs!2 gf!2>@2 <gs!2 g!2> <g!2 gs <gs gs5>>@2\" - 12", "description": "Acid-style chromatic bassline on 90s_matrix:4" },
{ "type": "effect", "code": "# tremoloratebus 41 (range 0 (slow 4 \"<2 4 8 16>\") \"^53\")", "description": "Escalating tremolo rate controlled by MIDI fader" },
{ "type": "technique", "code": "superimpose ((# cut 51) . superimpose ((# cut 52) . (|+ note 12)))", "description": "Triple-stacked superimpose creating layered octave echoes" },
{ "type": "structure", "code": "setcps (117/60/4)", "description": "117 BPM with risers on d10 for buildups, superfork synth pads" }
]
},
{
"name": "About Time",
"file": "live/midi/nova/breaks/its_about_time.tidal",
"bpm": 110,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"drums_atari\" # n \"[29 29 <29 [29 28 29]> 28]\"", "description": "Atari-era drum machine samples chopped into main rhythm" },
{ "type": "pattern", "code": "slice 8 (\"0 1 2 3 4 5 <6!3 4> <7!3 [5 4]>\") . (loopAt \"q\") . (# \"breaks165\")", "description": "Nassim-triggered break slicer with variable speed" },
{ "type": "effect", "code": "# crushbus 41 (range 10 2.5 \"^53\")", "description": "MIDI-controlled bitcrush on the 90s_synatm bass" },
{ "type": "technique", "code": "midiOn \"^89\" ((0.125 ~>) . chop (slow 4 $ \"[16 32 64 128]\"))", "description": "Accelerating chop granularity for build-up tension" },
{ "type": "structure", "code": "setcps (110/60/4)", "description": "110 BPM, Commodore synth bus on d7 with squiz/crush, ASCII art intro" }
]
},
{
"name": "Toxic",
"file": "live/boeuf/algorythm/fdlm2022/toxic.tidal",
"bpm": 140,
"style": "techno",
"ingredients": [
{ "type": "pattern", "code": "note (\"0*8\" + \"<b3 b3 d3 [cs3 bs2]>\")", "description": "Rapid 8-note bassWarsaw riff with chromatic movement" },
{ "type": "sample", "code": "\"[ifdrums,kick]\"", "description": "Layered industrial kick with interface drums" },
{ "type": "effect", "code": "# crushbus 71 (range 16 1.5 \"^53\")", "description": "Heavy bitcrush on the Warsaw bass synth" },
{ "type": "technique", "code": "note (\"fs7@4 cs7@4 d7@4 b7@4\" + \"[0,12]\" - 24)", "description": "High-register FMRhodes theme with octave doubling (Toxic melody cue)" },
{ "type": "structure", "code": "setcps (140/60/4)", "description": "140 BPM, tight 5-orbit arrangement: kick/snare/hats/bass/rhodes" }
]
},
{
"name": "Venons Ensemble",
"file": "live/midi/nova/dnb/venons_ensemble.tidal",
"bpm": 170,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"come_bass\"", "description": "Custom multi-sample bass with crush and octer modulation" },
{ "type": "pattern", "code": "\"~ cp ~ cp*<1!3 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2>\"", "description": "Extended snare pattern with accelerating fills across 20 cycles" },
{ "type": "effect", "code": "# crushbus 71 (range 16 \"<5 10>\" \"^55\")", "description": "Variable bitcrush on come_voice vocal samples" },
{ "type": "technique", "code": "someCyclesBy (\"^35\" - \"^91\") (>| n \"<0 1 2 3 4 5 6 7>/2\")", "description": "MIDI-conditional voice sample buildup using probability" },
{ "type": "structure", "code": "setcps (85/60/4)", "description": "170 BPM (85 cps in half-time), electric guitar + voice samples, call-and-response structure" }
]
},
{
"name": "Reboot",
"file": "live/midi/nova/lofi/reboot.tidal",
"bpm": 80,
"style": "lofi",
"ingredients": [
{ "type": "pattern", "code": "slice 4 \"<0 0 [0 1] 3 0*2 [0 1] [3 2] [3*2 3*<2 4>]>\"", "description": "Evolving bass slice pattern on fbass:8 with gradual complexity increase" },
{ "type": "sample", "code": "\"[reverbkick,jazz]\"", "description": "Reverb kick layered with jazz kit for warm low end" },
{ "type": "effect", "code": "# crushbus 51 (range 8 1.9 \"^54\")", "description": "Aggressive bitcrush on climbing guitar sample" },
{ "type": "technique", "code": "whenmod 64 32 (superimpose (slice 4 \"0*<1 2 1 <2 4>>\" . (# cut 51) . (|+ note 12)))", "description": "Long-form superimpose on guitar: octave-shifted slice after 32 cycles" },
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM, supersiren synth with crushbus, break-based structure with whenBrk bridges" }
]
},
{
"name": "Premiere Grillade",
"file": "live/midi/nova/lofi/premiere_grillade.tidal",
"bpm": 80,
"style": "lofi",
"ingredients": [
{ "type": "pattern", "code": "note (\"<[c,e,g,b] [c,e,g,bf] [c,ef,g,bf] [c,e,g,b]>\" - 12)", "description": "Jazz chord progression (Cmaj7-C7-Cm7-Cmaj7) on FMRhodes2" },
{ "type": "sample", "code": "\"shiloh:1\"", "description": "Shiloh vocal sample sliced and delayed for lofi atmosphere" },
{ "type": "effect", "code": "# modIndex (range 0 16 \"^54\")", "description": "MIDI-controlled FM modulation index on Rhodes piano" },
{ "type": "technique", "code": "drumFrom \"yamaharm50\" \"hh*<8!3 [8 . 16 <8 16 [24 8] 32>]>\"", "description": "Yamaha RM50 hi-hat pattern with accelerating fills" },
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM, 808 kick + jungle breaks, bassWarsaw with crush, lofi Rhodes chords" }
]
},
{
"name": "Rainy Day",
"file": "live/collab/josh/oct_18_rainy_day.tidal",
"bpm": 114,
"style": "breaks",
"ingredients": [
{ "type": "pattern", "code": "note (\"<[c@2 e@2 d@1 b4@3]!2 [c@2 a4@2 d@1 b4@3]!2>\" - 3)", "description": "Melodic superfork lead with sustained notes and chromatic descents" },
{ "type": "sample", "code": "\"trance_pads:7\"", "description": "Trance pad with stereo offset for atmospheric depth" },
{ "type": "effect", "code": "# crushbus 51 (range 16 4.5 \"^54\")", "description": "Gentle bitcrush on superfork lead" },
{ "type": "technique", "code": "off 0.25 ((# pan 0.8) . (# cut 91))", "description": "Stereo offset on pad creates wide spatial field" },
{ "type": "structure", "code": "setcps (114/60/4)", "description": "114 BPM, collab with Josh, bass on bassWarsaw with euclidean rhythms" }
]
},
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 80,
"style": "ambient",
"ingredients": [
{ "type": "sample", "code": "\"celtic_guitar80\" # n \"4\"", "description": "Celtic guitar sample repurposed as bass with chop and slice" },
{ "type": "pattern", "code": "note \"<ef ef {b, [~!7 fs]} fs>\"", "description": "Moog bass with sparse set-theoretic note pattern" },
{ "type": "effect", "code": "# octerbus 52 (range 0 0.63 \"^36\")", "description": "MIDI-controlled octaver on moog bass for sub-bass depth" },
{ "type": "technique", "code": "chop 4 $ \"voices_celtic\" # n \"4 <4 4 5 <4 3>> 5 <6 5 5 4>\"", "description": "Celtic vocal sample chopped and sequenced as melodic element" },
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM, LPF automation over 64 cycles, celtic guitar + voices + moog layering" }
]
}
]
}
{
"gig": "air-elementeuf",
"title": "Air 2025 ELEMENTEUF",
"date": "2025-06-15",
"bpmRange": [120, 125],
"styleDistribution": {
"nujazz": 4,
"lounge": 1,
"collab": 1
},
"samplePacks": [
{ "name": "bassWarsaw", "usage": "primary bass in Salut Nu, Café Bouillant" },
{ "name": "nujazz_keys120 / nujazz_bass120", "usage": "nu-jazz samples in Café Bouillant, Café Glacé" },
{ "name": "nujazz_keys125 / nujazz_bass125", "usage": "nu-jazz 125BPM samples in Café Tiède" },
{ "name": "sunny_bass / sunny_brass / acidOto3092", "usage": "sunny pack + acid in Sunny Side Up" },
{ "name": "FMRhodes1", "usage": "FM piano in Café Tiède" },
{ "name": "jungle_breaks / breaks165", "usage": "breakbeat rhythms across tracks" },
{ "name": "rhadamanthe_melo / cpluck", "usage": "piano and cello pluck in Septembre 1er" },
{ "name": "nujazz_wahwah125", "usage": "wah-wah guitar in Salut Nu" }
],
"tracks": [
{
"name": "Salut Nu",
"file": "live/midi/nova/nujazz/salut_nu.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM nu-jazz opener" },
{ "type": "pattern", "code": "note (\"<[a4@4 c5 <c5 d5 c5 fs4>] a4>\" + \"[0,12]\" - 36) # \"bassWarsaw\"", "description": "Warsaw bass with Am melody and chromatic F#4 surprise" },
{ "type": "sample", "code": "\"nujazz_keys120\" / \"nujazz_wahwah125\" / \"nujazz_beats120\"", "description": "Jazz keys, wah guitar, and live beats" },
{ "type": "technique", "code": "midiOn \"^58\" (juxBy 0.9 (mask ... . rev . (|+ note 12)))", "description": "Piano mirrored: reversed copy at 90% stereo, octave up" },
{ "type": "effect", "code": "# freezebus 51 (range 0 0.7 \"^34\")", "description": "Spectral freeze on piano samples via MIDI" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM upbeat sunny lounge" },
{ "type": "sample", "code": "\"sunny_bass\" / \"sunny_brass\"", "description": "Custom sunny pack with deployable brass" },
{ "type": "technique", "code": "arp \"up\" $ note (\"0(3,8) 0(<3!3 5>,8)\" + \"f gs c g\" + 12) # \"acidOto3092\"", "description": "Acid arp on F-Ab-C-G with Euclidean rhythm" },
{ "type": "pattern", "code": "n \"<0 0 0 0 1 1 1 <0 1 2 ...>>\" # \"sunny_bass\"", "description": "Patient bass: root for 4 bars then slow evolution" },
{ "type": "effect", "code": "# octersubbus 42 (range 0 2.5 \"^33\")", "description": "Sub-octave doubling for massive low end" }
]
},
{
"name": "Café Bouillant",
"file": "live/midi/nova/nujazz/cafe_bouillant.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM hot café nu-jazz" },
{ "type": "pattern", "code": "note (\"e3 <b2!3 <ef3 g3>>\" |+| \"[0 ~ ~ 0 ~ ~ 0 ~] ...\") # \"bassWarsaw\"", "description": "E-B bass with syncopated note triggers and Eb/G alternation" },
{ "type": "sample", "code": "\"nujazz_keys120\" # n \"<61!24 60!8>\"", "description": "Two piano presets cycling over 32 bars" },
{ "type": "technique", "code": "$ \"d([16 <16 [8 <8 32 16 32>]>],32,0)\" # \"[rampleS57:2]\"", "description": "Complex Euclidean hi-hat with density evolution" },
{ "type": "effect", "code": "# crushbus 41 (range 16 3.4 \"^53\")", "description": "MIDI-controlled bitcrush on bass" }
]
},
{
"name": "Café Tiède",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(125/60/4)", "description": "125 BPM lukewarm café" },
{ "type": "pattern", "code": "$ \"nujazz_bass125:1\" # crushbus 41 (range 12 4.5 \"^53\")", "description": "Jazz upright bass with bitcrush warmth" },
{ "type": "sample", "code": "\"nujazz_keys125\" / \"jungle_breaks:20\"", "description": "125BPM jazz piano + jungle breaks" },
{ "type": "technique", "code": "note (\"<c5 g4 <ef4!2 bf4!2> <c4 f4>>\") # \"FMRhodes1\"", "description": "FM Rhodes Cm-G-Eb-Bb-C-F progression" },
{ "type": "effect", "code": "# octerbus 71 (range 0 0.5 \"^55\")", "description": "Subtle octave on secondary piano" }
]
},
{
"name": "Café Glacé",
"file": "live/midi/nova/nujazz/cafe_glace.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM iced café nu-jazz - the cool sibling" },
{ "type": "pattern", "code": "$ \"nujazz_bass120:4\" # crushbus 41 (range 16 4 \"^53\")", "description": "Sliced 120BPM jazz bass with variable crush and slice speed" },
{ "type": "sample", "code": "\"nujazz_keys120\" / \"meth_bass\" / \"jungle_breaks:53\"", "description": "Jazz keys, glitched meth bass, and jungle breaks" },
{ "type": "technique", "code": "$ loopAt 0.25 $ slice 4 \"0 <0!3 1> <0!3 2> 3\" $ \"meth_bass\" # n \"<10!3 [<10 11> 11] 9!24>\"", "description": "Ultra-fast meth bass loop at quarter-cycle with evolving slices - 'UN GLITCH DANS MON CAFE'" },
{ "type": "effect", "code": "# crushbus 51 (range 16 6.4 \"^54\") # octerbus 52 (range 0 0.7 \"^34\")", "description": "Dual MIDI effects on piano: crush + octave" }
]
},
{
"name": "Septembre 1er",
"file": "live/collab/baba/sept1.tidal",
"bpm": 120,
"style": "collab",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4) # cps ((range 60 180 \"^29\")/60/4)", "description": "120 BPM base with MIDI live tempo from 60-180 BPM - 'À Mon Amour'" },
{ "type": "pattern", "code": "note (\"<<[b3@5 a3 b3 a3] ...>> [e3@7 b3]>\") # \"cpluck\" |+ note 12", "description": "Cello pluck B-A oscillation resolving to E - handmade bassline" },
{ "type": "sample", "code": "\"rhadamanthe_melo:1\"", "description": "Piano split into begin/mid/end cue points for narrative arc" },
{ "type": "technique", "code": "slow 2 \"<begin ~ begin ...>/2\" # cut 51 # begin 0 # end 0.2", "description": "Piano surgically split into 3 sections with slow reveal" },
{ "type": "effect", "code": "# delaybus 111 \"^30\" # delayt (\"<2!3 3>\"/3) # delayfb 0.5", "description": "MIDI-controlled delay send with triplet-feel delay time" }
]
}
]
}
--- ---
title: "Algolia RKO 2025" title: "Algolia - RKO 2025"
date: "2025-01-10" date: "2025-01-10"
time: "18:00" time: "18:00"
location: "Paris, France" location: "Paris, France"
address: "Algolia" address: "Algolia"
description: "Dernier rendez-vous RKO." description: "Dernier rendez-vous - RKO."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "" video: ""
...@@ -13,7 +13,7 @@ archive: "" ...@@ -13,7 +13,7 @@ archive: ""
tags: ["livecoding", "algolia", "paris"] tags: ["livecoding", "algolia", "paris"]
--- ---
# Algolia RKO 2025 # Algolia - RKO 2025
## Tracklist ## Tracklist
- Café Bouillant - Café Bouillant
......
{
"gig": "algolia-rko",
"title": "Algolia - RKO 2025",
"date": "2025-01-10",
"bpmRange": [85, 160],
"styleDistribution": {
"nujazz": 3,
"lounge": 2,
"dnb": 2,
"techno": 1,
"breaks": 1
},
"samplePacks": [
{ "name": "nujazz_keys120 / nujazz_bass120", "usage": "nu-jazz piano and bass in Café Bouillant, Café Tiède" },
{ "name": "bassWarsaw", "usage": "primary bass synth in Café Bouillant, Love First, Sunny Side Up" },
{ "name": "sunny_bass / sunny_brass / acidOto3092", "usage": "custom sunny pack + acid in Sunny Side Up" },
{ "name": "jungle_breaks / breaks165", "usage": "breakbeat backbone across multiple tracks" },
{ "name": "FMRhodes1", "usage": "FM piano in Café Tiède" },
{ "name": "90s_synatm", "usage": "atmospheric synth in Contre Visite" },
{ "name": "come_bass / come_eguitar / come_voice", "usage": "band sample pack in Permanence (Venons Ensemble variant)" },
{ "name": "harpsichord2", "usage": "gameboy-scale harpsichord in Nuit Agitée" },
{ "name": "nujazz_guitar120 / movie_cat", "usage": "jazz guitar and movie cat samples in Love First" }
],
"tracks": [
{
"name": "Café Bouillant",
"file": "live/midi/nova/nujazz/cafe_bouillant.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM hot café nu-jazz - hotter than Tiède" },
{ "type": "pattern", "code": "note (\"e3 <b2!3 <ef3 g3>>\" |+| \"[0 ~ ~ 0 ~ ~ 0 ~] ...\") # \"bassWarsaw\"", "description": "E-B bass alternation with syncopated Euclidean-like note triggers" },
{ "type": "sample", "code": "\"nujazz_keys120\" # n \"<61!24 60!8>\"", "description": "Two piano presets cycling over 32 bars with room/LPF MIDI control" },
{ "type": "technique", "code": "$ \"d([16 <16 [8 <8 32 16 32>]>],32,0)\" # \"[rampleS57:2]\"", "description": "Euclidean hi-hat pattern with evolving density: 16/32 to 8/32 variants" },
{ "type": "effect", "code": "# crushbus 41 (range 16 3.4 \"^53\") # roombus 42 (range 0 0.4 \"^33\")", "description": "MIDI dual control: bitcrush + room reverb on bass" }
]
},
{
"name": "Café Tiède",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(125/60/4)", "description": "125 BPM nu-jazz - the lukewarm sibling" },
{ "type": "pattern", "code": "$ \"nujazz_bass125:1\" # crushbus 41 (range 12 4.5 \"^53\")", "description": "Sliced jazz upright bass with MIDI-controlled bitcrush warmth" },
{ "type": "sample", "code": "\"nujazz_keys125\" / \"jungle_breaks:20\"", "description": "Jazz piano keys at 125BPM + jungle breaks" },
{ "type": "technique", "code": "note (\"<c5 g4 <ef4!2 bf4!2> <c4 f4>>\" + \"0(3,8) 0(3,8)\") # \"FMRhodes1\"", "description": "FM Rhodes with Euclidean repetition on Cm-G-Eb-Bb progression" },
{ "type": "effect", "code": "# octerbus 71 (range 0 0.5 \"^55\")", "description": "Subtle octave effect on secondary key layer" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM upbeat sunny lounge" },
{ "type": "sample", "code": "\"sunny_bass\" / \"sunny_brass\"", "description": "Custom sunny pack with patient bass and deployable brass" },
{ "type": "technique", "code": "arp \"up\" $ note (\"0(3,8) 0(<3!3 5>,8)\" + \"f gs c g\" + 12) # \"acidOto3092\"", "description": "Arpeggiated acid on F-Ab-C-G with dual Euclidean rhythm" },
{ "type": "pattern", "code": "n \"<0 0 0 0 1 1 1 <0 1 2 ...>>\" # \"sunny_bass\"", "description": "Patient bass: 4 bars root, then gradual harmonic unfolding" },
{ "type": "effect", "code": "# octersubbus 42 (range 0 2.5 \"^33\")", "description": "Dual sub-octave for massive low end on same MIDI knob" }
]
},
{
"name": "Something about Drums",
"file": "live/midi/nova/dnb/something_about_drums.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM fast DnB with jazz harmony" },
{ "type": "pattern", "code": "note (cat [\"[bf3, d4, f4, a4]\", \"[a3, c4, e4, g4]\", \"[d4, f4, a4, c5, <e5 e4>]\", \"[g3, b4, d5, <f5 ~>]\"] - 12)", "description": "Bbmaj7-Am7-Dm9-G7 progression at half speed on Warsaw bass" },
{ "type": "sample", "code": "\"drumtraks:9\" / \"drum:2\"", "description": "DrumTraks snare with drum rolls for jazz-DnB hybrid" },
{ "type": "technique", "code": "# \"FMRhodes2\" |+ note 2 # modIndex (range 0 2 \"^54\")", "description": "FM Rhodes2 transposed to C with subtle modulation" },
{ "type": "effect", "code": "# delay 0.7 # delayt 0.125 # delayfb 0.5", "description": "Eighth-note delay with 50% feedback on moogBass" }
]
},
{
"name": "Love First",
"file": "live/collab/nass/love_first.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM - collab with Nassim, nu-jazz love letter" },
{ "type": "pattern", "code": "note (\"<c <ef <[ef@7 g] [ef [g ef g]]>> f@2>\" - 24) # \"bassWarsaw\"", "description": "C-Eb-G bass with weighted long notes and voice-like movement" },
{ "type": "sample", "code": "\"nujazz_keys120:13\" / \"nujazz_guitar120:3\" / \"movie_cat\"", "description": "Jazz piano, guitar, and movie cat vocals for narrative layers" },
{ "type": "technique", "code": "# delay (slow 16 $ range 0.4 \"<0!32 0.8!32>\" saw) # delayfb 0.5", "description": "Guitar delay that slowly opens up over 32 cycles" },
{ "type": "effect", "code": "# crushbus 51 (range 10 1.8 \"^54\") # sz 0.8 # dry 1.2", "description": "Aggressive bitcrush on piano with large reverb" }
]
},
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM atmospheric techno" },
{ "type": "pattern", "code": "note (scale \"aeolian\" \"<0!3 [0@6 <4 -1>@2]> 2\") # \"90s_synatm:18\"", "description": "Aeolian questioning lead melody" },
{ "type": "sample", "code": "\"90s_synatm:8\" / \"90s_synatm:14\"", "description": "Aerial questions and electronic answers - dual 90s synth" },
{ "type": "technique", "code": "whenmod 32 8 (superimpose (arp \"<up!3 down>\" ...))", "description": "Every 32 cycles: 8-cycle arpeggiated doubt burst" },
{ "type": "effect", "code": "# crushbus 62 (range 16 2.25 \"^55\")", "description": "Bitcrush on lead for lo-fi transformation" }
]
},
{
"name": "Nuit Agitée",
"file": "live/midi/nova/breaks/nuit_agitee.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM restless night - custom 'gameboy' scale" },
{ "type": "pattern", "code": "note (scale \"gameboy\" (\"<1(3,8) [1(3,8), <~ [~!7 2]>] 0(3,8) ...>\")) # \"harpsichord2\"", "description": "Gameboy-scale harpsichord with Euclidean rhythm and evolving intervals" },
{ "type": "sample", "code": "\"bass_commodore:7\" / \"amencutup\" / \"rolandtr909\"", "description": "Commodore bass chopped into 64 slices, amen breaks, 909 clap" },
{ "type": "technique", "code": "midiOn \"^57\" (slow \"<1!12 [1 2]!3 [2 4]>\" . mask ... . stut \"<4!12 2 2 4 8>\" 0.7 ...)", "description": "Bass with decelerating stutter and increasingly sparse mask" },
{ "type": "effect", "code": "# crushbus 41 (range 8 0.81 \"^53\") # octersubbus 42 (range 0 7 \"^33\")", "description": "Extreme bitcrush to 0.81 + massive sub-octave up to 7x on bass" }
]
},
{
"name": "Invoque l'Été",
"file": "live/midi/nova/lounge/invoque_ete.tidal",
"bpm": 115,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (115/60/4)", "description": "115 BPM summer lounge closer" },
{ "type": "pattern", "code": "\"d ~ ~ d d ~ d <~!3 d>\" # \"[snare:22,sn:4]\"", "description": "Latin clave pattern on layered snares" },
{ "type": "sample", "code": "\"fbass:13\" / \"fguitar:12\" / \"fpiano:13\"", "description": "Sliced funk trio: bass, guitar, piano" },
{ "type": "technique", "code": "note (\"<a3'maj g3'maj a3'min d3'maj>\") # \"moogBass\"", "description": "Am-G-Am-D moog chord progression with frequency shift" },
{ "type": "effect", "code": "# crushbus 91 (range 16 1.4 \"^19\") # roombus 92 (range 0 1.4 \"^18\")", "description": "Dual MIDI effects on moog: crush + room - 'Even an angel can fall in love'" }
]
},
{
"name": "Permanence",
"file": "live/collab/raph/permanence.tidal",
"bpm": 150,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (150/60/4)", "description": "150 BPM DnB closing track - collab with Raph" },
{ "type": "pattern", "code": "note (\"<c4 ef4 <bf3 <g3 g4>> <af3 f4 af3 af4>>\") # \"moogBass\"", "description": "Dark moog bass: C-Eb-Bb/G-Ab/F with octave jumps" },
{ "type": "sample", "code": "\"bass_nes:1\" / \"fguitar:40\" / \"fsynth\"", "description": "NES bass, distorted guitar, synth pads" },
{ "type": "technique", "code": "note (\"0@3 0 . <gs4 f4 ef4 d4>\") # \"superfork\"", "description": "Superfork melody with chromatic descent" },
{ "type": "effect", "code": "# crushbus 51 (range 16 2.5 \"^54\") # distortbus 52 (range 0 1.5 \"^34\")", "description": "Guitar dual destruction: crush + distort on separate knobs" }
]
}
]
}
...@@ -44,4 +44,9 @@ tags: ["livecoding", "algorave", "lyon", "tidal"] ...@@ -44,4 +44,9 @@ tags: ["livecoding", "algorave", "lyon", "tidal"]
# AlgoRave Lyon 2025 # AlgoRave Lyon 2025
Détails à venir... AlgoRave européenne annuelle, 18h-06h de musique algorithmique, installations et performances audiovisuelles au GRRRND ZERO.
Set w/ Pérégrine - techno, breakbeat, jungle à la sauce TidalCycles + MIDI.
## Tracklist
- Set complet disponible sur [Bandcamp](https://parvagues.bandcamp.com/track/live-algorave-ground-zero-2025)
{
"gig": "bunker",
"title": "BUNKER",
"date": "2025-10-31",
"bpmRange": [104, 142],
"styleDistribution": { "techno": 3, "lounge": 1, "nujazz": 1, "dnb": 1, "breaks": 1, "ambient": 1 },
"samplePacks": [
{ "name": "bassWarsaw", "usage": "Main synth bass across techno and nujazz tracks" },
{ "name": "orage", "usage": "Multi-purpose rain/storm sample pack (drums, bass, piano, voices)" },
{ "name": "jungle_breaks", "usage": "Breakbeat fills and layers" },
{ "name": "breaks165", "usage": "High-energy 165 BPM breakbeat" },
{ "name": "sunny_bass", "usage": "Custom bass sample for Sunny" },
{ "name": "vec1_acid", "usage": "Acid synth samples" },
{ "name": "sogood", "usage": "Custom multi-sample pack (keys, voices, chorus)" },
{ "name": "FMRhodes1", "usage": "FM electric piano for atmospheric layers" }
],
"tracks": [
{
"name": "Sept1",
"file": "live/collab/baba/sept1.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"rhadamanthe_melo:1\"", "description": "Piano melody with begin/mid/end gated sections" },
{ "type": "pattern", "code": "note (\"<<[b3@5 a3 b3 a3]...>> [e3@7 b3]>\")", "description": "Cello-like cpluck bassline in B/A with long sustain" },
{ "type": "effect", "code": "# cps ((range 60 180 \"^29\")/60/4)", "description": "Live BPM morphing via MIDI fader" },
{ "type": "sample", "code": "\"breaks165\"", "description": "Amen break energy injection layer" },
{ "type": "technique", "code": "$ midiOn \"^56\" (loopAt 2 . (# n 12))", "description": "MIDI-triggered jungle break variations" }
]
},
{
"name": "Sunny",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "sample", "code": "\"sunny_bass\"", "description": "Warm bass with octave sub modulation" },
{ "type": "sample", "code": "\"sunny_brass\"", "description": "Brass samples with gradual mask reveal" },
{ "type": "pattern", "code": "\"acidOto3092\" |- note 36", "description": "Acid synth overlay in F/G#/C/G" },
{ "type": "technique", "code": "$ superimpose ((# crushbus 41 ...) . (# lpf 2500))", "description": "Parallel bass processing with crush and filter" },
{ "type": "sample", "code": "\"risers:8\"", "description": "Tension riser deploying at phrase boundaries" }
]
},
{
"name": "Orage",
"file": "live/midi/nova/techno/techno_orage.tidal",
"bpm": 104,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"orage\"", "description": "Multi-use rain/storm pack: hats (chop 8), bass (loopAt 2), piano, voices" },
{ "type": "pattern", "code": "$ slow 4 $ ply \"4 . 2 0\"", "description": "Slow piano rain pattern with progressive ply density" },
{ "type": "sample", "code": "\"vec1_acid:30\"", "description": "Acid doubt line in C/Ab/D with octave layering" },
{ "type": "technique", "code": "$ midiOn \"^34\" ((>| n \"<<4!4 34 4!3> 4 33 <34 4>>\"))", "description": "MIDI-triggered infinite storm variation" },
{ "type": "sample", "code": "\"FMRhodes2\"", "description": "FM Rhodes melody in F/C/G#/C/F/Bb/D/Bb" }
]
},
{
"name": "Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Jazz bass loop chopped and sliced with crush" },
{ "type": "sample", "code": "\"FMRhodes1\"", "description": "FM piano with modIndex and note offsetting" },
{ "type": "sample", "code": "\"giorgio_syn:22\"", "description": "Giorgio synth with euclidean struct and crush" },
{ "type": "sample", "code": "\"break:2\"", "description": "Breakbeat with loopAt 2 and MIDI-driven variations" },
{ "type": "technique", "code": "$ midiOn \"^92\" (iter \"1 <1 4>\")", "description": "MIDI-triggered break iteration for live variation" }
]
},
{
"name": "Drifting Soul",
"file": "live/collab/jane/drifting_soul.tidal",
"bpm": 80,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"jane_wang\"", "description": "Jane's piano recording with MIDI-controlled slice/ply" },
{ "type": "pattern", "code": "note (\"<[fs@7 <~ bf>] [fs@7 <~ cs>] <bf ef> <cs!3 bf>>\")", "description": "Cello bass with jux-doubled seventh intervals" },
{ "type": "sample", "code": "\"movie_vitality\" / \"movie_wine\" / \"movie_statue\"", "description": "Cinema vocal collage: drift, wine, statue fragments" },
{ "type": "sample", "code": "\"scratch_long:12\"", "description": "Scratch record with MIDI-triggered ply acceleration" },
{ "type": "structure", "code": "setcps (80/60/4)", "description": "80 BPM slow groove, half-time feel" }
]
},
{
"name": "Because It's There",
"file": "copycat/because_its_there.tidal",
"bpm": 110,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"bassWarsaw\"", "description": "Warsaw bass in C#/G#/D# with crush and octave sub" },
{ "type": "sample", "code": "\"ikedaBass\"", "description": "Minimal bass pad with delay chain" },
{ "type": "sample", "code": "\"90s_synatm:0\"", "description": "90s synth atmosphere following B/A#/G# progression" },
{ "type": "pattern", "code": "note \"<b4 as4 gs4 ~>\"", "description": "Descending chromatic pad motif" },
{ "type": "sample", "code": "\"FMRhodes1\"", "description": "FM piano with room reverb and long delay" }
]
},
{
"name": "Ere de Jeu",
"file": "live/midi/nova/techno/ere_de_jeu.tidal",
"bpm": 110,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"[808bd:1,808bd:2,jazz,kick:4]\"", "description": "Quad-layered kick drum" },
{ "type": "sample", "code": "\"vec1_acid:27\"", "description": "Angel acid bass with accelerating fast pattern" },
{ "type": "sample", "code": "\"nujazz_keys120\"", "description": "Nu-jazz piano with freeze and striate" },
{ "type": "technique", "code": "$ loopAt 0.5 . (# \"breaks165\") . (# octersub 2)", "description": "Nassim button: half-speed breaks with octave sub" },
{ "type": "pattern", "code": "note \"[cs3 b3 <gs3!3 cs4> b3]\"", "description": "Melodic bass motif with C# to B resolution" }
]
},
{
"name": "Acidule",
"file": "live/collab/raph/acidule.tidal",
"bpm": 135,
"style": "acid",
"ingredients": [
{ "type": "sample", "code": "\"vec2_synth_acid\" / \"vec1_acid:40\"", "description": "Dual acid bass with independent crossfade" },
{ "type": "pattern", "code": ">| note \"[b d6 b cs6 d6 b cs6 b]*2\"", "description": "Rapid alternating acid note sequence" },
{ "type": "effect", "code": "# tremdp 4 # tremr 1.8", "description": "Bouncy droplet tremolo on FM Rhodes lead" },
{ "type": "sample", "code": "\"rhadamanthe_vocal\"", "description": "Self-destruct vocal sequence with timed fragments" },
{ "type": "sample", "code": "\"90s_synatm:21\"", "description": "Synthetic violin layer with dual-voice melody" }
]
}
]
}
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
{ "name": "FMRhodes1", "usage": "FM piano in insouciance, Mauerpark, and more" }, { "name": "FMRhodes1", "usage": "FM piano in insouciance, Mauerpark, and more" },
{ "name": "airports", "usage": "granular airport ambience in Quand on Décolle" }, { "name": "airports", "usage": "granular airport ambience in Quand on Décolle" },
{ "name": "aoc_fr", "usage": "French vocal collages in Fabuleux" }, { "name": "aoc_fr", "usage": "French vocal collages in Fabuleux" },
{ "name": "orage", "usage": "storm/thunder sample bank bass, hats, piano, voices in Nuit d'orage" }, { "name": "orage", "usage": "storm/thunder sample bank - bass, hats, piano, voices in Nuit d'orage" },
{ "name": "weird_dialogs", "usage": "sci-fi movie dialogs about electricity in Bain électrique" }, { "name": "weird_dialogs", "usage": "sci-fi movie dialogs about electricity in Bain électrique" },
{ "name": "come_bass / come_eguitar / come_voice", "usage": "3-part band sample pack in Venons Ensemble" }, { "name": "come_bass / come_eguitar / come_voice", "usage": "3-part band sample pack in Venons Ensemble" },
{ "name": "suns_keys / suns_guitar / suns_voice", "usage": "Leifur James-inspired originals in L'Or Bleu" }, { "name": "suns_keys / suns_guitar / suns_voice", "usage": "Leifur James-inspired originals in L'Or Bleu" },
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
"bpm": 94, "bpm": 94,
"style": "lounge", "style": "lounge",
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps (94/60/4)", "description": "94 BPM downtempo original of 'Blue Gold' collab" }, { "type": "structure", "code": "setcps (94/60/4)", "description": "94 BPM downtempo - original of 'Blue Gold' collab" },
{ "type": "sample", "code": "\"suns_keys\" / \"suns_guitar\" / \"suns_voice\"", "description": "3-part Leifur James-inspired sample pack" }, { "type": "sample", "code": "\"suns_keys\" / \"suns_guitar\" / \"suns_voice\"", "description": "3-part Leifur James-inspired sample pack" },
{ "type": "technique", "code": "loopAt 8 $ chop 16 $ \"suns_keys\"", "description": "8-cycle piano loop chopped into 16 grains" }, { "type": "technique", "code": "loopAt 8 $ chop 16 $ \"suns_keys\"", "description": "8-cycle piano loop chopped into 16 grains" },
{ "type": "pattern", "code": "note (\"[b,fs6]@1.5 [a,e6]@1.5 ...\" - 24) # \"bassWarsaw\"", "description": "Weighted timing bass (1.5+1.5+3) with Euclidean sub-patterns" }, { "type": "pattern", "code": "note (\"[b,fs6]@1.5 [a,e6]@1.5 ...\" - 24) # \"bassWarsaw\"", "description": "Weighted timing bass (1.5+1.5+3) with Euclidean sub-patterns" },
...@@ -177,7 +177,7 @@ ...@@ -177,7 +177,7 @@
{ "type": "sample", "code": "\"rhadamanthe_melo:1\"", "description": "Rhadamanthe piano split into begin/mid/end narrative" }, { "type": "sample", "code": "\"rhadamanthe_melo:1\"", "description": "Rhadamanthe piano split into begin/mid/end narrative" },
{ "type": "technique", "code": "slow 2 \"<begin ~ begin ...>/2\" # cut 51 # begin 0 # end 0.2", "description": "Piano surgically split into 3 cue points" }, { "type": "technique", "code": "slow 2 \"<begin ~ begin ...>/2\" # cut 51 # begin 0 # end 0.2", "description": "Piano surgically split into 3 cue points" },
{ "type": "pattern", "code": "note (\"<<[b3@5 a3 b3 a3] ...>> [e3@7 b3]>\") # \"cpluck\"", "description": "Cello pluck B-A oscillation resolving to E" }, { "type": "pattern", "code": "note (\"<<[b3@5 a3 b3 a3] ...>> [e3@7 b3]>\") # \"cpluck\"", "description": "Cello pluck B-A oscillation resolving to E" },
{ "type": "effect", "code": "# cps ((range 60 180 \"^29\")/60/4)", "description": "MIDI live tempo from 60 to 180 BPM real-time manipulation" } { "type": "effect", "code": "# cps ((range 60 180 \"^29\")/60/4)", "description": "MIDI live tempo from 60 to 180 BPM - real-time manipulation" }
] ]
}, },
{ {
...@@ -187,7 +187,7 @@ ...@@ -187,7 +187,7 @@
"style": "breaks", "style": "breaks",
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps (138/60/4)", "description": "138 BPM fast breaks" }, { "type": "structure", "code": "setcps (138/60/4)", "description": "138 BPM fast breaks" },
{ "type": "sample", "code": "\"rhadamanthe_vocal:1\"", "description": "The Lady vocal chopped into 16 grains over 8 cycles" }, { "type": "sample", "code": "\"rhadamanthe_vocal:1\"", "description": "The Lady - vocal chopped into 16 grains over 8 cycles" },
{ "type": "technique", "code": "sometimesBy \"^55\" (rev) . sometimesBy \"^35\" (juxBy 0.25 ...)", "description": "Triple probability: reversal, stereo micro-loops, euclidean masking" }, { "type": "technique", "code": "sometimesBy \"^55\" (rev) . sometimesBy \"^35\" (juxBy 0.25 ...)", "description": "Triple probability: reversal, stereo micro-loops, euclidean masking" },
{ "type": "pattern", "code": "note (\"c3 <d3 ... [d3@3 f3]> e3 <g3 b3 a3 c4>\") # \"bassWarsaw\"", "description": "C minor walking bass with chromatic upper voice" }, { "type": "pattern", "code": "note (\"c3 <d3 ... [d3@3 f3]> e3 <g3 b3 a3 c4>\") # \"bassWarsaw\"", "description": "C minor walking bass with chromatic upper voice" },
{ "type": "effect", "code": "# crushbus 51 (range 16 3.5 \"^54\")", "description": "Bitcrush on Giorgio pad for lo-fi harmonic layer" } { "type": "effect", "code": "# crushbus 51 (range 16 3.5 \"^54\")", "description": "Bitcrush on Giorgio pad for lo-fi harmonic layer" }
...@@ -213,7 +213,7 @@ ...@@ -213,7 +213,7 @@
"style": "drill", "style": "drill",
"ingredients": [ "ingredients": [
{ "type": "structure", "code": "setcps (140/60/4)", "description": "140 BPM fast drill/grime" }, { "type": "structure", "code": "setcps (140/60/4)", "description": "140 BPM fast drill/grime" },
{ "type": "sample", "code": "\"bogdan_grime\"", "description": "'I'm from Cardiff!', 'Pints' grime vocals" }, { "type": "sample", "code": "\"bogdan_grime\"", "description": "'I'm from Cardiff!', 'Pints' - grime vocals" },
{ "type": "technique", "code": "juxBy 0.4 rev $ note ... # \"marimba1\"", "description": "Marimba with stereo juxtaposed reversal at 40%" }, { "type": "technique", "code": "juxBy 0.4 rev $ note ... # \"marimba1\"", "description": "Marimba with stereo juxtaposed reversal at 40%" },
{ "type": "pattern", "code": "slow 2 $ note (\"<<fs ...>> b4>\" - 12 + 2) # \"giorgio_syn:1\"", "description": "Giorgio bass with long weighted F# notes resolving" }, { "type": "pattern", "code": "slow 2 $ note (\"<<fs ...>> b4>\" - 12 + 2) # \"giorgio_syn:1\"", "description": "Giorgio bass with long weighted F# notes resolving" },
{ "type": "effect", "code": "# crushbus 101 # octersub 1", "description": "Bitcrush + sub-octave on 90s synth pad" } { "type": "effect", "code": "# crushbus 101 # octersub 1", "description": "Bitcrush + sub-octave on 90s synth pad" }
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
title: "FairyTeuf" title: "FairyTeuf"
date: "2025-08-20" date: "2025-08-20"
time: "22:00" time: "22:00"
location: "Fairy Land" location: "PSC"
address: "FairyTeuf" address: "PSC"
description: "Magical set." description: "Magical set."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
......
{
"gig": "fairyteuf",
"title": "FairyTeuf",
"date": "2025-08-20",
"bpmRange": [80, 170],
"styleDistribution": { "breaks": 3, "dnb": 2, "lounge": 1, "nujazz": 1, "drill": 1, "acid": 1, "funk": 1, "techno": 1, "hip-hop": 1 },
"samplePacks": [
{ "name": "bassWarsaw", "usage": "Core synth bass across multiple tracks" },
{ "name": "jungle_breaks", "usage": "Breakbeat layering and variations" },
{ "name": "praise", "usage": "Fatboy Slim-inspired vocal/guitar/bass samples" },
{ "name": "vec1_acid", "usage": "Acid bass synth patches" },
{ "name": "gfunk_lead", "usage": "G-funk lead sample for Piment Bresilien" },
{ "name": "law_adri", "usage": "Custom vocal/instrumental sample for Des Efforts" },
{ "name": "wap", "usage": "Custom WAP sample pack (bass, vocals, drums)" },
{ "name": "jane_wang", "usage": "Piano recording collaboration" },
{ "name": "breaks165", "usage": "High-energy breakbeat standard" },
{ "name": "moog", "usage": "Moog synthesizer for pad and bass layers" }
],
"tracks": [
{
"name": "JeuDrill",
"file": "live/collab/raph/jeudrill.tidal",
"bpm": 140,
"style": "drill",
"ingredients": [
{ "type": "sample", "code": "\"bogdan_grime:3\"", "description": "Grime vocal samples from Cardiff with speed modulation" },
{ "type": "sample", "code": "\"giorgio_syn:1\"", "description": "Giorgio bass synth with crush and octave sub" },
{ "type": "sample", "code": "\"marimba1\"", "description": "Marimba melody in B/D/F# with jux reversal" },
{ "type": "technique", "code": "$ someCyclesBy \"^19\" (slice 4 \"...\")", "description": "MIDI-controlled probability-based meth bass slicing" },
{ "type": "sample", "code": "\"90s_synatm:10\"", "description": "Menacing 90s synth pad with 4 Adrianesque variations" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "sample", "code": "\"sunny_bass\"", "description": "Warm bass with superimposed crush layer" },
{ "type": "sample", "code": "\"sunny_brass\"", "description": "Brass with progressive mask deployment" },
{ "type": "pattern", "code": "\"acidOto3092\" |- note 36", "description": "Acid line with width MIDI modulation" },
{ "type": "sample", "code": "\"nujazz_keys120:35/4\"", "description": "Piano outro with gentle slice" },
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM laid-back lounge groove" }
]
},
{
"name": "Savoir Voyager",
"file": null,
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "technique", "code": "no source file found", "description": "Track likely composed live or from an untracked file. Name suggests travel/journey theme in nujazz style." }
]
},
{
"name": "Menthe Givree",
"file": null,
"bpm": 130,
"style": "breaks",
"ingredients": [
{ "type": "technique", "code": "no source file found", "description": "Track likely composed live. Name suggests frozen mint theme, probably a cool/icy breaks track." }
]
},
{
"name": "Ouais je funk",
"file": null,
"bpm": 120,
"style": "funk",
"ingredients": [
{ "type": "technique", "code": "no source file found", "description": "Track likely composed live. Name translates to 'Yeah I Funk', suggesting a funky groove-based track." }
]
},
{
"name": "WAP",
"file": "live/midi/nova/dnb/wap.tidal",
"bpm": 133,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"wap\"", "description": "Custom WAP sample pack: bass (bandf 400), vocals (rotating n 8-31), drums" },
{ "type": "pattern", "code": "$ stut 4 1 1 $ slow 4", "description": "4-repeat stutter on vocal samples for hall effect" },
{ "type": "sample", "code": "\"vec2_synth_acid:25\" / \"vec1_acid:25\"", "description": "Acid bass with off-beat layering and crush" },
{ "type": "technique", "code": "# n \"<8 9 10 11 ... 31>\"", "description": "Complete 24-sample vocal rotation across phrases" },
{ "type": "sample", "code": "\"jungle_breaks:84\"", "description": "Jungle break stack with MIDI-triggered Orleans and jungle variants" }
]
},
{
"name": "Long Way",
"file": "live/collab/raph/long_way.tidal",
"bpm": 102,
"style": "hip-hop",
"ingredients": [
{ "type": "sample", "code": "\"praise\"", "description": "Praise sample pack: bass loop (n 12-15), voice (A LONG LONG WAY), guitar" },
{ "type": "technique", "code": "$ midiOn \"^58\" (ply 4 . (# begin 0) . (# end 0.115))", "description": "Voice loop locked to first 11.5% for 'long way' phrase" },
{ "type": "pattern", "code": "$ fast 2 $ \"~ s ~ [s*<1 2> <~ s*<2 [4 2]>>]\"", "description": "Double-time snare with accelerating fills" },
{ "type": "sample", "code": "\"praise:16\" / \"praise:17\"", "description": "Stereo-panned guitar layers with crush modulation" },
{ "type": "structure", "code": "setcps (102/60/4)", "description": "102 BPM half-time hip-hop feel" }
]
},
{
"name": "Esperluette",
"file": "live/collab/raph/esperluette.tidal",
"bpm": 140,
"style": "techno",
"ingredients": [
{ "type": "pattern", "code": "note \"<gs2 gs2 gs2 ef3>\"", "description": "Dual bassWarsaw lines in G#/Eb with MIDI ply" },
{ "type": "sample", "code": "\"praise\"", "description": "Praise vocal pack reused with slice variations" },
{ "type": "sample", "code": "\"moog:3\"", "description": "Moog pad with note variation and crush" },
{ "type": "sample", "code": "\"jungle_breaks:45\"", "description": "Classic jungle break with MIDI break switching" },
{ "type": "structure", "code": "setcps (140/60/4)", "description": "140 BPM driving techno pace" }
]
},
{
"name": "Piment Bresilien",
"file": "live/collab/raph/piment_bresilien.tidal",
"bpm": 124,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"gfunk_lead:2\"", "description": "G-funk lead with striate and chop manipulation" },
{ "type": "pattern", "code": "note \"<bf2 bf2 bf2 [bf2@7 cs3]>\"", "description": "Deep bassWarsaw in Bb with C# transition" },
{ "type": "sample", "code": "\"FMRhodes2\"", "description": "FM Rhodes in F/C#/C progression with modIndex modulation" },
{ "type": "sample", "code": "\"90s_synatm:10\"", "description": "Menacing pad building tension at Bb" },
{ "type": "sample", "code": "\"jungle_breaks:45\"", "description": "Standard jungle break with MIDI switching" }
]
},
{
"name": "Biscuit Acide",
"file": "live/collab/raph/biscuit_acide.tidal",
"bpm": 128,
"style": "acid",
"ingredients": [
{ "type": "sample", "code": "\"vec1_acid:0\"", "description": "Acid bass with superimposed seventh/octave ghost notes" },
{ "type": "pattern", "code": "note (\"fs [fs a] <a [fs a]> fs fs <a!3 e>\" + \"c4\")", "description": "Major-key acid pattern in F#/A/E with double layer" },
{ "type": "sample", "code": "\"ho:2\"", "description": "Open hi-hat with stutter and reverse variations" },
{ "type": "effect", "code": "# squizbus 41 (range 0 4 \"^53\")", "description": "MIDI-controlled squiz distortion on acid doubles" },
{ "type": "sample", "code": "\"moog\"", "description": "Moog pad in F#/A/B/C# slow arpeggiation" }
]
},
{
"name": "Des Efforts",
"file": "live/collab/raph/des_efforts.tidal",
"bpm": 120,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"law_adri\"", "description": "Custom sample with MIDI-driven n selection and ply" },
{ "type": "pattern", "code": "note \"<g3 g3 bf3 d3>\"", "description": "BassWarsaw line in G/Bb/D with superimposed ghost notes" },
{ "type": "technique", "code": "$ midiOn \"^57\" (superimpose ((0.25 ~>) . (|+| note \"[0 7 0 12]*2\" ...)))", "description": "MIDI-triggered bass doubling with seventh/octave offsets" },
{ "type": "sample", "code": "\"breaks165\"", "description": "165 BPM break with MIDI jungle switching" },
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM mid-tempo breaks" }
]
},
{
"name": "AUXiliaire",
"file": null,
"bpm": 130,
"style": "breaks",
"ingredients": [
{ "type": "technique", "code": "no source file found", "description": "Track likely composed live or renamed. AUX-themed track, possibly referencing auxiliary sends/returns." }
]
}
]
}
{
"gig": "la-french-stack",
"title": "La French Stack",
"date": "2025-05-20",
"bpmRange": [85, 160],
"styleDistribution": {
"techno": 1,
"breaks": 2,
"nujazz": 3,
"lounge": 2,
"dnb": 2
},
"samplePacks": [
{ "name": "bassWarsaw", "usage": "primary bass synth in Salut Nu, Something about Drums, Venons Ensemble" },
{ "name": "nujazz_keys120 / nujazz_keys125", "usage": "nu-jazz piano in Salut Nu, Café Tiède" },
{ "name": "nujazz_bass125", "usage": "sliced jazz upright bass in Café Tiède, Force Motrice" },
{ "name": "sunny_bass / sunny_brass / acidOto3092", "usage": "custom sunny pack + acid synth in Sunny Side Up" },
{ "name": "come_bass / come_eguitar / come_voice", "usage": "3-part band sample pack in Venons Ensemble" },
{ "name": "suns_keys / suns_guitar / suns_voice", "usage": "Leifur James-inspired samples in L'Or Bleu" },
{ "name": "jungle_breaks / breaks165", "usage": "breakbeat backbone across 7+ tracks" },
{ "name": "FMRhodes1 / FMRhodes2", "usage": "FM piano in Force Motrice, Something about Drums" },
{ "name": "giorgio_syn", "usage": "Moroder synth in Bain Électrique and Force Motrice" },
{ "name": "weird_dialogs", "usage": "sci-fi movie dialogs in Bain Électrique" },
{ "name": "90s_synatm", "usage": "atmospheric 90s synth in Contre Visite" }
],
"tracks": [
{
"name": "Contre Visite",
"file": "live/midi/nova/ambient/contre_visite.tidal",
"bpm": 90,
"style": "techno",
"ingredients": [
{ "type": "structure", "code": "setcps (90/60/4)", "description": "90 BPM atmospheric techno opener" },
{ "type": "pattern", "code": "note (scale \"aeolian\" \"<0!3 [0@6 <4 -1>@2]> 2\") # \"90s_synatm:18\"", "description": "Aeolian lead: questioning melody - 'Winds of truth'" },
{ "type": "sample", "code": "\"90s_synatm:8\" / \"90s_synatm:14\"", "description": "Dual 90s synth: aerial questions and electronic answers" },
{ "type": "technique", "code": "juxBy 0.5 ((# cut 61) . rev)", "description": "Juxtaposed reversal on lead at 50% stereo" },
{ "type": "effect", "code": "# delayfb 0.25 # delayt 0.25 # delay 0.8", "description": "Quarter-note delay on answer synth" }
]
},
{
"name": "Bain Électrique",
"file": "live/midi/nova/breaks/bain_electrique.tidal",
"bpm": 128,
"style": "breaks",
"ingredients": [
{ "type": "structure", "code": "setcps (128/60/4)", "description": "128 BPM electro breaks" },
{ "type": "pattern", "code": "note \"<fs3 [fs3@7 b3] [fs3@7 g3] ...>\" # \"giorgio_syn:0\"", "description": "Giorgio bass: 8-bar chromatic phrase F#-B-G-D" },
{ "type": "sample", "code": "\"weird_dialogs\"", "description": "Sci-fi dialog narrative about electricity and faith" },
{ "type": "technique", "code": "slice 16 \"0*[4 <4 4 1 ...>]\" $ chop 16 $ \"fguitar:55\"", "description": "Granular guitar with evolving rhythmic density" },
{ "type": "effect", "code": "# octersubbus 5 # octerbus 6", "description": "Global octave bus transforms everything on single MIDI knob" }
]
},
{
"name": "Salut Nu",
"file": "live/midi/nova/nujazz/salut_nu.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM nu-jazz" },
{ "type": "pattern", "code": "note (\"<[a4@4 c5 <c5 d5 c5 fs4>] a4>\" + \"[0,12]\" - 36) # \"bassWarsaw\"", "description": "Warsaw bass with Am melody and chromatic F#4" },
{ "type": "sample", "code": "\"nujazz_keys120\" / \"nujazz_wahwah125\"", "description": "Jazz keys and wah-wah guitar samples" },
{ "type": "technique", "code": "midiOn \"^58\" (juxBy 0.9 (... . rev . (|+ note 12)))", "description": "Piano reflected: reversed at 90% stereo, octave up" },
{ "type": "effect", "code": "# freezebus 51 (range 0 0.7 \"^34\")", "description": "Spectral freeze on piano" }
]
},
{
"name": "Café Tiède",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps(125/60/4)", "description": "125 BPM lukewarm café" },
{ "type": "pattern", "code": "$ \"nujazz_bass125:1\" # crushbus 41 (range 12 4.5 \"^53\")", "description": "Jazz upright bass with MIDI bitcrush" },
{ "type": "sample", "code": "\"nujazz_keys125\" / \"jungle_breaks:20\"", "description": "125BPM jazz piano + jungle breaks" },
{ "type": "technique", "code": "note (\"<c5 g4 <ef4!2 bf4!2> <c4 f4>>\") # \"FMRhodes1\"", "description": "FM Rhodes Cm-G-Eb-Bb-C-F" },
{ "type": "effect", "code": "# octerbus 71 (range 0 0.5 \"^55\")", "description": "Octave doubling on secondary keys" }
]
},
{
"name": "Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (125/60/4)", "description": "125 BPM DnB - 'Atelier de force motrice'" },
{ "type": "pattern", "code": "note (\"[g@2 ~!4 <f ~ as5 c6>]\" - 12) # \"FMRhodes1\"", "description": "Sparse FM Rhodes: G sustain then chromatic surprise" },
{ "type": "sample", "code": "\"nujazz_bass125:1\" / \"giorgio_syn:22\" / \"cbow:2\"", "description": "Jazz bass, Giorgio synth, bowed cello" },
{ "type": "technique", "code": "midiOff \"^89\" (slice 4 \"1 2*<1 2> 3*<1 4> 4\")", "description": "Bass with doubling/quadrupling slice density" },
{ "type": "effect", "code": "# crushbus 71 (range 12 3.4 \"^55\")", "description": "Bitcrush on Giorgio Euclidean pad" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (120/60/4)", "description": "120 BPM upbeat sunny lounge" },
{ "type": "sample", "code": "\"sunny_bass\" / \"sunny_brass\"", "description": "Custom sunny pack with brass deployment" },
{ "type": "technique", "code": "arp \"up\" $ note (... + \"f gs c g\" + 12) # \"acidOto3092\"", "description": "Acid arp on F-Ab-C-G" },
{ "type": "pattern", "code": "n \"<0 0 0 0 1 1 1 ...>\" # \"sunny_bass\"", "description": "Patient bass: 4 bars root then evolution" },
{ "type": "effect", "code": "# octersubbus 42 (range 0 2.5 \"^33\")", "description": "Dual sub-octave for massive low end" }
]
},
{
"name": "Venons Ensemble",
"file": "live/midi/nova/dnb/venons_ensemble.tidal",
"bpm": 85,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (85/60/4)", "description": "85 BPM (170 double-time), half-time DnB" },
{ "type": "sample", "code": "\"come_bass\" / \"come_eguitar\" / \"come_voice\"", "description": "Complete 3-part band sample pack" },
{ "type": "technique", "code": "someCyclesBy (\"^35\" - \"^91\") (>| n ...)", "description": "MIDI probability control for vocal buildup" },
{ "type": "pattern", "code": "n \"<[0 0]!6 [1 1] <2 [2 2]>>\" # \"come_bass\"", "description": "Slow bass: shifts only at bars 7-8" },
{ "type": "effect", "code": "# crushbus 71 (range 16 \"<5 10>\" \"^55\") # hpfbus 72", "description": "Voice crush + HPF on same knob" }
]
},
{
"name": "Something about Drums",
"file": "live/midi/nova/dnb/something_about_drums.tidal",
"bpm": 160,
"style": "nujazz",
"ingredients": [
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM fast DnB with jazz harmony" },
{ "type": "pattern", "code": "note (cat [\"[bf3, d4, f4, a4]\", ...] - 12) # \"bassWarsaw\"", "description": "Bbmaj7-Am7-Dm9-G7 jazz chords on Warsaw at half speed" },
{ "type": "sample", "code": "\"drumtraks:9\" / \"drum:2\"", "description": "DrumTraks snare + drum rolls" },
{ "type": "technique", "code": "# \"FMRhodes2\" |+ note 2 # modIndex (range 0 2 \"^54\")", "description": "FM Rhodes2 transposed to C" },
{ "type": "effect", "code": "# delay 0.7 # delayt 0.125 # delayfb 0.5", "description": "Eighth-note delay on moogBass" }
]
},
{
"name": "Permanence",
"file": "live/collab/raph/permanence.tidal",
"bpm": 150,
"style": "dnb",
"ingredients": [
{ "type": "structure", "code": "setcps (150/60/4)", "description": "150 BPM DnB closer" },
{ "type": "pattern", "code": "note (\"<c4 ef4 <bf3 <g3 g4>> <af3 f4 af3 af4>>\") # \"moogBass\"", "description": "Dark moogBass: C-Eb-Bb/G-Ab/F" },
{ "type": "sample", "code": "\"bass_nes:1\" / \"fguitar:40\" / \"fsynth\"", "description": "NES bass, distorted guitar, synth pads" },
{ "type": "technique", "code": "note (\"0@3 0 . <gs4 f4 ef4 d4>\") # \"superfork\"", "description": "Superfork chromatic descent" },
{ "type": "effect", "code": "# crushbus 51 ... # distortbus 52 ...", "description": "Guitar dual destruction: crush + distort" }
]
},
{
"name": "L'Or Bleu",
"file": "live/midi/nova/lounge/suns_of_gold.tidal",
"bpm": 94,
"style": "lounge",
"ingredients": [
{ "type": "structure", "code": "setcps (94/60/4)", "description": "94 BPM downtempo golden hour" },
{ "type": "sample", "code": "\"suns_keys\" / \"suns_guitar\" / \"suns_voice\"", "description": "3-part Leifur James-inspired sample pack" },
{ "type": "technique", "code": "loopAt 8 $ chop 16 $ \"suns_keys\" # lesliebus 42 ...", "description": "8-cycle piano with Leslie modulation" },
{ "type": "pattern", "code": "note (\"[b,fs6]@1.5 [a,e6]@1.5 ...\" - 24) # \"bassWarsaw\"", "description": "Weighted timing bass (1.5+1.5+3)" },
{ "type": "effect", "code": "# lesliebus 42 # lrate 0.92 # lsize 1.9", "description": "MIDI Leslie speaker for rotary warmth" }
]
}
]
}
{
"gig": "raise",
"title": "RAISE AFTERPARTY",
"date": "2025-11-15",
"bpmRange": [80, 170],
"styleDistribution": { "ambient": 1, "dnb": 3, "lounge": 1, "techno": 3, "breaks": 3, "nujazz": 3, "drill": 1, "punk": 1, "acid": 1 },
"samplePacks": [
{ "name": "ai_raise", "usage": "AI-generated voice samples for RAISE intro" },
{ "name": "ai_welcome", "usage": "Welcome voice samples for ambient opener" },
{ "name": "bassWarsaw", "usage": "Main synth bass throughout the set" },
{ "name": "jungle_breaks", "usage": "Breakbeat layers and fills" },
{ "name": "airports", "usage": "Airport ambience for atmosphere" },
{ "name": "private_number", "usage": "Vocal sample for Ton Numero" },
{ "name": "nujazz_keys120", "usage": "Pre-recorded nujazz piano loops" },
{ "name": "nujazz_bass125", "usage": "Pre-recorded nujazz bass loops" },
{ "name": "nujazz_wahwah125", "usage": "Wah-wah guitar samples" },
{ "name": "orage", "usage": "Rain/storm sample pack" },
{ "name": "FMRhodes1", "usage": "FM electric piano" },
{ "name": "rhadamanthe_vocal", "usage": "Vocal/atmospheric samples" }
],
"tracks": [
{
"name": "RAISE",
"file": "live/midi/nova/ambient/raise.tidal",
"bpm": 120,
"style": "ambient",
"ingredients": [
{ "type": "sample", "code": "\"ai_raise\"", "description": "AI-generated voice samples with slice and gain variations" },
{ "type": "sample", "code": "\"ai_welcome:3\"", "description": "Welcome voice with end-trimmed 'welcome' phrase" },
{ "type": "technique", "code": "once $ slice 2 \"1\" \"ai_raise:2\"", "description": "One-shot sliced voice triggers for spoken-word intro" },
{ "type": "pattern", "code": "$ whenmod 4 3 (slice 4 \"<0(3,8) 1>\")", "description": "Gradual rhythmic slicing on looped welcome voice" },
{ "type": "structure", "code": "setcps (120/60/4)", "description": "Transition from ambient intro to 120 BPM" }
]
},
{
"name": "Something About Drums",
"file": "live/midi/nova/dnb/something_about_drums.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"[bskick,jazz]\"", "description": "Big-speaker kick layered with jazz brush kit" },
{ "type": "pattern", "code": "note (cat [\"[bf3, d4, f4, a4]\", \"[a3, c4, e4, g4]\", \"[d4, f4, a4, c5, <e5 e4>]\", \"[g3, b4, d5, <f5 ~>]\"])", "description": "Jazz chord progression: Bbmaj7-Am7-Dm9-G7 arpeggiated" },
{ "type": "sample", "code": "\"FMRhodes2\"", "description": "FM Rhodes playing same chord changes with modIndex" },
{ "type": "sample", "code": "\"moogBass\"", "description": "Moog bass doubling chord progression with delay" },
{ "type": "structure", "code": "setcps (160/60/4)", "description": "160 BPM jazz-inflected drum & bass" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "sample", "code": "\"sunny_bass\"", "description": "Warm bass with crush and octave sub layers" },
{ "type": "sample", "code": "\"sunny_brass\"", "description": "Brass with progressive reveal mask" },
{ "type": "pattern", "code": "\"acidOto3092\" |- note 36", "description": "Acid overlay with MIDI width control" },
{ "type": "sample", "code": "\"nujazz_keys120:35/4\"", "description": "Piano loop coda" },
{ "type": "technique", "code": "$ mask \"<t f <f t> f>\"", "description": "4-bar gradual sample deployment" }
]
},
{
"name": "Sept1",
"file": "live/collab/baba/sept1.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"rhadamanthe_melo:1\"", "description": "Piano with begin/mid/end gated sections" },
{ "type": "pattern", "code": "note (\"<<[b3@5 a3 b3 a3]...>> [e3@7 b3]>\")", "description": "Cello-like bassline in B/A" },
{ "type": "effect", "code": "# cps ((range 60 180 \"^29\")/60/4)", "description": "Live BPM morphing 60-180" },
{ "type": "sample", "code": "\"breaks165\"", "description": "Energy injection breakbeat" },
{ "type": "technique", "code": "$ midiOn \"^58\" (# silence)", "description": "MIDI-gated piano section switching" }
]
},
{
"name": "Orage",
"file": "live/midi/nova/techno/techno_orage.tidal",
"bpm": 104,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"orage\"", "description": "Storm sample pack used for all elements" },
{ "type": "pattern", "code": "$ slow 4 $ ply \"4 . 2 0\"", "description": "Rain piano with progressive density" },
{ "type": "sample", "code": "\"vec1_acid:30\"", "description": "Acid doubt line in C/Ab/D" },
{ "type": "sample", "code": "\"FMRhodes2\"", "description": "FM Rhodes storm melody" },
{ "type": "structure", "code": "setcps (104/60/4)", "description": "Slow 104 BPM atmospheric techno" }
]
},
{
"name": "La Fin de l'Insouciance",
"file": "live/midi/nova/beatober/oct_16_haunted_house_insouciance.tidal",
"bpm": 120,
"style": "breaks",
"ingredients": [
{ "type": "pattern", "code": "note \"<c3 c3 c3 c3 gs2 gs2 b2 b2>@5 ef3 d3 ...\"", "description": "Dark chromatic bassWarsaw descent" },
{ "type": "sample", "code": "\"FMRhodes1\"", "description": "Bird call FM piano with modIndex control" },
{ "type": "sample", "code": "\"808hc:2\"", "description": "Carillon bells with octave sub layering" },
{ "type": "sample", "code": "\"armora:1\"", "description": "Hawk percussion with HPF sweep" },
{ "type": "sample", "code": "\"trance_pads:7\"", "description": "Atmospheric pads following bass harmony" }
]
},
{
"name": "Bain Electrique",
"file": "live/midi/nova/breaks/bain_electrique.tidal",
"bpm": 128,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"jungbass:3\"", "description": "Jungle bass with stutter and infraband crush" },
{ "type": "sample", "code": "\"giorgio_syn:0\"", "description": "Giorgio bass appel with LPF modulation" },
{ "type": "sample", "code": "\"fguitar:55\"", "description": "Salvational guitar sliced 16-ways" },
{ "type": "sample", "code": "\"weird_dialogs\"", "description": "Movie dialog collage: atomic, faith, curiosity, planet sequences" },
{ "type": "technique", "code": "let gO = (# octersubbus 5 ...) . (# octerbus 6 ...)", "description": "Global octave sub/up bus shared across tracks" }
]
},
{
"name": "Jeudi Drill",
"file": "live/collab/raph/jeudrill.tidal",
"bpm": 140,
"style": "drill",
"ingredients": [
{ "type": "sample", "code": "\"bogdan_grime\"", "description": "Cardiff grime vocals with speed modulation" },
{ "type": "sample", "code": "\"giorgio_syn:1\"", "description": "Giorgio bass with crush and octave sub" },
{ "type": "sample", "code": "\"marimba1\"", "description": "Marimba in B/D/F# with jux reversal" },
{ "type": "sample", "code": "\"90s_synatm:10\"", "description": "Menacing 90s pad with Adrianesque variations" },
{ "type": "structure", "code": "setcps (140/60/4)", "description": "140 BPM drill tempo" }
]
},
{
"name": "PunkAChien",
"file": "live/collab/raph/punkachien.tidal",
"bpm": 170,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"vec1_acid:11\"", "description": "Acid bass with layered gain-controlled variants" },
{ "type": "pattern", "code": "note (\"d*<3 4 3 2> . ds ds df\" + 2)", "description": "Rhythmic acid alternating 3-4-3-2 divisions" },
{ "type": "sample", "code": "\"cpluck:1\"", "description": "Plucked synth with crush overlay" },
{ "type": "sample", "code": "\"meth_bass:9\"", "description": "Lo-fi bass with delay feedback build" },
{ "type": "structure", "code": "setcps (170/60/4)", "description": "170 BPM peak energy DnB" }
]
},
{
"name": "Nuit Agitee",
"file": "live/midi/nova/breaks/nuit_agitee.tidal",
"bpm": 160,
"style": "breaks",
"ingredients": [
{ "type": "technique", "code": "let scale = getScale (scaleTable ++ [(\"gameboy\", [1,2,4,5,7,9,11])])", "description": "Custom gameboy scale definition" },
{ "type": "sample", "code": "\"bass_commodore:7\"", "description": "Commodore bass with leslie and crush modulation" },
{ "type": "sample", "code": "\"harpsichord2\"", "description": "Harpsichord melody using gameboy scale" },
{ "type": "sample", "code": "\"amencutup\"", "description": "Amen break cutup with stereo pan" },
{ "type": "pattern", "code": "note (scale \"gameboy\" (...) )", "description": "Gameboy-scale melody with layered euclidean pattern" }
]
},
{
"name": "L'or Bleu",
"file": "live/collab/mousquetaires/blue_gold.tidal",
"bpm": 124,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"suns_keys\"", "description": "Suns of Gold keys with tremolo slice" },
{ "type": "sample", "code": "\"suns_guitar\"", "description": "Triple guitar layers: main, triplet, falling angel" },
{ "type": "pattern", "code": "$ fast (4/3)", "description": "Signature 4/3 polyrhythmic bassline" },
{ "type": "sample", "code": "\"suns_voice:0\"", "description": "Father's voice with phrase selection slicing" },
{ "type": "technique", "code": "$ whenmod 32 16 (swingBy (slow 16 $ range 0.08 0.01 saw) 4)", "description": "Progressive swing fade-out over 16 bars" }
]
},
{
"name": "Lady Perplexity",
"file": "live/midi/nova/breaks/lady_perplexity.tidal",
"bpm": 138,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"rhadamanthe_vocal:1\"", "description": "Vocal loop chopped 16-ways over 8-bar cycle" },
{ "type": "technique", "code": "$ sometimesBy \"^35\" (juxBy 0.25 (loopAt 0.5 . (# cut 71)))", "description": "MIDI-controlled probability jux with half-speed ghost" },
{ "type": "pattern", "code": "note (\"c3 <d3 [d3] d3 [d3@3 f3]> e3 <g3 b3 a3 c4>\")", "description": "BassWarsaw chromatic walk C-D-E-G with variations" },
{ "type": "sample", "code": "\"FMRhodes2\"", "description": "FM Rhodes chords with delay feedback 0.8" },
{ "type": "sample", "code": "\"giorgio_syn:7\"", "description": "Giorgio synth doubling bass with crush modulation" }
]
},
{
"name": "Cafe Glace",
"file": "live/midi/nova/nujazz/cafe_glace.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass120:4\"", "description": "Jazz bass loop sliced with MIDI variation" },
{ "type": "sample", "code": "\"nujazz_keys120\"", "description": "Piano keys with freeze/crush" },
{ "type": "sample", "code": "\"meth_bass\"", "description": "Lo-fi glitch bass in the cafe" },
{ "type": "sample", "code": "\"jungle_breaks:53\"", "description": "Stereo jungle break layer" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM nujazz" }
]
},
{
"name": "Cafe Tiede",
"file": "live/midi/nova/nujazz/cafe_tiede.tidal",
"bpm": 125,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Jazz bass chopped 8/loopAt 4 with MIDI slice control" },
{ "type": "sample", "code": "\"nujazz_keys125\"", "description": "Multiple key layers: n 56-59 main, n 66-67 octave, n 4-5 pad" },
{ "type": "technique", "code": "$ slice 4 \"<<[0 1 2 3] [0 1 0 1 2 3 2 3]> [0 1 2 3]>\"", "description": "Alternating piano slice patterns for variation" },
{ "type": "sample", "code": "\"jungle_breaks:20\"", "description": "Break with stereo pan alternation every 16 cycles" },
{ "type": "effect", "code": "# roombus 110 (slow 16 $ range 0 0.9 saw)", "description": "Progressive reverb build on pad layer" }
]
},
{
"name": "Atelier de Force Motrice",
"file": "live/midi/nova/dnb/force_motrice.tidal",
"bpm": 125,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass125:1\"", "description": "Jazz bass with crush and octave modulation" },
{ "type": "sample", "code": "\"FMRhodes1\"", "description": "FM piano lead with modIndex control" },
{ "type": "sample", "code": "\"giorgio_syn:22\"", "description": "Giorgio synth with euclidean rhythmic struct" },
{ "type": "sample", "code": "\"cbow:2\"", "description": "Cello bow pad with stutter superimposition" },
{ "type": "sample", "code": "\"jungle_vocals\"", "description": "Jungle vocal one-shots between breaks" }
]
},
{
"name": "Salut Nu",
"file": "live/midi/nova/nujazz/salut_nu.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_keys120\"", "description": "Piano with jux mirror, slice and freeze effects" },
{ "type": "pattern", "code": "note (\"<[a4@4 c5 <c5 d5 c5 fs4>] a4>\" + \"[0,12]\" - 36)", "description": "BassWarsaw with octave doubling and squiz modulation" },
{ "type": "sample", "code": "\"nujazz_wahwah125\"", "description": "Wah-wah guitar with octave sub and destroy" },
{ "type": "sample", "code": "\"nujazz_beats120\"", "description": "Jazz drum loops with octave sub processing" },
{ "type": "effect", "code": "# freezebus 51 (range 0 0.7 \"^34\")", "description": "MIDI-controlled freeze effect on piano" }
]
},
{
"name": "Ton Numero",
"file": "live/midi/nova/breaks/ton_numero.tidal",
"bpm": 99,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"private_number\"", "description": "Vocal sample: Drop Your Number, with begin-offset calage" },
{ "type": "sample", "code": "\"vocalScatAr\" / \"vocalScatJ\"", "description": "Male/female scat vocals with room reverb" },
{ "type": "pattern", "code": "note \"[<df4!2 cs4 g4>@2 <b3 e4!2 fs4>@2 <a3!2 fs4 e4>@5]/2\"", "description": "Moog bass with heartbeat-extracted ghost notes" },
{ "type": "sample", "code": "\"vocalOoh1\" / \"vocalOoh2\"", "description": "Choir layers with LPF mask fading" },
{ "type": "structure", "code": "setcps (99/60/4)", "description": "99 BPM slow groove with soul feel" }
]
}
]
}
--- ---
title: "TOPLAP From Scratch Jungle 🐅" title: "TOPLAP From Scratch - Jungle 🐅"
date: "2025-12-07" date: "2025-12-07"
time: "21:15" time: "21:15"
location: "Orléans, France" location: "Orléans, France"
address: "TOPLAP Stream" address: "TOPLAP Stream"
description: "A scratch in the Jungle 🐅 starting from jungle_breaks. Cookie Collective." description: "A scratch in the Jungle 🐅 - starting from jungle_breaks. Cookie Collective."
ctaURL: "" ctaURL: ""
ctaText: "" ctaText: ""
video: "https://archive.org/details/toplap-fromscratch-dec2025-parvagues" video: "https://archive.org/details/toplap-fromscratch-dec2025-parvagues"
...@@ -13,8 +13,8 @@ archive: "https://archive.org/details/toplap-fromscratch-dec2025-parvagues" ...@@ -13,8 +13,8 @@ archive: "https://archive.org/details/toplap-fromscratch-dec2025-parvagues"
tags: ["livecoding", "toplap", "fromscratch", "jungle", "cookie-collective"] tags: ["livecoding", "toplap", "fromscratch", "jungle", "cookie-collective"]
--- ---
# TOPLAP From Scratch Jungle 🐅 # TOPLAP From Scratch - Jungle 🐅
A scratch in the Jungle starting point: `jungle_breaks`. A scratch in the Jungle - starting point: `jungle_breaks`.
Live from Orléans, December 2025. Live from Orléans, December 2025.
{
"gig": "val-thorens",
"title": "Val Thorens 2025",
"date": "2025-02-15",
"bpmRange": [110, 170],
"styleDistribution": { "techno": 3, "nujazz": 3, "breaks": 2, "dnb": 3, "lounge": 1, "punk": 1, "acid": 1 },
"samplePacks": [
{ "name": "bassWarsaw", "usage": "Main synth bass across multiple tracks" },
{ "name": "jungle_breaks", "usage": "Breakbeat layers and fills" },
{ "name": "FMRhodes1", "usage": "FM electric piano for melodic layers" },
{ "name": "nujazz_keys120", "usage": "Pre-recorded nujazz piano loops" },
{ "name": "breaks165", "usage": "High-energy breakbeat sample" },
{ "name": "sunny_bass", "usage": "Custom bass sample for Sunny Side Up" },
{ "name": "vec1_acid", "usage": "Acid synth lines" },
{ "name": "punk", "usage": "Punk guitar loops" },
{ "name": "rhadamanthe_melo", "usage": "Melodic piano samples" },
{ "name": "rhadamanthe_vocal", "usage": "Vocal atmospherics and self-destruct sequences" }
],
"tracks": [
{
"name": "Because It's There",
"file": "copycat/because_its_there.tidal",
"bpm": 110,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"bassWarsaw\"", "description": "Warsaw bass synth as melodic bassline in C#/G#/D#" },
{ "type": "pattern", "code": "note \"[cs3@6 gs3 ds3]\"", "description": "6-beat sustained C# with G#/D# resolution" },
{ "type": "effect", "code": "# crushbus 41 (range 16 2.5 \"^53\")", "description": "MIDI-controlled bitcrush for grit" },
{ "type": "sample", "code": "\"ikedaBass\"", "description": "Ryoji Ikeda-inspired bass pad with delay" },
{ "type": "technique", "code": "let gMask = (midiOn \"^41\" (mask \"t . <f t f <f t>> <t f f <t f>>\"))", "description": "MIDI-triggered masking for live build-up control" }
]
},
{
"name": "Ere de Jeu",
"file": "live/midi/nova/techno/ere_de_jeu.tidal",
"bpm": 110,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"[808bd:1,808bd:2,jazz,kick:4]\"", "description": "Layered kick: 808 + jazz kit + acoustic kick" },
{ "type": "pattern", "code": "note \"[cs3 b3 <gs3!3 cs4> b3]\"", "description": "Melodic bassWarsaw line with octave leap variation" },
{ "type": "sample", "code": "\"vec1_acid:27\"", "description": "Angel acid bass entering at bar 32" },
{ "type": "technique", "code": "$ midiOn \"^57\" (fix (fast \"<4!3 [4 <4 4 2 4>]>\") \"vec1_acid:27\")", "description": "MIDI-triggered acid acceleration pattern" },
{ "type": "sample", "code": "\"nujazz_keys120\"", "description": "Nu-jazz key loops with slice manipulation and freeze" }
]
},
{
"name": "Cafe Glace",
"file": "live/midi/nova/nujazz/cafe_glace.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass120:4\"", "description": "Pre-recorded nujazz bass loop, sliced and chopped" },
{ "type": "technique", "code": "$ midiOn \"^57\" (slice 4 (fast 1 \"<0!3 <1 3>>\"))", "description": "MIDI-controlled bass slice variations" },
{ "type": "sample", "code": "\"nujazz_keys120\"", "description": "Piano keys with freeze and crush effects" },
{ "type": "sample", "code": "\"jungle_breaks:53\"", "description": "Chopped jungle break with stereo pan" },
{ "type": "structure", "code": "setcps(120/60/4)", "description": "120 BPM nujazz groove" }
]
},
{
"name": "Cafe Bouillant",
"file": "live/midi/nova/nujazz/cafe_bouillant.tidal",
"bpm": 120,
"style": "nujazz",
"ingredients": [
{ "type": "sample", "code": "\"nujazz_bass120\"", "description": "Plucked bass with slow crush modulation via perlin noise" },
{ "type": "pattern", "code": "note (\"e3 <b2!3 <ef3 g3>>\" |+| \"[0 ~ ~ 0 ~ ~ 0 ~] ...\")", "description": "Melodic bassWarsaw with euclidean-like offbeat hits" },
{ "type": "sample", "code": "\"cpluck:4\"", "description": "Plucked string melody with cycling note additions" },
{ "type": "technique", "code": "$ someCyclesBy \"<1!32 0!32>\" (|+ note \"<e g bf b>\")", "description": "Probabilistic note transposition alternating every 32 cycles" },
{ "type": "sample", "code": "\"jungle_breaks:22\"", "description": "Stereo-panned jungle break with slice manipulation" }
]
},
{
"name": "Sept1",
"file": "live/collab/baba/sept1.tidal",
"bpm": 120,
"style": "techno",
"ingredients": [
{ "type": "sample", "code": "\"rhadamanthe_melo:1\"", "description": "Piano melody split into begin/mid/end sections" },
{ "type": "pattern", "code": "note (\"<<[b3@5 a3 b3 a3] ...>> [e3@7 b3]>\")", "description": "Cello-like bassline with long sustain and cpluck layering" },
{ "type": "technique", "code": "$ midiOn \"^58\" (# silence) $ slow 2 \"<begin ~ begin ...>/2\"", "description": "MIDI-gated piano section switching (begin/mid/end)" },
{ "type": "sample", "code": "\"breaks165\"", "description": "High-tempo breakbeat for energy injection" },
{ "type": "effect", "code": "# cps ((range 60 180 \"^29\")/60/4)", "description": "Real-time BPM control via MIDI fader (60-180 range)" }
]
},
{
"name": "Sunny Side Up",
"file": "live/midi/nova/lounge/sunny_side_up.tidal",
"bpm": 120,
"style": "lounge",
"ingredients": [
{ "type": "sample", "code": "\"sunny_bass\"", "description": "Custom sunny bass sample with octave sub variations" },
{ "type": "sample", "code": "\"sunny_brass\"", "description": "Brass sample with slow deployment mask pattern" },
{ "type": "pattern", "code": "\"acidOto3092\" |- note 36", "description": "Acid synth line in F/G#/C/G with width modulation" },
{ "type": "technique", "code": "$ mask \"<t f <f t> f>\"", "description": "Progressive sample reveal over 4-bar cycle" },
{ "type": "sample", "code": "\"nujazz_keys120:35/4\"", "description": "Piano outro loop with slow slice deployment" }
]
},
{
"name": "Insouciance",
"file": "live/midi/nova/beatober/oct_16_haunted_house_insouciance.tidal",
"bpm": 120,
"style": "breaks",
"ingredients": [
{ "type": "pattern", "code": "note \"<c3 c3 c3 c3 gs2 gs2 b2 b2>@5 ef3 d3 <ef3!4 c3!3 b2>\"", "description": "Dark bassWarsaw line with chromatic descent" },
{ "type": "sample", "code": "\"FMRhodes1\"", "description": "FM piano bird call melody with modIndex modulation" },
{ "type": "sample", "code": "\"armora:1\"", "description": "Hawk percussion with high-pass filtered reverb" },
{ "type": "effect", "code": "# hpf (slow 8 $ range 5000 \"<8000!32 800!32>\" saw)", "description": "Slow HPF sweep on hawk sounds creating tension" },
{ "type": "sample", "code": "\"trance_pads:7\"", "description": "Atmospheric pad layer following bass harmony" }
]
},
{
"name": "So Good",
"file": "live/collab/nass/sogood.tidal",
"bpm": 142,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"sogood\"", "description": "Multi-sample pack: keys (sliced), voices, and chorus" },
{ "type": "pattern", "code": "note \"<[f3 f3 gs3 f3@5] [<gs3!3 f3> gs3 g3 f3@5]>\"", "description": "Dual bassWarsaw line: foundation + bouncing acid layer" },
{ "type": "technique", "code": "$ midiOn \"^19\" ((>| n \"<~!3 [~ 11]>\") . (# end \"<0.2!3 0.45>\"))", "description": "MIDI-triggered voice intro switching to chorus" },
{ "type": "sample", "code": "\"cs80leadMH\"", "description": "CS-80 lead synth melody ascending F-Gs-C-Gs-F-Ef-Cs-C..." },
{ "type": "structure", "code": "setcps (142/60/4)", "description": "142 BPM drum & bass tempo" }
]
},
{
"name": "PunkAChien",
"file": "live/collab/raph/punkachien.tidal",
"bpm": 170,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"vec1_acid:11\"", "description": "Acid bass in D/D# with layered gain-controlled variants" },
{ "type": "pattern", "code": "note (\"d*<3 4 3 2> . ds ds df\" + 2)", "description": "Rhythmic acid pattern alternating between 3-4-3-2 divisions" },
{ "type": "sample", "code": "\"meth_bass:9\"", "description": "Lo-fi bass with progressive delay feedback build" },
{ "type": "sample", "code": "\"cpluck:1\"", "description": "Plucked synth with octave crush layering" },
{ "type": "structure", "code": "setcps (170/60/4)", "description": "170 BPM high-energy drum & bass" }
]
},
{
"name": "ACIDULE",
"file": "live/collab/raph/acidule.tidal",
"bpm": 135,
"style": "acid",
"ingredients": [
{ "type": "sample", "code": "\"vec2_synth_acid\" / \"vec1_acid:40\"", "description": "Dual acid synth layers with independent gain control" },
{ "type": "pattern", "code": ">| note (\"[b d6 b cs6 d6 b cs6 b]*2\" - \"<0!32 12!32>\")", "description": "Rapid acid note pattern with 32-bar octave alternation" },
{ "type": "sample", "code": "\"rhadamanthe_vocal\"", "description": "Self-destruction voice sample sequence with begin/end cuts" },
{ "type": "effect", "code": "# tremdp 4 # tremr 1.8", "description": "Bouncy tremolo droplet effect on FM piano lead" },
{ "type": "sample", "code": "\"90s_synatm:21\"", "description": "Synthetic violin with dual-voice ascending melody" }
]
},
{
"name": "Alerte Verte",
"file": "live/midi/nova/dnb/alerte_verte.tidal",
"bpm": 160,
"style": "dnb",
"ingredients": [
{ "type": "sample", "code": "\"fbass:25\"", "description": "Funky bass chopped into 16 slices with reverse variations" },
{ "type": "sample", "code": "\"fguitar\"", "description": "Dual guitar system: guitarA (surprise) and guitarB (wait)" },
{ "type": "technique", "code": "$ whenmod 16 14 (ply 2) $ every' 8 7 (ply 2)", "description": "Kick fill patterns at phrase boundaries" },
{ "type": "sample", "code": "\"supersiren\"", "description": "Siren synth with slow speed and amplitude modulation" },
{ "type": "effect", "code": "# leslie \"^34\" # lsize (1 + (slow 16 perlin * 2))", "description": "Leslie speaker effect on guitar with perlin-modulated size" }
]
},
{
"name": "Nouveau Punk",
"file": "live/collab/raph/nouveau_punk.tidal",
"bpm": 155,
"style": "punk",
"ingredients": [
{ "type": "sample", "code": "\"punk:0/4\"", "description": "Punk guitar loop chopped into 4, crushed and reverbed" },
{ "type": "sample", "code": "\"90s_synatm:9\"", "description": "90s synth atmosphere with octave sub and crush" },
{ "type": "pattern", "code": "note \"<e c d b4>\"", "description": "Core harmonic progression: E-C-D-B" },
{ "type": "sample", "code": "\"meth_bass:3\"", "description": "Meth bass with progressive ply build-up" },
{ "type": "sample", "code": "\"cpluck:2\"", "description": "Manouche-punk cello pluck with arpeggiated triads" }
]
},
{
"name": "Nuit Agitee",
"file": "live/midi/nova/breaks/nuit_agitee.tidal",
"bpm": 160,
"style": "breaks",
"ingredients": [
{ "type": "technique", "code": "let scale = getScale (scaleTable ++ [(\"gameboy\", [1,2,4,5,7,9,11])])", "description": "Custom 'gameboy' scale for retro melodic flavor" },
{ "type": "sample", "code": "\"bass_commodore:7\"", "description": "Commodore bass chopped into 64 slices with leslie modulation" },
{ "type": "sample", "code": "\"harpsichord2\"", "description": "Harpsichord melody using gameboy scale with distortion" },
{ "type": "sample", "code": "\"amencutup\"", "description": "Amen break cutup with MIDI-panned hat patterns" },
{ "type": "pattern", "code": "note (scale \"gameboy\" (\"<1(3,8) ...>\" + \"<<0 0 2 2> ...>\"))", "description": "Layered gameboy-scale melody with euclidean rhythm" }
]
},
{
"name": "Blue Gold",
"file": "live/collab/mousquetaires/blue_gold.tidal",
"bpm": 124,
"style": "breaks",
"ingredients": [
{ "type": "sample", "code": "\"suns_keys\"", "description": "Suns of Gold key samples with tremolo and slice manipulation" },
{ "type": "sample", "code": "\"suns_guitar\"", "description": "Triple guitar system: main, flying triplet, falling angel" },
{ "type": "pattern", "code": "$ fast (4/3) $ note \"<[fs4 <a5!2 gs!4 fs5!4...>@3]*4>\"", "description": "4/3 polyrhythm bassWarsaw line with shifting intervals" },
{ "type": "sample", "code": "\"suns_voice:0\"", "description": "Father's voice sample with slice-based phrase selection" },
{ "type": "technique", "code": "$ whenmod 32 16 (swingBy (slow 16 $ range 0.08 0.01 saw) 4)", "description": "Progressive swing reduction over 16-bar phrase" }
]
}
]
}
---
title: "Live@Algolia: Latin Heritage Party"
date: "2025-09-29"
timezone: "Europe/Paris"
city: "Paris"
country: "France"
venue: "Algolia HQ"
tags: ["livecoding", "company-party", "latin-heritage", "tidal"]
links:
- kind: "audio"
label: "Replay SoundCloud"
url: "https://soundcloud.com/parvagues/live-algolia-latin"
media:
audio: "https://soundcloud.com/parvagues/live-algolia-latin"
gallery: []
setlist:
- "Warm-up polyrhythms"
- "Latin Heritage improvisation"
- "Coda glitchée"
---
## Live@Algolia
Party dédié aux cultures latines. Set hybride livecoding + samples régionaux,
construit pour un dancefloor installé dans l&apos;atrium d&apos;Algolia.
- BPM à 128 pour garder le flux.
- Interludes vocaux issus d&apos;archives radio.
- Dernier quart en footwork/batida pour le final.
---
title: "Opal Festival 2025"
date: "2025-08-17"
timezone: "Europe/Paris"
country: "France"
venue: "Opal Festival"
tags: ["festival", "live-set", "livecoding", "tidal"]
links:
- kind: "audio"
label: "Playlist Festival"
url: "https://soundcloud.com/parvagues/sets/opal-2025-sets"
- kind: "audio"
label: "Livecoding @ Opal"
url: "https://soundcloud.com/parvagues/live-opal-2025"
media:
audio: "https://soundcloud.com/parvagues/live-opal-2025"
gallery: []
setlist:
- "Chapiteau sunrise intro"
- "Livecoding @ Opal 2025"
- "Paroles d'Opal (Encore)"
---
## Opal Festival 2025
Livecoding nocturne sous le chapiteau d&apos;Opal. Patch construit autour de textures
granulaires et de basses lourdes pour accompagner les projections du collectif
visuel.
- Phase d&apos;ouverture ambient pour respirer entre deux DJ sets.
- Bloc central footwork/breakbeat boosté par des patterns génératifs.
- Encore chanté avec le public et sample d&apos;archives locales.
import { useEffect, useState, useRef } from 'react';
import { getAllLives, getLiveData, getLivesImages } from '../../../lib/livesData';
import ImageGallery from '@/components/ImageGallery';
import ParVaguesHeader from '@/components/ParVaguesHeader';
import ParVaguesFooter from '@/components/ParVaguesFooter';
import Head from 'next/head';
import Link from 'next/link';
import Image from 'next/image';
import { marked } from 'marked';
import SyntaxHighlighter from "react-syntax-highlighter";
import { atomOneDark } from "react-syntax-highlighter/dist/cjs/styles/hljs";
import styles from '@/styles/parvagues.module.css';
import { FaEnvelope, FaYoutube } from 'react-icons/fa';
export default function Live({ data, slug, images }) {
const [timeToEvent, setTimeToEvent] = useState(null);
const [timeString, setTimeString] = useState('');
const [currentTeasing, setCurrentTeasing] = useState(null);
const [pastEvent, setPastEvent] = useState(false);
const [teasingsToShow, setTeasingsToShow] = useState([]);
const [upcomingDrops, setUpcomingDrops] = useState([]);
const [posterImage, setPosterImage] = useState(null);
const [mainColor, setMainColor] = useState('#a855f7');
const [scrolled, setScrolled] = useState(false);
const headerRef = useRef(null);
// Find poster or live image for background
useEffect(() => {
if (images && images.length > 0) {
const poster = images.find(img => img.includes('poster.'));
const liveImage = images.find(img => img.includes('live.'));
if (poster) {
setPosterImage(poster);
} else if (liveImage) {
setPosterImage(liveImage);
}
}
}, [images]);
// Calculate time to event and set appropriate teasings
useEffect(() => {
const updateCountdown = () => {
const now = new Date();
const eventDate = new Date(data.frontmatter.date);
const timeDiff = eventDate - now;
const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
// Format precise time string (HH:MM:SS)
const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
const hours = Math.floor((timeDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((timeDiff % (1000 * 60)) / 1000);
setTimeString(`${days}j ${hours}h ${minutes}m ${seconds}s`);
if (timeDiff > 0) {
setTimeToEvent(daysDiff);
setPastEvent(false);
// Set which teasings to show based on days remaining
const teasings = [];
if (data.frontmatter.teasing1) teasings.push(data.frontmatter.teasing1);
if (daysDiff <= 14 && data.frontmatter.teasing2) {
teasings.push(data.frontmatter.teasing2);
}
if (daysDiff <= 2 && data.frontmatter.teasing3) {
teasings.push(data.frontmatter.teasing3);
}
// Always show most recent teasing at the top
setTeasingsToShow(teasings.reverse());
// Set upcoming drops information
const drops = [];
if (data.frontmatter.drop1date && new Date(data.frontmatter.drop1date) > now) {
drops.push({
date: new Date(data.frontmatter.drop1date),
name: data.frontmatter.drop1name || "Teasing mysterieux"
});
}
if (data.frontmatter.drop2date && new Date(data.frontmatter.drop2date) > now) {
drops.push({
date: new Date(data.frontmatter.drop2date),
name: data.frontmatter.drop2name || "Révélation cryptique"
});
}
if (data.frontmatter.drop3date && new Date(data.frontmatter.drop3date) > now) {
drops.push({
date: new Date(data.frontmatter.drop3date),
name: data.frontmatter.drop3name || "Manifestation finale"
});
}
setUpcomingDrops(drops);
} else {
setTimeToEvent(-1);
setPastEvent(true);
// Show all teasings for past events
const teasings = [];
if (data.frontmatter.teasing3) teasings.push(data.frontmatter.teasing3);
if (data.frontmatter.teasing2) teasings.push(data.frontmatter.teasing2);
if (data.frontmatter.teasing1) teasings.push(data.frontmatter.teasing1);
setTeasingsToShow(teasings);
}
};
updateCountdown();
const interval = setInterval(updateCountdown, 1000); // Update every second
return () => clearInterval(interval);
}, [data.frontmatter]);
// Helper function to render markdown
const renderMarkdown = (content) => {
if (!content) return { __html: '' };
const html = marked(content);
return { __html: html };
};
// Helper function to format date for display
const formatEventDate = (dateString) => {
const date = new Date(dateString);
return new Intl.DateTimeFormat('fr-FR', {
day: 'numeric',
month: 'long',
year: 'numeric'
}).format(date);
};
// Scroll to details section
const scrollToSection = (e) => {
e.preventDefault();
const section = document.getElementById('details-section');
section?.scrollIntoView({ behavior: 'smooth' });
};
// Calculate time difference in precise format
const getTimeDifferenceString = (targetDate) => {
const now = new Date();
const timeDiff = targetDate - now;
if (timeDiff <= 0) return "Maintenant";
const days = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
const hours = Math.floor((timeDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60));
if (days > 0) {
return `${days}j ${hours}h ${minutes}m`;
} else {
return `${hours}h ${minutes}m`;
}
};
// Render YouTube embed if URL is provided
const renderYouTubeEmbed = (url) => {
if (!url) return null;
// Extract YouTube video ID
const videoId = url.match(/(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))([^?&]+)/)?.[1];
if (!videoId) return null;
return (
<div className="aspect-video w-full rounded-lg overflow-hidden shadow-lg">
<iframe
width="100%"
height="100%"
src={`https://www.youtube.com/embed/${videoId}`}
title="YouTube video player"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen>
</iframe>
</div>
);
};
// Render audio player if URL is provided
const renderAudioPlayer = (url) => {
if (!url) return null;
return (
<div className="my-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Audio</h3>
<audio
controls
className="w-full"
src={url}>
Votre navigateur ne supporte pas l'élément audio.
</audio>
</div>
);
};
// Render code blocks with SyntaxHighlighter
const renderCodeBlock = (code, language = 'haskell') => {
return (
<div className={styles.codeContainer}>
<SyntaxHighlighter
language={language}
style={atomOneDark}
wrapLongLines={true}
customStyle={{
margin: 0,
borderRadius: '8px',
fontSize: '0.85rem',
maxHeight: '200px' // Limit height
}}
>
{code}
</SyntaxHighlighter>
</div>
);
};
return (
<>
<Head>
<title>{data.frontmatter.title} - ParVagues</title>
<meta name="description" content={data.frontmatter.description || `ParVagues live: ${data.frontmatter.title}`} />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/images/parvagues/favicon.ico" />
</Head>
<div className="flex flex-col min-h-screen bg-black text-white">
{/* Header with event title */}
<ParVaguesHeader title={data.frontmatter.title} />
<main className="flex-auto">
{/* Hero Section - More compact */}
<section className="relative min-h-[60vh] md:min-h-[50vh] flex items-center overflow-hidden">
{/* FIXME: Rewrite the Background Image with gradient overlay */}
{/* {posterImage && (
<div className="z-0">
<img
src={posterImage}
alt={data.frontmatter.title}
fill
className="object-cover"
priority
/>
<div className="absolute inset-0 bg-gradient-to-b from-black/80 via-black/60 to-black"></div>
</div>
)} */}
<div className="container mx-auto px-4 py-8 relative z-10">
<div className="max-w-5xl mx-auto">
<div className="grid md:grid-cols-2 gap-6 items-center">
{/* Left Side: Event Info */}
<div>
<h1 className="text-4xl md:text-6xl font-bold mb-3 text-white">{data.frontmatter.title}</h1>
{!pastEvent && (
<h2 className="text-2xl md:text-4xl font-semibold mb-3 text-purple-300">
{timeToEvent === 0 ? "Aujourd'hui !" : `Dans ${timeString}`}
</h2>
)}
{pastEvent && (
<h2 className="text-xl md:text-2xl font-semibold mb-3 text-gray-500">
Événement passé
</h2>
)}
<h3 className="text-lg md:text-xl text-gray-400 mb-4">
{data.frontmatter.venue || 'Lieu à annoncer'}
{data.frontmatter.city && `, ${data.frontmatter.city}`}
</h3>
<div className="flex flex-col space-y-1 mb-6 text-sm"> {/* Reduced space-y and mb */}
<div className="flex items-center">
<span className="text-purple-400 w-20">Date:</span> {/* Reduced width */}
<span>{formatEventDate(data.frontmatter.date)}</span>
</div>
</div>
{/* Action Buttons */}
<div className="flex flex-wrap gap-3 mt-6"> {/* Increased gap and mt */}
{data.frontmatter.ticketLink && !pastEvent && (
<a
href={data.frontmatter.ticketLink}
target="_blank"
rel="noopener noreferrer"
className="bg-gradient-to-r from-purple-600 to-pink-600 px-6 py-3 rounded-lg text-white font-semibold hover:from-purple-700 hover:to-pink-700 transition-all shadow-lg hover:shadow-xl text-base" // Increased padding, font-size, rounded
>
Billets
</a>
)}
{data.frontmatter.eventLink && (
<a
href={data.frontmatter.eventLink}
target="_blank"
rel="noopener noreferrer"
className="bg-gray-700 hover:bg-gray-600 px-5 py-3 rounded-lg text-white font-medium transition-all shadow-md hover:shadow-lg text-base" // Increased padding, font-size, adjusted colors
>
Plus d'Infos
</a>
)}
<a
href="#details-section"
onClick={scrollToSection}
className="bg-transparent border-2 border-purple-500 hover:bg-purple-500/20 px-5 py-3 rounded-lg text-purple-300 hover:text-white font-medium transition-all text-base" // Increased padding, font-size, border
>
Voir les Détails
</a>
</div>
</div>
{/* Right Side: Upcoming Drops or Latest Teasing */}
<div className="mt-6 md:mt-0"> {/* Added margin top for small screens */}
{!pastEvent && upcomingDrops.length > 0 ? (
<div className="bg-black/70 backdrop-blur-md p-6 rounded-xl border border-purple-500/40 shadow-xl"> {/* Enhanced styling */}
<h3 className="text-xl font-bold text-purple-300 mb-4">Prochains Drops</h3> {/* Enhanced styling */}
<ul className="space-y-3">
{upcomingDrops.map((drop, i) => (
<li key={i} className="flex items-center justify-between bg-gray-800/70 p-3 rounded-md shadow"> {/* Enhanced styling */}
<span className="text-sm font-medium text-gray-200">{drop.name}</span>
<span className="text-xs bg-purple-700/80 text-white px-3 py-1 rounded-full font-semibold"> {/* Enhanced styling */}
{getTimeDifferenceString(drop.date)}
</span>
</li>
))}
</ul>
</div>
) : teasingsToShow.length > 0 ? (
<div className="bg-black/70 backdrop-blur-md p-6 rounded-xl border border-purple-500/40 shadow-xl"> {/* Enhanced styling */}
<h3 className="text-xl font-bold text-purple-300 mb-3"> {/* Enhanced styling */}
{pastEvent ? "Highlights" : "Dernier Teasing"}
</h3>
<div dangerouslySetInnerHTML={renderMarkdown(teasingsToShow[0])} className="prose prose-base prose-invert max-w-none leading-relaxed" /> {/* Increased prose size, leading */}
</div>
) : (
<div className="bg-black/70 backdrop-blur-md p-6 rounded-xl border border-purple-500/40 shadow-xl text-gray-400">
<p>Plus de détails à venir prochainement...</p>
</div>
)}
</div>
</div>
</div>
</div>
</section>
{/* Details Section - More compact */}
<section id="details-section" className="bg-black py-8">
<div className="container mx-auto px-4">
<div className="max-w-5xl mx-auto grid md:grid-cols-12 gap-6">
{/* Main Content */}
<div className="md:col-span-8">
{/* Main Content */}
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h2 className="text-xl font-bold mb-3 text-purple-400">À propos</h2>
<div
dangerouslySetInnerHTML={renderMarkdown(data.content)}
className="prose prose-sm prose-invert max-w-none"
/>
</div>
{/* Media */}
{data.frontmatter.youtubeUrl && (
<div className="mb-4">
{renderYouTubeEmbed(data.frontmatter.youtubeUrl)}
</div>
)}
{data.frontmatter.audioUrl && renderAudioPlayer(data.frontmatter.audioUrl)}
{/* Code Sample */}
{data.frontmatter.codeSnippet && (
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Code Snippet</h3>
{renderCodeBlock(data.frontmatter.codeSnippet)}
</div>
)}
</div>
{/* Sidebar */}
<div className="md:col-span-4">
{/* More Teasings */}
{teasingsToShow.length > 1 && (
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Plus de teasings</h3>
<div className="space-y-3">
{teasingsToShow.slice(1).map((teasing, i) => (
<div
key={i}
className="bg-black/60 p-3 rounded"
>
<div
dangerouslySetInnerHTML={renderMarkdown(teasing)}
className="prose prose-xs prose-invert max-w-none"
/>
</div>
))}
</div>
</div>
)}
{/* Artists */}
{data.frontmatter.artists && (
<div className="bg-gray-900/40 rounded-lg p-4 mb-4">
<h3 className="text-lg font-semibold text-purple-400 mb-2">Artistes</h3>
<div
dangerouslySetInnerHTML={renderMarkdown(data.frontmatter.artists)}
className="prose prose-sm prose-invert max-w-none"
/>
</div>
)}
{/* Artists / Other sidebar content can go here if needed */}
</div>
</div>
{/* Full Image Gallery - Render if images exist */}
{images && images.length > 0 && (
<div id="full-gallery" className="max-w-6xl mx-auto mt-12 pt-8 border-t border-purple-500/20"> {/* Increased max-width and added top margin/padding/border */}
<ImageGallery images={images} slug={slug} />
</div>
)}
</div>
</section>
</main>
<ParVaguesFooter />
</div>
</>
);
}
export async function getStaticPaths() {
const lives = getAllLives();
const paths = lives.map(live => ({
params: { id: live.slug }
}));
return {
paths,
fallback: false,
};
}
export async function getStaticProps({ params }) {
try {
const liveData = await getLiveData(params.id);
const images = await getLivesImages(params.id);
return {
props: {
data: liveData,
slug: params.id,
images,
},
revalidate: 60,
};
} catch (error) {
console.error(`Error getting data for ${params.id}:`, error);
return {
notFound: true,
};
}
}
...@@ -81,73 +81,122 @@ function TracksSection({ tracks }) { ...@@ -81,73 +81,122 @@ function TracksSection({ tracks }) {
); );
} }
export default function LiveEvent({ live, images, tracks }) { function MediaSection({ audio, video, archive }) {
const [phase, setPhase] = useState('early'); // early, J-14, J-7, J-3, live, post const links = [
const [isPostEvent, setIsPostEvent] = useState(false); audio && { url: audio, label: detectPlatform(audio) },
video && { url: video, label: detectPlatform(video) },
archive && { url: archive, label: detectPlatform(archive) },
].filter(Boolean);
useEffect(() => { if (links.length === 0) return null;
// Highlight code blocks
Prism.highlightAll();
}, [live, phase]);
useEffect(() => {
const checkDate = () => {
const now = new Date();
const eventDate = new Date(live.date);
if (now > eventDate) {
setIsPostEvent(true);
setPhase('post');
}
};
checkDate();
const interval = setInterval(checkDate, 60000); // Check every minute
return () => clearInterval(interval);
}, [live.date]);
// Determine which content to show based on phase // Try to build an inline embed for the first available source
const getTeasingContent = () => { const embedSrc = getEmbedUrl(audio || video || archive);
if (isPostEvent) return null;
// Logic to select teasing content from frontmatter based on phase
// Assuming frontmatter has fields like teasing_j7, teasing_j3 etc.
// For now, we'll just show the main description + countdown
return ( return (
<div className="text-center mb-12"> <div className="mb-16">
<div className="inline-block p-6 bg-black/50 backdrop-blur-md rounded-xl border border-purple-500/30 shadow-[0_0_30px_rgba(137,0,179,0.2)]"> <div className="flex items-center gap-4 mb-6">
<h3 className="text-purple-400 mb-4 font-mono text-sm">&gt; INITIALIZING_EVENT</h3> <h2 className="font-display text-2xl font-bold text-white">
<Countdown targetDate={live.date} onPhaseChange={setPhase} /> <span className="text-[var(--neon-high)]"></span> Écouter
</h2>
<div className="h-px bg-[var(--neon-high)]/20 flex-grow" />
</div>
{embedSrc && (
<div className="mb-6 rounded-xl overflow-hidden border border-white/[0.06]">
<iframe
src={embedSrc}
width="100%"
height={embedSrc.includes('youtube') ? 315 : 166}
className={embedSrc.includes('youtube') ? 'aspect-video w-full' : ''}
frameBorder="0"
allow="autoplay; encrypted-media"
loading="lazy"
style={{ border: 0 }}
/>
</div>
)}
<div className="flex flex-wrap gap-3">
{links.map(({ url, label }) => (
<a
key={url}
href={url}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 px-5 py-2.5 text-xs font-display font-semibold tracking-wider rounded-full border border-white/10 text-[var(--text-muted)] hover:text-white hover:border-[var(--neon-high)]/40 transition-all duration-200"
>
{label}
</a>
))}
</div> </div>
</div> </div>
); );
}; }
function detectPlatform(url) {
if (!url) return 'Lien';
if (url.includes('bandcamp')) return 'Bandcamp';
if (url.includes('soundcloud')) return 'SoundCloud';
if (url.includes('youtube')) return 'YouTube';
if (url.includes('archive.org')) return 'Archive.org';
if (url.includes('spotify')) return 'Spotify';
return 'Écouter';
}
function getEmbedUrl(url) {
if (!url) return null;
if (url.includes('soundcloud.com/')) {
return `https://w.soundcloud.com/player/?visual=true&url=${encodeURIComponent(url)}&color=%23a700d1&auto_play=false&show_artwork=true`;
}
if (url.includes('archive.org/details/')) {
const id = url.split('/details/')[1]?.split(/[?#]/)[0];
return `https://archive.org/embed/${id}`;
}
// Bandcamp embeds need numeric IDs — link-only fallback
return null;
}
export default function LiveEvent({ live, images, tracks, isPostEvent: initialPostEvent }) {
const [phase, setPhase] = useState(initialPostEvent ? 'post' : 'early');
const isPostEvent = initialPostEvent;
useEffect(() => {
Prism.highlightAll();
}, [live, phase]);
const fm = live.frontmatter;
const eventDate = new Date((fm.date || '') + 'T00:00:00');
const dateStr = isNaN(eventDate.getTime()) ? null : format(eventDate, 'dd MMMM yyyy', { locale: fr });
const hasMedia = fm.audio || fm.video || fm.archive;
const title = fm.title || live.slug;
const location = fm.location || '';
return ( return (
<Layout title={`${live.title} - ParVagues`}> <Layout title={`${title} - ParVagues`}>
<div className="max-w-4xl mx-auto"> <div className="max-w-4xl mx-auto px-6 pt-24 pb-16">
{/* Header Info */} {/* Header */}
<div className="text-center mb-16"> <div className="text-center mb-12">
<div className="inline-block px-3 py-1 mb-4 text-xs font-mono text-purple-300 border border-purple-500/30 rounded-full"> {dateStr && (
{(() => { <div className="inline-block px-3 py-1 mb-4 text-xs font-mono text-[var(--neon-high)] border border-[var(--neon-high)]/30 rounded-full">
const date = new Date(live.date); {dateStr}
return isNaN(date.getTime()) ? 'Date TBD' : format(date, 'dd MMMM yyyy', { locale: fr }); </div>
})()} )}
</div> <h1 className="font-display text-4xl md:text-6xl font-extrabold mb-4 tracking-tight">
<h1 className="text-4xl md:text-6xl font-bold mb-4 bg-gradient-to-r from-white to-gray-400 bg-clip-text text-transparent"> {title}
{live.title}
</h1> </h1>
<p className="text-xl text-gray-400 flex items-center justify-center gap-2"> {location && (
<span className="w-2 h-2 bg-purple-500 rounded-full animate-pulse"></span> <p className="text-lg text-[var(--text-muted)] flex items-center justify-center gap-2">
{live.location} <span className="w-2 h-2 bg-[var(--neon-high)] rounded-full" style={{ opacity: isPostEvent ? 0.4 : 1, animation: isPostEvent ? 'none' : 'pulse 2s infinite' }} />
{location}
</p> </p>
)}
</div> </div>
{/* Poster */} {/* Poster */}
{live.frontmatter.poster && ( {fm.poster && (
<div className="mb-16 rounded-2xl overflow-hidden border border-white/[0.06]"> <div className="mb-12 rounded-2xl overflow-hidden border border-white/[0.06]">
<Image <Image
src={live.frontmatter.poster} src={fm.poster}
alt={`${live.title} poster`} alt={`${title} poster`}
width={1200} width={1200}
height={1710} height={1710}
className="w-full h-auto" className="w-full h-auto"
...@@ -156,25 +205,43 @@ export default function LiveEvent({ live, images, tracks }) { ...@@ -156,25 +205,43 @@ export default function LiveEvent({ live, images, tracks }) {
</div> </div>
)} )}
{/* Countdown / Teasing */} {/* Countdown for future events */}
{!isPostEvent && getTeasingContent()} {!isPostEvent && (
<div className="text-center mb-12">
<div className="inline-block p-6 bg-black/50 backdrop-blur-md rounded-xl border border-[var(--neon-high)]/30 shadow-[0_0_30px_rgba(137,0,179,0.2)]">
<h3 className="text-[var(--neon-high)] mb-4 font-mono text-sm">&gt; INITIALIZING_EVENT</h3>
<Countdown targetDate={fm.date} onPhaseChange={setPhase} />
</div>
</div>
)}
{/* Audio/Video Recording */}
{hasMedia && (
<MediaSection
audio={fm.audio}
video={fm.video}
archive={fm.archive}
/>
)}
{/* Main Content */} {/* Main Content */}
{live.content && live.content.trim() && (
<div className="prose prose-invert prose-purple max-w-none mb-16 bg-black/30 p-8 rounded-2xl border border-white/5"> <div className="prose prose-invert prose-purple max-w-none mb-16 bg-black/30 p-8 rounded-2xl border border-white/5">
<ReactMarkdown>{live.content}</ReactMarkdown> <ReactMarkdown>{live.content}</ReactMarkdown>
</div> </div>
)}
{/* Tracks & Code */} {/* Tracks & Code */}
<TracksSection tracks={tracks} /> <TracksSection tracks={tracks} />
{/* Gallery (Post-event or if images exist) */} {/* Gallery */}
{images && images.length > 0 && ( {images && images.length > 0 && (
<div className="mb-16"> <div className="mb-16">
<div className="flex items-center gap-4 mb-8"> <div className="flex items-center gap-4 mb-8">
<h2 className="text-2xl font-bold text-white"> <h2 className="font-display text-2xl font-bold text-white">
<span className="text-purple-500">#</span> Galerie <span className="text-[var(--neon-high)]">#</span> Galerie
</h2> </h2>
<div className="h-px bg-purple-500/30 flex-grow"></div> <div className="h-px bg-[var(--neon-high)]/20 flex-grow" />
</div> </div>
<ImageGallery images={images} /> <ImageGallery images={images} />
</div> </div>
...@@ -198,11 +265,14 @@ export async function getStaticProps({ params }) { ...@@ -198,11 +265,14 @@ export async function getStaticProps({ params }) {
const images = getLivesImages(params.slug); const images = getLivesImages(params.slug);
const tracks = getLiveTracks(params.slug); const tracks = getLiveTracks(params.slug);
const isPostEvent = new Date() > new Date((live.frontmatter?.date || '2099-01-01') + 'T23:59:59');
return { return {
props: { props: {
live, live,
images, images,
tracks, tracks,
isPostEvent,
}, },
revalidate: 60, revalidate: 60,
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment