1<!DOCTYPE html><html data-wf-page="688a54756c71954566b98f1b" data-wf-site="6888085c617ef31b88797ced" lang="en"><head> 2 <meta charset="utf-8"> 3 <title>Stefan Prins | Blog</title> 4 <meta content="Stefan Prins is a Belgian composer whose music reflects on contemporary technologies and new media. He is co-artistic director of the Nadar Ensemble." name="description"> 5 <meta content="Stefan Prins | Blog" property="og:title"> 6 <meta content="Stefan Prins is a Belgian composer whose music reflects on contemporary technologies and new media. He is co-artistic director of the Nadar Ensemble." property="og:description"> 7 <meta content="https://cdn.prod.website-files.com/6888085c617ef31b88797ced/688a2e4f07aed07d7aa475cd_prins-cloud_chamber_copyright-Laurent_Orseau.png" property="og:image"> 8 <meta content="Stefan Prins | Blog" property="twitter:title"> 9 <meta content="Stefan Prins is a Belgian composer whose music reflects on contemporary technologies and new media. He is co-artistic director of the Nadar Ensemble." property="twitter:description"> 10 <meta content="https://cdn.prod.website-files.com/6888085c617ef31b88797ced/688a2e4f07aed07d7aa475cd_prins-cloud_chamber_copyright-Laurent_Orseau.png" property="twitter:image"> 11 <meta property="og:type" content="website"> 12 <meta content="summary_large_image" name="twitter:card"> 13 <meta content="width=device-width, initial-scale=1" name="viewport"> 14 <link href="css/normalize.css" rel="stylesheet" type="text/css"> 15 <link href="css/components.css" rel="stylesheet" type="text/css"> 16 <link href="css/stefan-prins.css" rel="stylesheet" type="text/css"> 17
17<script src="https://use.typekit.net/aiz3xhz.js" type="text/javascript"></script>
17 18
18<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
18 19
19<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
19 20 <link href="images/favicon.png" rel="shortcut icon" type="image/x-icon"> 21 <link href="images/webclip.png" rel="apple-touch-icon"> 22
22<script async="" src="https://cdn.jsdelivr.net/npm/@finsweet/cookie-consent@1/fs-cc.js" fs-cc-mode="opt-in"></script>
22 23 <style> 24 * { 25 -webkit-font-smoothing: antialiased; 26 -moz-osx-font-smoothing: grayscale; 27 } 28 .w-nav-overlay{ 29 top:0; 30 } 31 html { 32 scroll-behavior: smooth 33 } 34 [id] { 35 scroll-margin-top: 4rem; 36 } 37 .w-richtext a img:hover{ 38 cursor:pointer; 39 opacity: 0.5; 40 transform: scale(0.98); 41 } 42 .w-richtext a img{ 43 transition: 0.4s all; 44 } 45</style> 46 <style> 47 .youtube { 48 background-color: #939393; 49 position: relative; 50 overflow: hidden; 51 cursor: pointer; 52 min-height:150px; 53 padding-top:56.25%; 54 } 55 .youtube img { 56 top:0; 57 left: 0; 58 height: 100%; 59 width: 100%; 60 object-fit: cover; 61 } 62 .youtube img, 63 .youtube iframe { 64 overflow: hidden; 65 } 66 .youtube .play-button { 67 width: 60px; 68 height: 60px; 69 z-index: 1; 70 opacity: 1; 71 display: flex; 72 align-items: center; 73 justify-content: center; 74 } 75 .youtube img, 76 .youtube .play-button { 77 cursor: pointer; 78 } 79 .youtube img, 80 .youtube iframe, 81 .youtube .play-button, 82 .youtube .play-button:before { 83 position: absolute; 84 } 85 .youtube .play-button, 86 .youtube .play-button:before { 87 top: 50%; left: 50%; transform: translate3d( -50%, -50%, 0 ); 88 } 89 .youtube iframe { 90 height: 100%; width: 100%; top: 0; left: 0; 91 } 92 .w-lightbox-backdrop { 93 z-index:9999999; 94 } 95</style> 96 <link rel="stylesheet" href="https://cdn.plyr.io/3.7.8/plyr.css"> 97
97<script async="" src="https://cdn.jsdelivr.net/npm/@finsweet/attributes-cmsload@1/cmsload.js"></script>
97 98
98<script defer="" data-domain="stefanprins.net" src="https://v2.analytics.dreher-media.de/js/script.file-downloads.hash.outbound-links.js"></script>
98 99</head> 100<body> 101 <div class="page-wrapper"> 102 <div class="cookie-consent"> 103 <div fs-cc="banner" class="cc-banner_component"> 104 <div class="fs-cc-banner2_container"> 105 <div class="fs-cc-banner2_text">By clicking âAcceptâ, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our <a href="privacy-policy.html" class="fs-cc-banner2_text-link">Privacy Policy</a> for more information.</div> 106 <div class="fs-cc-banner2_buttons-wrapper"> 107 <a fs-cc="deny" href="#" class="fs-cc-banner2_button fs-cc-button-alt w-button">Deny</a> 108 <a fs-cc="allow" href="#" class="fs-cc-banner2_button w-button">Accept</a> 109 </div> 110 </div> 111 </div> 112 <div fs-cc="manager" class="cc-manager_component"> 113 <div fs-cc="open-preferences" role="button" tabindex="0" title="Cookie Preferences" aria-label="Cookie Preferences" class="fs-cc-manager2_button w-embed"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 114 <path d="M9 8L9 8.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 115 <path d="M16 15L16 15.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 116 <path d="M10 17L10 17.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 117 <path d="M11 13L11 13.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 118 <path d="M6 12L6 12.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 119 <path d="M12 21C16.9706 21 21 16.9706 21 12C21 11.4402 20.9489 10.8924 20.8511 10.361C20.3413 10.7613 19.6985 11 19 11C18.4536 11 17.9413 10.8539 17.5 10.5987C17.0587 10.8539 16.5464 11 16 11C14.3431 11 13 9.65685 13 8C13 7.60975 13.0745 7.23691 13.2101 6.89492C11.9365 6.54821 11 5.38347 11 4C11 3.66387 11.0553 3.34065 11.1572 3.03894C6.58185 3.46383 3 7.31362 3 12C3 16.9706 7.02944 21 12 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 120 </svg></div> 121 </div> 122 <div fs-cc-scroll="disable" fs-cc="preferences" class="cc-prefs_component"> 123 <div class="fs-cc-prefs2_form-wrapper w-form"> 124 <form id="cookie-preferences" name="wf-form-Cookie-Preferences" data-name="Cookie Preferences" method="get" class="fs-cc-prefs2_form" data-wf-page-id="688a54756c71954566b98f1b" data-wf-element-id="c4bd1fb6-5502-677d-1794-351bc3102070"> 125 <div fs-cc="close" class="fs-cc-prefs2_close"> 126 <div class="fs-cc-preferences2_close-icon w-embed"><svg fill="currentColor" aria-hidden="true" focusable="false" viewBox="0 0 16 16"> 127 <path d="M9.414 8l4.293-4.293-1.414-1.414L8 6.586 3.707 2.293 2.293 3.707 6.586 8l-4.293 4.293 1.414 1.414L8 9.414l4.293 4.293 1.414-1.414L9.414 8z"></path> 128 </svg></div> 129 </div> 130 <div class="fs-cc-prefs2_content"> 131 <div class="fs-cc-prefs2_space-small"> 132 <div class="fs-cc-prefs2_title">Privacy Preferences</div> 133 </div> 134 <div class="fs-cc-prefs2_option"> 135 <div class="fs-cc-prefs2_toggle-wrapper"> 136 <div class="fs-cc-prefs2_label">Essential cookies</div> 137 <div>Required</div> 138 </div> 139 </div> 140 <div class="fs-cc-prefs2_option"> 141 <div class="fs-cc-prefs2_toggle-wrapper"> 142 <div class="fs-cc-prefs2_label">Marketing cookies</div><label class="w-checkbox fs-cc-prefs2_checkbox-field"> 143 <div class="w-checkbox-input w-checkbox-input--inputType-custom fs-cc-prefs2_checkbox"></div><input type="checkbox" id="marketing-2" name="marketing-2" data-name="Marketing 2" fs-cc-checkbox="marketing" style="opacity:0;position:absolute;z-index:-1"><span for="marketing-2" class="fs-cc-prefs2_checkbox-label w-form-label">Essential</span> 144 </label> 145 </div> 146 </div> 147 <div class="fs-cc-prefs2_option"> 148 <div class="fs-cc-prefs2_toggle-wrapper"> 149 <div class="fs-cc-prefs2_label">Personalization cookies</div><label class="w-checkbox fs-cc-prefs2_checkbox-field"> 150 <div class="w-checkbox-input w-checkbox-input--inputType-custom fs-cc-prefs2_checkbox"></div><input type="checkbox" id="personalization-2" name="personalization-2" data-name="Personalization 2" fs-cc-checkbox="personalization" style="opacity:0;position:absolute;z-index:-1"><span for="personalization-2" class="fs-cc-prefs2_checkbox-label w-form-label">Essential</span> 151 </label> 152 </div> 153 </div> 154 <div class="fs-cc-prefs2_option"> 155 <div class="fs-cc-prefs2_toggle-wrapper"> 156 <div class="fs-cc-prefs2_label">Analytics cookies</div><label class="w-checkbox fs-cc-prefs2_checkbox-field"> 157 <div class="w-checkbox-input w-checkbox-input--inputType-custom fs-cc-prefs2_checkbox"></div><input type="checkbox" id="analytics-2" name="analytics-2" data-name="Analytics 2" fs-cc-checkbox="analytics" style="opacity:0;position:absolute;z-index:-1"><span for="analytics-2" class="fs-cc-prefs2_checkbox-label w-form-label">Essential</span> 158 </label> 159 </div> 160 </div> 161 <div class="fs-cc-prefs2_buttons-wrapper"> 162 <a fs-cc="deny" href="#" class="fs-cc-prefs2_button fs-cc-button-alt w-button">
162Reject all cookies</a> 163 <a fs-cc="allow" href="#" class="fs-cc-prefs2_button w-button">Allow all cookies</a> 164 <a fs-cc="submit" href="#" class="fs-cc-prefs2_submit w-button">Save preferences</a> 165 </div> 166 </div> 167 </form> 168 <div class="form-done"></div> 169 <div class="form-fail"></div> 170 <div fs-cc="close" class="fs-cc-prefs2_overlay"></div> 171 </div> 172 </div> 173 </div> 174 <div class="global-styles w-embed"> 175 <style> 176/* Snippet gets rid of top margin on first element in any rich text*/ 177.w-richtext>:first-child { 178 margin-top: 0; 179} 180/* Snippet gets rid of bottom margin on last element in any rich text*/ 181.w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child { 182 margin-bottom: 0; 183} 184/* Snippet makes all link elements listed below to inherit color from their parent */ 185a, 186.w-tab-link, 187.w-nav-link, 188.w-dropdown-btn, 189.w-dropdown-toggle, 190.w-dropdown-link 191{ 192color: inherit; 193} 194/* Snippet prevents all click and hover interaction with an element */ 195.clickable-off { 196 pointer-events: none; 197} 198/* Snippet enables all click and hover interaction with an element */ 199.clickable-on{ 200 pointer-events: auto; 201} 202/* Snippet enables you to add class of div-square which creates and maintains a 1:1 dimension of a div.*/ 203.div-square::after { 204 content: ""; 205 display: block; 206 padding-bottom: 100%; 207} 208/*Hide focus outline for main content element*/ 209 main:focus-visible { 210 outline: -webkit-focus-ring-color auto 0px; 211} 212/* Make sure containers never lose their center alignment*/ 213.container-medium, .container-small, .container-large { 214 margin-right: auto !important; 215 margin-left: auto !important; 216} 217/*Reset selects, buttons, and links styles*/ 218.w-input, .w-select, a { 219color: inherit; 220text-decoration: inherit; 221font-size: inherit; 222} 223/*Apply "..." after 3 lines of text */ 224.text-style-3lines { 225 display: -webkit-box; 226 overflow: hidden; 227 -webkit-line-clamp: 3; 228 -webkit-box-orient: vertical; 229} 230/* Apply "..." after 2 lines of text */ 231.text-style-2lines { 232 display: -webkit-box; 233 overflow: hidden; 234 -webkit-line-clamp: 2; 235 -webkit-box-orient: vertical; 236} 237/* Apply "..." at 100% width */ 238.truncate-width { 239 width: 100%; 240 white-space: nowrap; 241 overflow: hidden; 242 text-overflow: ellipsis; 243} 244/* Removes native scrollbar */ 245.no-scrollbar { 246 -ms-overflow-style: none; // IE 10+ 247 overflow: -moz-scrollbars-none; // Firefox 248} 249.no-scrollbar::-webkit-scrollbar {
250 display: none; // Safari and Chrome 251} 252</style> 253 </div> 254 <div data-w-id="ce85d16e-26b7-7573-f811-840851a2151f" class="nav-overlay-trigger"></div> 255 <main class="main-wrapper"> 256 <div data-animation="over-right" class="navbar16_component-2 w-nav" data-wf--navbar--variant="base" data-easing2="ease-in-out" fs-scrolldisable-element="smart-nav" data-easing="ease-in-out" data-collapse="all" data-w-id="1796619c-210e-7b56-7325-c9d40848c13b" role="banner" data-no-scroll="1" data-duration="300" data-doc-height="1"> 257 <div class="navbar16_container-3 is-home"> 258 <a href="#" class="nav-logo-wrapper mobil-hidden w-inline-block"><img loading="eager" src="images/BLOG_1.svg" alt="" class="nav-logo-big"></a> 259 <div class="navbar16_wrapper-2"> 260 <nav role="navigation" class="navbar16_menu-3 w-nav-menu"> 261 <div class="navbar16_menu-wrapper-2"> 262 <div class="navbar16_links-wrapper-2"> 263 <a href="index.html" class="navbar16_link-2 w-nav-link">Home</a> 264 <a href="about.html" class="navbar16_link-2 w-nav-link">About</a> 265 <a href="news.html" class="navbar16_link-2 w-nav-link">News</a> 266 <a href="calendar.html" class="navbar16_link-2 w-nav-link">Calendar</a> 267 <a href="latest-work.html" class="navbar16_link-2 w-nav-link">Latest Work</a> 268 <a href="works.html" class="navbar16_link-2 w-nav-link">All Works</a> 269 <a href="media.html" class="navbar16_link-2 w-nav-link">Media</a> 270 <a href="/media#compositions" class="navbar16_link-2 media w-nav-link">COMPOSITIONS</a> 271 <a href="/media#improvisations" class="navbar16_link-2 media w-nav-link">IMPROVISATIONS</a> 272 <a href="/media#publications" class="navbar16_link-2 media w-nav-link">PUBLICATIONS</a> 273 <a href="/media#press" class="navbar16_link-2 media w-nav-link">PRESS</a> 274 <a href="/media#features" class="navbar16_link-2 media w-nav-link">Features</a> 275 <a href="/media#gallery" class="navbar16_link-2 media margin-bottom-bigger w-nav-link">Gallery</a> 276 <a href="blog.html" aria-current="page" class="navbar16_link-2 w-nav-link w--current">Blog</a> 277 <a href="/#contact" class="navbar16_link-2 w-nav-link">Contact</a> 278 </div> 279 </div> 280 </nav> 281 <div class="navbar16_menu-button-2 w-nav-button"> 282 <div class="menu-icon4-2"> 283 <div class="menu-icon4_wrapper-2"> 284 <div class="menu-icon4_line-top-2"></div> 285 <div class="middle-line-wrapper"> 286 <div class="menu-icon4_line-middle-2"></div> 287 <div class="menu-icon4_line-middle--when-open-2"></div> 288 </div> 289 <div class="menu-icon4_line-bottom-2"></div> 290 </div> 291 </div> 292 </div> 293 </div> 294 </div> 295 </div> 296 <header class="hero-section"> 297 <div class="hero-contents"> 298 <div class="hero-container padding-top"><img src="images/BLOG_1.svg" loading="eager" alt="" class="hero-heading blog"></div> 299 </div><img class="hero-img" src="/assets/6ecf75f8-ee33-4c63-b05a-000524a5650b/BLOG-PIC.webp" alt="" style="-webkit-transform: translate3d(0, 0, 0) scale3d(1.2, 1.2, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0); -moz-transform: translate3d(0, 0, 0) scale3d(1.2, 1.2, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0); -ms-transform: translate3d(0, 0, 0) scale3d(1.2, 1.2, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0); transform: translate3d(0, 0, 0) scale3d(1.2, 1.2, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0); object-position: 50.04% 61.02%;" loading="eager"> 300 <div class="hero-slide-contents"> 301 <div class="padding-global height-100"> 302 <div class="container-large bigger height-100"> 303 <div class="flex-bottom-left"> 304 <div class="text-color-secondary"> 305 <div class="h5-text" style="display: none;">LOREM IPSUM DOLOR SIT | Lorem Ipsum dolor sit</div> 306 </div> 307 </div> 308 </div> 309 </div> 310 </div> 311 </header> 312 <section> 313 <div class="padding-global"> 314 <div class="container-large"> 315 <div class="margin-section-large"> 316 <div class="blog-items-wrapper"><div class="section-grid is-blog-item"> 317 <div class="width-50"> 318 <div data-w-id="713918a3-d373-292e-a03c-864b2640b5cc" class="slidein-wrapper"> 319 <div class="slidein-contents"> 320 <div class="light-section"> 321 <div class="blog-padding"> 322 <div class="margin-bottom64"> 323 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 324 <div class="section-heading-inline"> 325 <div class="bg-line-wrapper"></div> 326 <div class="bg-line-wrapper left"></div> 327 <div class="z-index-2"> 328 <div class="section-heading-padding"> 329 <div class="text-color-secondary"> 330 <div class="text-align-center"> 331 <h2 class="h2-text uppercase">Double bass week</h2> 332 </div> 333 </div> 334 </div> 335 </div> 336 </div> 337 </div> 338 </div> 339 <div class="padding-horizontal-50"> 340 <div class="margin-bottom30"> 341 <div class="text-color-secondary"> 342 <h3 class="h4-text krok">07.03.2026</h3> 343 </div> 344 </div> 345 <div class="margin-bottom20"> 346 <div class="h6-text w-richtext"><p>Last week was double bass week! On two consecutive nights I got to collaborate with two of my favorite double bass players. First, on 28.2, Florentin Ginot premiered the piece I composed for him last year, <em>To the</em> <em>bone</em>, for double bass and FX pedals at the Concertgebouw Brugge. I got to know Florentin personally when I was invited to collaborate with the formidable musikFabrik ensemble in 2018. After that project, Florentin approached me for other collaborations, first with musikFabrik, and later in different projects as a duo with him, each time in an improvisational context, where I would play live-electronics. One project was rather dark, with machines that would deteriorate and melt during the performance. The other, a <a href="https://www.youtube.com/watch?v=B-8gIeG5P8Y"> video work</a>, in collaboration with video artist Janet Sinica, was much lighter and slightly absurd.</p> 347<p>A bit later, in 2023 I told Florentin: "I want to write a composition for you! Are you in?". He was, and proposed to write a piece that would include his ever growing FX pedal setup. And then serendipity helped us a bit. When I mentioned this project in an informal talk with Jan De Moor of the Concertgebouw Brugge, his eyes started shining just a shade brighter, and proposed to commission this work. And after a lovely experience with the Frequenz_ Kiel Festival several years earlier, I contacted its curator, Sherif El Razzaz, who agreed on becoming the second commissioner.</p> 348<p> </p> 349<p>"To the bone" was actually written twice. A first version was finished in May 2025. When we workshopped the fresh score at the musikFabrik studios shortly thereafter, Florentin accidentally amplified his bass too much at one point, creating a beautiful, deep, room-filling feedback sound. We dived into this black (feedback) hole, and when I got home that evening, I threw away about a third of the composition and started working on a new version, which would incorporate this new material. Two months later, the second version was ready. <a href="https://www.youtube.com/watch?v=bEFxfVUVRi8">Here</a> you can see the live performance from the premiere at the Concertgebouw Brugge on 28.2.2026.</p> 350<p> </p> 351<p>"To the bone" was not only inspired by Florentin's playing and setup, but also by my long-time collaboration with Belgian double bass improviser <a href="https://www.jacquemyn.com">Peter Jacquemyn</a> and his approach to the instrument. It was wonderful then, that, the day after the premiere of <em>To the bone</em>, I could play an improvised set with Peter Jacquemyn in a squat in Brussels. As always, playing with Peter is walking - no, running and jumping - on a razor's edge: exploding energy, quick changes and constant twists and turns. Not for the week of heart! But truly invigorating (at least for me!). Our duo recordings are already 10 years old, and we pledged to make some new recordings in the near future. Now let's wait for serendipity to do its work. For now, you can hear one track <a href="https://soundcloud.com/stefan-prins/cloudchamber-altostratustranslucidisundulatus">here</a> (if you want to buy the full album, you can drop me a note). </p></div> 352 </div> 353 <div class="text-align-right"> 354 <a href="https://www.youtube.com/watch?v=bEFxfVUVRi8" class="btn w-inline-block" target="_blank"> 355 <div>More</div> 356 </a> 357 </div> 358 </div> 359 </div> 360 </div> 361 </div> 362 <div class="slidein-overlay"></div> 363 </div> 364 </div> 365 <div class="width-50 img"> 366 <div data-w-id="d5edb5e7-4f8f-bf5a-0a97-fa8c4f467f4c" class="slidein-wrapper"> 367 <div class="slidein-contents"> 368 <a href="https://www.youtube.com/watch?v=bEFxfVUVRi8" class="is-relative w-inline-block" target="_blank"> 369 <div class="absolut-img-wrapper"><img src="/assets/d4389197-f26b-4f65-8085-c99a43e10edd/double_bass_week.webp" loading="eager" alt="Double bass week" class="absolut-img" style="object-position: 50.00% 50.00%;"></div> 370 </a> 371 </div> 372 <div class="slidein-overlay"></div> 373 </div> 374 </div> 375 </div><div class="section-grid is-blog-item"> 376 <div class="width-50"> 377 <div data-w-id="713918a3-d373-292e-a03c-864b2640b5cc" class="slidein-wrapper"> 378 <div class="slidein-contents"> 379 <div class="light-section"> 380 <div class="blog-padding"> 381 <div class="margin-bottom64"> 382 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 383 <div class="section-heading-inline"> 384 <div class="bg-line-wrapper"></div> 385 <div class="bg-line-wrapper left"></div> 386 <div class="z-index-2"> 387 <div class="section-heading-padding"> 388 <div class="text-color-secondary"> 389 <div class="text-align-center"> 390 <h2 class="h2-text uppercase">Cyborg Flesh: take 2</h2> 391 </div> 392 </div> 393 </div> 394 </div> 395 </div> 396 </div> 397 </div> 398 <div class="padding-horizontal-50"> 399 <div class="margin-bottom30"> 400 <div class="text-color-secondary"> 401 <h3 class="h4-text krok">10.09.2025</h3> 402 </div> 403 </div> 404 <div class="margin-bottom20"> 405 <div class="h6-text w-richtext"><p><em>Cyborg Flesh</em>, a 55-minute long composition for string quartet (Arditti Quartet), e-guitar (Yaron Deutsch) and live-electronics (me), was supposed to be premiered at the Wien Modern festival in November 2024, to celebrate the 50th anniversary of the Arditti Quartet.</p> 406<p> </p> 407<p>One week before the premiere, however, Lukas Fels broke his arm. The premiere had to be postponed to 2025, and the planned second performance at the Rainy Days Festival in Luxembourg, to 2026. However, Catherine Kontz, artistic director of Rainy Days, was so kind to still offer us the stage at the planned date, and proposed that we work out a concert program without Lukas and his cello. For this concert I proposed a 50-minute musical structure <em>(Broken|Glued)</em> that moves seamlessly between several sections of <em>Cyborg Flesh</em>, some improvisations, Klaus Lang's electric guitar solo <em>Chansons Lointaine et douce, </em>and Hilda Paredes' transcription of Dowland's <em>In Darkness Let me Dwell</em>, with the electric guitar replacing the cello. </p> 408<p> </p> 409<p>Lukas has recovered fully by now (hurray!), and the true premiere of <em>Cyborg Flesh</em> is approaching quickly (31/10/2025). I've started to reacquaint myself with this work, which I worked on for about a year (July 2023 to July 2024), but which, right now, still feels like a <em>fremdkörper</em>, after having had to put it in the fridge for a year. Perhaps that is how it feels to have cyborg flesh?</p> 410<p> </p> 411<p>Cyborg Flesh is a commission by the Arditti Quartet, Wien Modern & Rainy Days Festival, supported financially by the Ernst von Siemens Musikstiftung.</p></div> 412 </div> 413 <div class="text-align-right"> 414 <a href="https://www.wienmodern.at/2025-arditti-511-de-4315" class="btn w-inline-block" target="_blank"> 415 <div>More</div> 416 </a> 417 </div> 418 </div> 419 </div> 420 </div> 421 </div> 422 <div class="slidein-overlay"></div> 423 </div> 424 </div> 425 <div class="width-50 img"> 426 <div data-w-id="d5edb5e7-4f8f-bf5a-0a97-fa8c4f467f4c" class="slidein-wrapper"> 427 <div class="slidein-contents"> 428 <a href="https://www.wienmodern.at/2025-arditti-511-de-4315" class="is-relative w-inline-block" target="_blank"> 429 <div class="absolut-img-wrapper"><img src="/assets/6121bdf7-ed55-4c52-822c-16e8e959a9cf/cyborgflesh-preps-2.webp" loading="eager" alt="Cyborg Flesh: take 2" class="absolut-img" style="object-position: 50.00% 50.00%;"></div> 430 </a> 431 </div> 432 <div class="slidein-overlay"></div> 433 </div> 434 </div> 435 </div></div> 436 </div> 437 </div> 438 </div> 439 </section> 440 <footer class="footer"> 441 <div class="w-layout-grid footer_grid"> 442 <div id="w-node-_3f8a519d-e42a-33a3-9e93-b9a22482b781-2482b77f" class="footer_wrapper"> 443 <a href="imprint.html" class="w-inline-block"> 444 <div class="coopyright_text created">Imprint</div> 445 </a> 446 <div class="coopyright_text created">|</div> 447 <a href="privacy-policy.html" class="w-inline-block"> 448 <div
448 class="coopyright_text created">Privacy Policy</div> 449 </a> 450 </div> 451 <div id="w-node-_3f8a519d-e42a-33a3-9e93-b9a22482b788-2482b77f" class="coopyright_text">©<span class="copyright-year">YEAR</span> Stefan Prins</div> 452 <div id="w-node-_3f8a519d-e42a-33a3-9e93-b9a22482b78a-2482b77f" class="footer_wrapper"> 453 <div class="coopyright_text created">created by</div> 454 <a href="https://www.dreher-media.de" target="_blank" class="w-inline-block"><img src="images/dreher.media-logo_website-white.svg" loading="lazy" alt="" class="dreher-media-logo"></a> 455 </div> 456 </div> 457 </footer> 458 </main> 459 </div> 460
460<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=6888085c617ef31b88797ced" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
460 461
461<script src="js/stefan-prins.js" type="text/javascript"></script>
461 462
462<script> 463 // Functionality for fs-cc-reject 464 let initFsCCListener = false; 465 function handleFsCcReject() { 466 if (!window.FsCC) { 467 setTimeout(handleFsCcReject, 200); 468 return; 469 } 470 if (!initFsCCListener) { 471 // Add a listener for changes in consent preferences 472 window.FsCC.consentController.on('updateconsents', (consents) => { 473 handleFsCcReject(); // Run the function whenever consent changes 474 }); 475 } 476 // Iterate through all elements with fs-cc-reject attributes 477 document.querySelectorAll('[fs-cc-reject]').forEach((rejectElement) => { 478 const category = rejectElement.getAttribute('fs-cc-reject'); // Get the consent category 479 const isConsentGiven = window.FsCC.store.consents[category]; // Check if consent is granted for the category 480 const consentElement = document.querySelector('[fs-cc="' + category + '"]'); // Find the corresponding fs-cc element 481 // Toggle visibility based on consent state 482 if (isConsentGiven) { 483 rejectElement.style.display = 'none'; // Hide the reject element 484 if (consentElement) consentElement.style.display = 'block'; // Show the consented content 485 } else { 486 rejectElement.style.display = 'block'; // Show the reject element 487 if (consentElement) consentElement.style.display = 'none'; // Hide the consented content 488 } 489 }); 490 } 491 // Run the script on page load 492 document.addEventListener('DOMContentLoaded', handleFsCcReject); 493</script>
493 494
494<script> 495 Webflow.push(function() { 496 $('.copyright-year').text(new Date().getFullYear()); 497 }); 498 Webflow.push(function() { 499 //DISABLE WEBFLOW SMOOTH SCROLL 500 $(function() { 501 $(document).off('click.wf-scroll'); 502 }); 503 }); 504 window.addEventListener('load', (event) => { 505 const routeName = window.location.pathname?.split('/')?.slice(-1)?.[0] 506 document 507 .querySelectorAll('a[href*="' + routeName + '"]') 508 ?.forEach((el) => el?.classList?.add('w--current')) 509 }) 510 function addSeparatorsByDataAttribute() { 511 // Find all elements in the document 512 const matchingElements = document.querySelectorAll('[data-separator]'); 513 // Process each matching element 514 matchingElements.forEach(element => { 515 // Get the separator text from the data-separator attribute 516 const separatorText = element.getAttribute('data-separator'); 517 // Get all child elements of the current element 518 const children = Array.from(element.children); 519 // Iterate through the children and insert separators 520 children.forEach((child, index) => { 521 if (index < children.length - 1) { // No separator after the last child 522 // Create a new separator element (you could change this to suit) 523 const separator = document.createElement('span'); 524 separator.innerHTML = ' ' + separatorText + ' '; // Set separator text 525 // Insert the separator after the current child 526 child.insertAdjacentElement('afterend', separator); 527 } 528 }); 529 }); 530 } 531 addSeparatorsByDataAttribute(); 532 document.querySelectorAll('.tab-link') 533 ?.forEach((el) => el.addEventListener('click', (event) => { 534 const tabGroup = el.dataset.tabGroup; 535 if (tabGroup) { 536 document.querySelector('.tab-link.active[data-tab-group="' + tabGroup + '"]')?.classList?.remove('active') 537 } else { 538 el.parentNode.querySelector('.tab-link.active')?.classList?.remove('active') 539 } 540 el.classList.add('active') 541 })) 542 document.querySelectorAll('.biography-lang-links .tab-link') 543 ?.forEach((el) => el.addEventListener('click', (event) => { 544 const lang = el.dataset?.lang 545 document.querySelectorAll('.biography-text:not(.' + lang + ')') 546 ?.forEach((bioEl) => bioEl.style.display = 'none') 547 document.querySelectorAll('.biography-text.' + lang) 548 ?.forEach((bioEl) => bioEl.style.display = 'block') 549 })) 550 document.querySelectorAll('.tab-link[data-tab-id]') 551 ?.forEach(function(el) { 552 el.addEventListener('click', function(event) { 553 var tabId = el.dataset ? el.dataset.tabId : null; 554 var tabGroup = el.dataset ? el.dataset.tabGroup : null; 555 // Build a selector for the containers we want to control 556 // Only target NON-tab-link elements that have data-tab-id 557 var baseSelector = ':not(.tab-link)[data-tab-id]'; 558 // If the clicked tab belongs to a group, limit to the same group 559 if (tabGroup) { 560 baseSelector += '[data-tab-group="' + tabGroup + '"]'; 561 } 562 // Hide containers in scope that don't match the tabId 563 document.querySelectorAll(baseSelector + ':not([data-tab-id*="' + tabId + '"])') 564 ?.forEach(function(tabEl) { 565 tabEl.style.display = 'none'; 566 }); 567 // Show containers in scope that match the tabId 568 document.querySelectorAll(baseSelector + '[data-tab-id*="' + tabId + '"]') 569 ?.forEach(function(tabEl) { 570 tabEl.style.display = 'block'; 571 }); 572 }); 573 }); 574 const videoSwipers = [] 575</script>
575 576
576<script src="https://cdn.plyr.io/3.7.8/plyr.polyfilled.js"></script>
576 577
577<script src="https://www.youtube.com/iframe_api"></script>
577 578
578<script src="https://player.vimeo.com/api/player.js"></script>
578 579
579<script src="https://geo.dailymotion.com/libs/player.js"></script>
579 580
580<script> 581 const plyrPlayers = Plyr.setup('._init-plyr'); 582 var youtube = document.querySelectorAll('.youtube'); 583 const players = {}; 584 let init = false; 585 function onYouTubeIframeAPIReady() { 586 init = true; 587 for (const el of youtube) { 588 el.addEventListener('click', () => { 589 const customEmbed = el.querySelector('[data-custom-embed]'); 590 if (customEmbed) { 591 el.innerHTML = customEmbed.innerHTML; 592 } 593 const id = 'player_' + el.dataset.id; 594 const type = el.dataset.type; 595 const videoId = el.dataset.videoId; 596 const time = el.dataset.time || 0; // Start time in seconds 597 onPlay(id); // Manage autoplay functionality 598 let player; 599 // YouTube Player 600 if (type === 'youtube') { 601 player = new YT.Player(id, { 602 videoId: videoId, 603 playerVars: { 604 start: time, 605 }, 606 events: { 607 onReady: (event) => { 608 event.target.playVideo(); 609 }, 610 onStateChange: (event) => { 611 if (event.data === YT.PlayerState.PLAYING) { 612 onPlay(id); 613 } else if ( 614 event.data === YT.PlayerState.PAUSED || 615 event.data === YT.PlayerState.ENDED 616 ) { 617 onPause(id); 618 } 619 }, 620 }, 621 }); 622 // YouTube Playlist Player 623 } else if (type === 'youtube-playlist') { 624 player = new YT.Player(id, { 625 playerVars: { 626 listType: 'playlist', 627 list: videoId, // playlist ID 628 start: time, 629 }, 630 events: { 631 onReady: (event) => { 632 event.target.playVideo(); 633 }, 634 onStateChange: (event) => { 635 if (event.data === YT.PlayerState.PLAYING) { 636 onPlay(id); 637 } else if ( 638 event.data === YT.PlayerState.PAUSED || 639 event.data === YT.PlayerState.ENDED 640 ) { 641 onPause(id); 642 } 643 }, 644 }, 645 }); 646 // YouTube Live Player 647 } else if (type === 'youtube-live') { 648 player = new YT.Player(id, { 649 videoId: videoId, 650 playerVars: { 651 start: time, 652 }, 653 events: { 654 onReady: (event) => { 655 event.target.playVideo(); 656 }, 657 onStateChange: (event) => { 658 if (event.data === YT.PlayerState.PLAYING) { 659 onPlay(id); 660 } else if ( 661 event.data === YT.PlayerState.PAUSED || 662 event.data === YT.PlayerState.ENDED 663 ) { 664 onPause(id); 665 } 666 }, 667 }, 668 }); 669 // Vimeo Player 670 } else if (type === 'vimeo') { 671 document.getElementById(id).innerHTML = ''; 672 player = new Vimeo.Player(id, { 673 id: videoId, 674 autoplay: true, 675 start: time, 676 }); 677 player.on('play', () => onPlay(id)); 678 player.on('pause', () => onPause(id)); 679 // Dailymotion Player (using Player Library Script) 680 } else if (type === 'dailymotion') { 681 const container = document.getElementById(id); 682 // Create Dailymotion player instance using Player Library 683 dailymotion.createPlayer(id, { 684 video: videoId, 685 params: { 686 autoplay: 1, 687 start: time, 688 mute: false, // Adjust other parameters as needed 689 } 690 }) 691 .then((playerInstance) => { 692 console.log('Dailymotion Player initialized:', playerInstance); 693 // Attach event listeners for play, pause, and ended events 694 playerInstance.on('play', () => onPlay(id)); 695 playerInstance.on('pause', () => onPause(id)); 696 playerInstance.on('ended', () => onPause(id)); 697 // Store the player instance for later control 698 players[id] = { type: 'dailymotion', player: playerInstance }; 699 }) 700 .catch((error) => console.error('Error initializing Dailymotion player:', error)); 701 } 702 // Store the player instance (for YouTube, YouTube Playlist, YouTube Live, or Vimeo) 703 players[id] = { type, player }; 704 }); 705 } 706 } 707 const pauseAllPlayers = (id = null) => { 708 for (const [key, value] of Object.entries(players)) { 709 if (id === key) continue; 710 if (value.type === 'youtube') { 711 value.player.pauseVideo(); 712 } else if (value.type === 'vimeo') { 713 value.player.pause(); 714 } else if (value.type === 'dailymotion') { 715 value.player.pause(); // Pause Dailymotion video using the Player Library 716 } 717 } 718 }; 719 const onPlay = (id) => { 720 pauseAllPlayers(id); 721 videoSwipers?.forEach((swiper) => { 722 swiper.autoplay.stop(); 723 }); 724 }; 725 const onPause = (id) => { 726 videoSwipers?.forEach((swiper) => { 727 swiper.autoplay.start(); 728 }); 729 }; 730 document.addEventListener("DOMContentLoaded", () => { 731 videoSwipers?.forEach((swiper) => { 732 swiper.on('slideChange', () => { 733 pauseAllPlayers(); 734 }); 735 }); 736 setTimeout(() => { 737 if (!init) { 738 onYouTubeIframeAPIReady(); 739 } 740 }, 500); 741 });
742 const checkYouTubeThumbnails = (el, currentIndex = 0) => { 743 if (el.naturalWidth > 120) return 744 const thumbnailSizes = [ 745 'maxresdefault', 746 'sddefault', 747 'hqdefault', 748 'mqdefault', 749 'default', 750 ] 751 if (currentIndex >= thumbnailSizes.length) { 752 return 753 } 754 const size = thumbnailSizes[currentIndex] 755 const originalSrc = el.src 756 const img = new Image() 757 img.onload = function () { 758 if (img.naturalWidth > 120) { 759 el.src = img.src 760 } else { 761 checkYouTubeThumbnails(el, currentIndex + 1) 762 } 763 } 764 img.onerror = function () { 765 checkYouTubeThumbnails(el, currentIndex + 1) 766 } 767 img.src = originalSrc.replace(/maxresdefault/, size) 768 } 769 document.querySelectorAll('.youtube img').forEach((el) => { 770 checkYouTubeThumbnails(el) 771 }) 772</script>
772 773
773<script> 774 // Function to download a file 775 function downloadFile(url, filename) { 776 const link = document.createElement('a'); 777 link.href = url; 778 link.download = filename || url.split('/').pop(); // Use filename if provided, otherwise extract from URL 779 document.body.appendChild(link); 780 link.click(); 781 document.body.removeChild(link); 782 } 783 // Add event listeners to all elements with the [data-download-href] attribute 784 document.querySelectorAll('[data-download-href]').forEach(element => { 785 element.addEventListener('click', function(event) { 786 event.preventDefault(); // Prevent the default action (if it's a link) 787 event.stopPropagation(); 788 const url = element.getAttribute('data-download-href'); 789 const filename = element.getAttribute('data-download-filename'); // Optional filename attribute 790 downloadFile(url, filename); 791 }); 792 }); 793</script>
793 794</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.