1<!DOCTYPE html><html data-wf-page="688a5b230a14df15c659f9c7" data-wf-site="6888085c617ef31b88797ced" lang="en"><head> 2 <meta charset="utf-8"> 3 <title>Stefan Prins | News</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 | News" 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 | News" 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="688a5b230a14df15c659f9c7" 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/NEWS.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" aria-current="page" class="navbar16_link-2 w-nav-link w--current">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" class="navbar16_link-2 w-nav-link">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/NEWS_2.svg" loading="eager" alt="" class="hero-heading news"></div> 299 </div><img class="hero-img" src="/assets/6ecf75f8-ee33-4c63-b05a-000524a5650b/News.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.00% 50.00%;" 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">Nadar Ensemble performing "Mesh", Concertgebouw Brugge, 2023, photo: Wim Heirbaut</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="news-items-wrapper"><div class="news-item"> 317 <div data-w-id="e764229d-bf24-03a9-a1f2-ee269d9d5268" class="slidein-wrapper"> 318 <div class="slidein-contents"> 319 <div class="light-section"> 320 <div class="blog-padding"> 321 <div class="margin-bottom64"> 322 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 323 <div class="section-heading-inline"> 324 <div class="bg-line-wrapper"></div> 325 <div class="bg-line-wrapper left"></div> 326 <div class="z-index-2"> 327 <div class="section-heading-padding"> 328 <div class="text-color-secondary"> 329 <div class="text-align-center"> 330 <h2 class="h2-text uppercase">NEW EP RELEASE - CORPORA EX MACHINA</h2> 331 </div> 332 </div> 333 </div> 334 </div> 335 </div> 336 </div> 337 </div> 338 <div class="padding-horizontal-50"> 339 <div class="max-width-68"> 340 <div class="news-flex"> 341 <div class="news-img-wrapper"> 342 <a href="https://ensemblenikel.com/records/stefan-prins-nikel-corpora-ex-machina/" class="w-inline-block" target="_blank"><img src="/assets/514ebca1-f038-49d4-8e2a-de266f6f1af1/Nikel_MockUp.webp" loading="eager" alt="NEW EP RELEASE - CORPORA EX MACHINA" class="news-img" style="object-position: 50.00% 50.00%;"></a> 343 </div> 344 <div class="news-contents"> 345 <div class="margin-bottom30"> 346 <div class="text-color-secondary"> 347 <h3 class="h4-text krok">21.02.2026</h3> 348 </div> 349 </div> 350 <div class="margin-bottom20"> 351 <div class="h6-text w-richtext"><p>Printed in just 100 copies the release offers on side 1 the <em>Flesh+Prosthesis #0-2</em> cycle for tenor saxophone, percussion, piano, e-guitar and soundtrack (16 mins), in a blistering performance by Nikel Ensemble. Side 2 captures the extension of this cycle, <em>Iâm Your Body</em>, for quartet, ensemble & soundtrack (12 mins), with Nikel Ensemble and the excellent musicians from HKB Bern & Sonic Space Basel music universities, conducted by Lennart Dohms. Recorded, mixed & mastered by Stefano Bechini & Patrik Zosso and designed by Harel Schreiber (<em>H_M studio</em>) the album is available exclusively through direct orders. </p></div> 352 </div> 353 <div class="btn-row"> 354 <a href="/assets/null" class="btn w-inline-block" style="display: none;" target="_blank"> 355 <div>Read All</div> 356 </a> 357 <a href="https://ensemblenikel.com/records/stefan-prins-nikel-corpora-ex-machina/" class="btn w-inline-block" target="_blank"> 358 <div>More</div> 359 </a> 360 </div> 361 </div> 362 </div> 363 </div> 364 </div> 365 </div> 366 </div> 367 </div> 368 <div class="slidein-overlay"></div> 369 </div> 370 </div><div class="news-item"> 371 <div data-w-id="e764229d-bf24-03a9-a1f2-ee269d9d5268" class="slidein-wrapper"> 372 <div class="slidein-contents"> 373 <div class="light-section"> 374 <div class="blog-padding"> 375 <div class="margin-bottom64"> 376 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 377 <div class="section-heading-inline"> 378 <div class="bg-line-wrapper"></div> 379 <div class="bg-line-wrapper left"></div> 380 <div class="z-index-2"> 381 <div class="section-heading-padding"> 382 <div class="text-color-secondary"> 383 <div class="text-align-center"> 384 <h2 class="h2-text uppercase">Professor for Mixed & Electroacoustic Composition @ Haute Ãcole de Musique Genève</h2> 385 </div> 386 </div> 387 </div> 388 </div> 389 </div> 390 </div> 391 </div> 392 <div class="padding-horizontal-50"> 393 <div class="max-width-68"> 394 <div class="news-flex"> 395 <div class="news-img-wrapper"> 396 <a href="https://www.hesge.ch/hem/" class="w-inline-block" target="_blank"><img src="/assets/7f40ec63-67a1-4fdd-b6c1-1e683c66d047/HEM.webp" loading="eager" alt="Professor for Mixed & Electroacoustic Composition @ Haute Ãcole de Musique Genève" class="news-img" style="object-position: 50.00% 50.00%;"></a> 397 </div> 398 <div class="news-contents"> 399 <div class="margin-bottom30"> 400 <div class="text-color-secondary"> 401 <h3 class="h4-text krok">07.02.2026</h3> 402 </div> 403 </div> 404 <div class="margin-bottom20"> 405 <div class="h6-text w-richtext"><p>I'm delighted to have been appointed Associated Professor for Mixed & Electroacoustic Composition at the <em>Haute Ãcole de Musique de Genève</em>, a position I will take up in september 2026.</p> 406<p>After more than six years of faithful (and happy) service I will then step down as Professor for Composition & director of the <em>
406Hybrid Music Lab</em> at the Hochschule für Musik Dresden.</p> 407<p>If you're interested in studying composition with me, Katharina Rosenberger & Gilbert Nouno (Mixed Media Composition) at the HEM, you can apply until 1st of March.</p> 408<p> </p></div> 409 </div> 410 <div class="btn-row"> 411 <a href="/assets/null" class="btn w-inline-block" style="display: none;" target="_blank"> 412 <div>Read All</div> 413 </a> 414 <a href="https://www.hesge.ch/hem/" 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> 423 </div> 424 </div> 425 <div class="slidein-overlay"></div> 426 </div> 427 </div><div class="news-item"> 428 <div data-w-id="e764229d-bf24-03a9-a1f2-ee269d9d5268" class="slidein-wrapper"> 429 <div class="slidein-contents"> 430 <div class="light-section"> 431 <div class="blog-padding"> 432 <div class="margin-bottom64"> 433 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 434 <div class="section-heading-inline"> 435 <div class="bg-line-wrapper"></div> 436 <div class="bg-line-wrapper left"></div> 437 <div class="z-index-2"> 438 <div class="section-heading-padding"> 439 <div class="text-color-secondary"> 440 <div class="text-align-center"> 441 <h2 class="h2-text uppercase">Live-recording "Cyborg Flesh" online</h2> 442 </div> 443 </div> 444 </div> 445 </div> 446 </div> 447 </div> 448 </div> 449 <div class="padding-horizontal-50"> 450 <div class="max-width-68"> 451 <div class="news-flex"> 452 <div class="news-img-wrapper"> 453 <a href="https://oe1.orf.at/programm/20251109/813277/Schoenberg-Stefan-Prins-und-das-Arditti-Quartet" class="w-inline-block" target="_blank"><img src="/assets/eeb58cdb-2cdc-478b-a90b-79ec5dab90b5/CyborgFlesh-title1.webp" loading="eager" alt="Live-recording "Cyborg Flesh" online" class="news-img" style="object-position: 50.00% 50.00%;"></a> 454 </div> 455 <div class="news-contents"> 456 <div class="margin-bottom30"> 457 <div class="text-color-secondary"> 458 <h3 class="h4-text krok">09.11.2025</h3> 459 </div> 460 </div> 461 <div class="margin-bottom20"> 462 <div class="h6-text w-richtext"><p>After an electrifying premiere of "Cyborg Flesh" at the Wien Modern Festival by the Arditti Quartet, Yaron Deutsch and myself - with Fredi Reiter for the sound - on 31.10.2025, ORF/OE1 has now published the live recording of this concert on their website. The first work on the recording is Schoenberg's Fourth String Quartet, from the live-performance of the Arditti's at the Festival. Then, at 38:45 of this recording I give a little introduction about "Cyborg Flesh", and at 45:45 the performance starts. The composition is 57 minutes long. The recording will be available until 9.12.2025.</p> 463<p>Just send me an email if you are interested in hearing the recording after that date.</p></div> 464 </div> 465 <div class="btn-row"> 466 <a href="/assets/null" class="btn w-inline-block" style="display: none;" target="_blank"> 467 <div>Read All</div> 468 </a> 469 <a href="https://oe1.orf.at/programm/20251109/813277/Schoenberg-Stefan-Prins-und-das-Arditti-Quartet" class="btn w-inline-block" target="_blank"> 470 <div>More</div> 471 </a> 472 </div> 473 </div> 474 </div> 475 </div> 476 </div> 477 </div> 478 </div> 479 </div> 480 <div class="slidein-overlay"></div> 481 </div> 482 </div><div class="news-item"> 483 <div data-w-id="e764229d-bf24-03a9-a1f2-ee269d9d5268" class="slidein-wrapper"> 484 <div class="slidein-contents"> 485 <div class="light-section"> 486 <div class="blog-padding"> 487 <div class="margin-bottom64"> 488 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 489 <div class="section-heading-inline"> 490 <div class="bg-line-wrapper"></div> 491 <div class="bg-line-wrapper left"></div> 492 <div class="z-index-2"> 493 <div class="section-heading-padding"> 494 <div class="text-color-secondary"> 495 <div class="text-align-center"> 496 <h2 class="h2-text uppercase">New live-recording "Inhibition Space #1" with Ensemble Recherche</h2> 497 </div> 498 </div> 499 </div> 500 </div> 501 </div> 502 </div> 503 </div> 504 <div class="padding-horizontal-50"> 505 <div class="max-width-68"> 506 <div class="news-flex"> 507 <div class="news-img-wrapper"> 508 <a href="https://www.youtube.com/watch?v=vIw7YLIjTZY" class="w-inline-block" target="_blank"><img src="/assets/b7d955ed-2007-4503-8682-8da6fb7e4e05/inhibitionspace1-1.webp" loading="eager" alt="New live-recording "Inhibition Space #1" with Ensemble Recherche" class="news-img" style="object-position: 50.00% 50.00%;"></a> 509 </div> 510 <div class="news-contents"> 511 <div class="margin-bottom30"> 512 <div class="text-color-secondary"> 513 <h3 class="h4-text krok">29.09.2025</h3> 514 </div> 515 </div> 516 <div class="margin-bottom20"> 517 <div class="h6-text w-richtext"><p>Wonderful performance of a newly revised version of "Inhibition Space #1" for bass flute, bass oboe, bass clarinet & live-electronics, by Ensemble Recherche, live at the Ensemblehaus Freiburg, on 26.9.2025.</p></div> 518 </div> 519 <div class="btn-row"> 520 <a href="/assets/null" class="btn w-inline-block" style="display: none;" target="_blank"> 521 <div>Read All</div> 522 </a> 523 <a href="https://www.youtube.com/watch?v=vIw7YLIjTZY" class="btn w-inline-block" target="_blank"> 524 <div>More</div> 525 </a> 526 </div> 527 </div> 528 </div> 529 </div> 530 </div> 531 </div> 532 </div> 533 </div> 534 <div class="slidein-overlay"></div> 535 </div> 536 </div><div class="news-item"> 537 <div data-w-id="e764229d-bf24-03a9-a1f2-ee269d9d5268" class="slidein-wrapper"> 538 <div class="slidein-contents"> 539 <div class="light-section"> 540 <div class="blog-padding"> 541 <div class="margin-bottom64"> 542 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 543 <div class="section-heading-inline"> 544 <div class="bg-line-wrapper"></div> 545 <div class="bg-line-wrapper left"></div> 546 <div class="z-index-2"> 547 <div class="section-heading-padding"> 548 <div class="text-color-secondary"> 549 <div class="text-align-center"> 550 <h2 class="h2-text uppercase">New double-cd "inhabit"</h2> 551 </div> 552 </div> 553 </div> 554 </div> 555 </div> 556 </div> 557 </div> 558 <div class="padding-horizontal-50"> 559 <div class="max-width-68"> 560 <div class="news-flex"> 561 <div class="news-img-wrapper"> 562 <a href="https://subrosalabel.bandcamp.com/album/inhabit" class="w-inline-block" target="_blank"><img src="/assets/ca2e0163-79d6-4cbf-af1d-64ccae86b994/inhabit-cover-small.webp" loading="eager" alt="New double-cd "inhabit"" class="news-img" style="object-position: 50.00% 50.00%;"></a> 563 </div> 564 <div class="news-contents"> 565 <div class="margin-bottom30"> 566 <div class="text-color-secondary"> 567 <h3 class="h4-text krok">20.09.2025</h3> 568 </div> 569 </div> 570 <div class="margin-bottom20"> 571 <div class="h6-text w-richtext"><p>It's here! A brand-new release by Sub Rosa Records of the double cd <em>inhabit</em>
571, coproduced by Deutschlandfunk Kultur, which contains new studio recordings and fully remastered live-recordings of four recent, large-scale compositions: <em>Inhibition Space #1</em> (2020) for bass woodwind trio and live-electronics, performed by Ensemble Mosaik, <em>inhabit_inhibit </em>(2019-2020) for four spatialized quartets, six feedback soloists & live-electronics, performed by EnsembleKollektiv Berlin (cond. Max Murray), <em>under_current</em> (2020-2021, rev. 2023) for electric guitar and orchestra, played by Yaron Deutsch (e-guitar) & the BBC Scottish Symphony Orchesta (cond. Ilan Volkov), and <em>Mesh</em> (2022-2023) for ensemble and live-electronics, by the Nadar Ensemble. This release was made possible by Sub Rosa and Deutschlandfunk Kultur (coproducer), the support of all participating ensembles and musicians, BBC Radio 3 & the BBC Scottish Symphony Orchestra and last but not least the financial support from the Flemish Government. Heartfelt thanks to all of them!</p> 572<p>Click on the link ("MORE") to listen and/or buy the album!</p></div> 573 </div> 574 <div class="btn-row"> 575 <a href="/assets/null" class="btn w-inline-block" style="display: none;" target="_blank"> 576 <div>Read All</div> 577 </a> 578 <a href="https://subrosalabel.bandcamp.com/album/inhabit" class="btn w-inline-block" target="_blank"> 579 <div>More</div> 580 </a> 581 </div> 582 </div> 583 </div> 584 </div> 585 </div> 586 </div> 587 </div> 588 </div> 589 <div class="slidein-overlay"></div> 590 </div> 591 </div><div class="news-item"> 592 <div data-w-id="e764229d-bf24-03a9-a1f2-ee269d9d5268" class="slidein-wrapper"> 593 <div class="slidein-contents"> 594 <div class="light-section"> 595 <div class="blog-padding"> 596 <div class="margin-bottom64"> 597 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 598 <div class="section-heading-inline"> 599 <div class="bg-line-wrapper"></div> 600 <div class="bg-line-wrapper left"></div> 601 <div class="z-index-2"> 602 <div class="section-heading-padding"> 603 <div class="text-color-secondary"> 604 <div class="text-align-center"> 605 <h2 class="h2-text uppercase">"Fremdkörper #1" - remastered live-recording of Nadar's Darmstadt debut</h2> 606 </div> 607 </div> 608 </div> 609 </div> 610 </div> 611 </div> 612 </div> 613 <div class="padding-horizontal-50"> 614 <div class="max-width-68"> 615 <div class="news-flex"> 616 <div class="news-img-wrapper"> 617 <a href="https://internationales-musikinstitut.de/de/imd/publikationen/darmstadt-sonicals1/" class="w-inline-block" target="_blank"><img src="/assets/bd9bdefc-9da0-417c-b77c-51d7f381ffa3/Darmstadt-Sonicals1-1.webp" loading="eager" alt=""Fremdkörper #1" - remastered live-recording of Nadar's Darmstadt debut" class="news-img" style="object-position: 50.00% 50.00%;"></a> 618 </div> 619 <div class="news-contents"> 620 <div class="margin-bottom30"> 621 <div class="text-color-secondary"> 622 <h3 class="h4-text krok">25.07.2025</h3> 623 </div> 624 </div> 625 <div class="margin-bottom20"> 626 <div class="h6-text w-richtext"><div class="margin-bottom80 mobil-smaller"> 627<div class="popup-contents-flex"> 628<div class="p-flex-content"> 629<div class="h4-text w-richtext"> 630<p>As an online bonus track to this gorgeous triple vinyl release, you'll find a remastered version of the live-recording of <em>Fremdkörper #1</em> as it was performed by the Nadar Ensemble at its memorable debut concert at the Darmstädter Ferienkurse, Live at the Orangerie, 21.7.2010.</p> 631<p>"Darmstadt Sonicals - edition #01 - The electric guitar diaries". </p> 632</div> 633</div> 634</div> 635</div> 636<div class="h6-text w-richtext"> 637<p>Nadar Ensemble, cond. Daan Janssens, Stefan Prins (live-electronics)</p> 638<p> </p> 639</div></div> 640 </div> 641 <div class="btn-row"> 642 <a href="/assets/null" class="btn w-inline-block" style="display: none;" target="_blank"> 643 <div>Read All</div> 644 </a> 645 <a href="https://internationales-musikinstitut.de/de/imd/publikationen/darmstadt-sonicals1/" class="btn w-inline-block" target="_blank"> 646 <div>More</div> 647 </a> 648 </div> 649 </div> 650 </div> 651 </div> 652 </div> 653 </div> 654 </div> 655 </div> 656 <div class="slidein-overlay"></div> 657 </div> 658 </div><div class="news-item"> 659 <div data-w-id="e764229d-bf24-03a9-a1f2-ee269d9d5268" class="slidein-wrapper"> 660 <div class="slidein-contents"> 661 <div class="light-section"> 662 <div class="blog-padding"> 663 <div class="margin-bottom64"> 664 <div data-wf--section-heading-wrapper--variant="base" class="section-heading-wrapper padding"> 665 <div class="section-heading-inline"> 666 <div class="bg-line-wrapper"></div> 667 <div class="bg-line-wrapper left"></div> 668 <div class="z-index-2"> 669 <div class="section-heading-padding"> 670 <div class="text-color-secondary"> 671 <div class="text-align-center"> 672 <h2 class="h2-text uppercase">"sub_current" (Prins/Deutsch)</h2> 673 </div> 674 </div> 675 </div> 676 </div> 677 </div> 678 </div> 679 </div> 680 <div class="padding-horizontal-50"> 681 <div class="max-width-68"> 682 <div class="news-flex"> 683 <div class="news-img-wrapper">
684 <a href="https://yarondeutsch.bandcamp.com/album/soul-soul-soul-sweet-soul" class="w-inline-block" target="_blank"><img src="/assets/8e4b0162-bf17-425a-8d57-3b84f9e2b41d/Yaron-Deutsch-Soul-Front-1-559x559.webp" loading="eager" alt=""sub_current" (Prins/Deutsch)" class="news-img" style="object-position: 50.00% 50.00%;"></a> 685 </div> 686 <div class="news-contents"> 687 <div class="margin-bottom30"> 688 <div class="text-color-secondary"> 689 <h3 class="h4-text krok">01.12.2024</h3> 690 </div> 691 </div> 692 <div class="margin-bottom20"> 693 <div class="h6-text w-richtext"><p>My collaboration and friendship with Yaron started in 2009, and has grown in intensity ever since, also including an improvisation band called <em>Ministry of Bad Decisions, </em>where authorship is entirely leveled out. In the beautiful project "Soul, soul, soul, sweet soul" by Yaron, yet another approach to collaboration and authorship is offered: Yaron autonomously restructured/recomposed the solo part of <em>under_current</em>, the electric guitar concert I composed for him. Yaron's version is called "sub_current". The vinyl was longlisted for the Preis der Deutsche Schallplattenkritik 2024.</p></div> 694 </div> 695 <div class="btn-row"> 696 <a href="/assets/null" class="btn w-inline-block" style="display: none;" target="_blank"> 697 <div>Read All</div> 698 </a> 699 <a href="https://yarondeutsch.bandcamp.com/album/soul-soul-soul-sweet-soul" class="btn w-inline-block" target="_blank"> 700 <div>More</div> 701 </a> 702 </div> 703 </div> 704 </div> 705 </div> 706 </div> 707 </div> 708 </div> 709 </div> 710 <div class="slidein-overlay"></div> 711 </div> 712 </div></div> 713 </div> 714 </div> 715 </div> 716 </section> 717 <footer class="footer"> 718 <div class="w-layout-grid footer_grid"> 719 <div id="w-node-_3f8a519d-e42a-33a3-9e93-b9a22482b781-2482b77f" class="footer_wrapper"> 720 <a href="imprint.html" class="w-inline-block"> 721 <div class="coopyright_text created">Imprint</div> 722 </a> 723 <div class="coopyright_text created">|</div> 724 <a href="privacy-policy.html" class="w-inline-block"> 725 <div class="coopyright_text created">Privacy Policy</div> 726 </a> 727 </div> 728 <div id="w-node-_3f8a519d-e42a-33a3-9e93-b9a22482b788-2482b77f" class="coopyright_text">©<span class="copyright-year">YEAR</span> Stefan Prins</div> 729 <div id="w-node-_3f8a519d-e42a-33a3-9e93-b9a22482b78a-2482b77f" class="footer_wrapper"> 730 <div class="coopyright_text created">created by</div> 731 <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> 732 </div> 733 </div> 734 </footer> 735 </main> 736 </div> 737
737<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>
737 738
738<script src="js/stefan-prins.js" type="text/javascript"></script>
738 739
739<script> 740 // Functionality for fs-cc-reject 741 let initFsCCListener = false; 742 function handleFsCcReject() { 743 if (!window.FsCC) { 744 setTimeout(handleFsCcReject, 200); 745 return; 746 } 747 if (!initFsCCListener) { 748 // Add a listener for changes in consent preferences 749 window.FsCC.consentController.on('updateconsents', (consents) => { 750 handleFsCcReject(); // Run the function whenever consent changes 751 }); 752 } 753 // Iterate through all elements with fs-cc-reject attributes 754 document.querySelectorAll('[fs-cc-reject]').forEach((rejectElement) => { 755 const category = rejectElement.getAttribute('fs-cc-reject'); // Get the consent category 756 const isConsentGiven = window.FsCC.store.consents[category]; // Check if consent is granted for the category 757 const consentElement = document.querySelector('[fs-cc="' + category + '"]'); // Find the corresponding fs-cc element 758 // Toggle visibility based on consent state 759 if (isConsentGiven) { 760 rejectElement.style.display = 'none'; // Hide the reject element 761 if (consentElement) consentElement.style.display = 'block'; // Show the consented content 762 } else { 763 rejectElement.style.display = 'block'; // Show the reject element 764 if (consentElement) consentElement.style.display = 'none'; // Hide the consented content 765 } 766 }); 767 } 768 // Run the script on page load 769 document.addEventListener('DOMContentLoaded', handleFsCcReject); 770</script>
770 771
771<script> 772 Webflow.push(function() { 773 $('.copyright-year').text(new Date().getFullYear()); 774 }); 775 Webflow.push(function() { 776 //DISABLE WEBFLOW SMOOTH SCROLL 777 $(function() { 778 $(document).off('click.wf-scroll'); 779 }); 780 }); 781 window.addEventListener('load', (event) => { 782 const routeName = window.location.pathname?.split('/')?.slice(-1)?.[0] 783 document 784 .querySelectorAll('a[href*="' + routeName + '"]') 785 ?.forEach((el) => el?.classList?.add('w--current')) 786 }) 787 function addSeparatorsByDataAttribute() { 788 // Find all elements in the document 789 const matchingElements = document.querySelectorAll('[data-separator]'); 790 // Process each matching element 791 matchingElements.forEach(element => { 792 // Get the separator text from the data-separator attribute 793 const separatorText = element.getAttribute('data-separator'); 794 // Get all child elements of the current element 795 const children = Array.from(element.children); 796 // Iterate through the children and insert separators 797 children.forEach((child, index) => { 798 if (index < children.length - 1) { // No separator after the last child 799 // Create a new separator element (you could change this to suit) 800 const separator = document.createElement('span'); 801 separator.innerHTML = ' ' + separatorText + ' '; // Set separator text 802 // Insert the separator after the current child 803 child.insertAdjacentElement('afterend', separator); 804 } 805 }); 806 }); 807 } 808 addSeparatorsByDataAttribute(); 809 document.querySelectorAll('.tab-link') 810 ?.forEach((el) => el.addEventListener('click', (event) => { 811 const tabGroup = el.dataset.tabGroup; 812 if (tabGroup) { 813 document.querySelector('.tab-link.active[data-tab-group="' + tabGroup + '"]')?.classList?.remove('active') 814 } else { 815 el.parentNode.querySelector('.tab-link.active')?.classList?.remove('active') 816 } 817 el.classList.add('active') 818 })) 819 document.querySelectorAll('.biography-lang-links .tab-link') 820 ?.forEach((el) => el.addEventListener('click', (event) => { 821 const lang = el.dataset?.lang 822 document.querySelectorAll('.biography-text:not(.' + lang + ')') 823 ?.forEach((bioEl) => bioEl.style.display = 'none') 824 document.querySelectorAll('.biography-text.' + lang) 825 ?.forEach((bioEl) => bioEl.style.display = 'block') 826 })) 827 document.querySelectorAll('.tab-link[data-tab-id]') 828 ?.forEach(function(el) { 829 el.addEventListener('click', function(event) { 830 var tabId = el.dataset ? el.dataset.tabId : null; 831 var tabGroup = el.dataset ? el.dataset.tabGroup : null; 832 // Build a selector for the containers we want to control 833 // Only target NON-tab-link elements that have data-tab-id 834 var baseSelector = ':not(.tab-link)[data-tab-id]'; 835 // If the clicked tab belongs to a group, limit to the same group 836 if (tabGroup) { 837 baseSelector += '[data-tab-group="' + tabGroup + '"]'; 838 } 839 // Hide containers in scope that don't match the tabId 840 document.querySelectorAll(baseSelector + ':not([data-tab-id*="' + tabId + '"])') 841 ?.forEach(function(tabEl) { 842 tabEl.style.display = 'none'; 843 }); 844 // Show containers in scope that match the tabId 845 document.querySelectorAll(baseSelector + '[data-tab-id*="' + tabId + '"]') 846 ?.forEach(function(tabEl) { 847 tabEl.style.display = 'block'; 848 }); 849 }); 850 }); 851 const videoSwipers = [] 852</script>
852 853
853<script src="https://cdn.plyr.io/3.7.8/plyr.polyfilled.js"></script>
853 854
854<script src="https://www.youtube.com/iframe_api"></script>
854 855
855<script src="https://player.vimeo.com/api/player.js"></script>
855 856
856<script src="https://geo.dailymotion.com/libs/player.js"></script>
856 857
857<script> 858 const plyrPlayers = Plyr.setup('._init-plyr'); 859 var youtube = document.querySelectorAll('.youtube'); 860 const players = {}; 861 let init = false; 862 function onYouTubeIframeAPIReady() { 863 init = true; 864 for (const el of youtube) { 865 el.addEventListener('click', () => { 866 const customEmbed = el.querySelector('[data-custom-embed]'); 867 if (customEmbed) { 868 el.innerHTML = customEmbed.innerHTML; 869 } 870 const id = 'player_' + el.dataset.id; 871 const type = el.dataset.type; 872 const videoId = el.dataset.videoId; 873 const time = el.dataset.time || 0; // Start time in seconds 874 onPlay(id); // Manage autoplay functionality 875 let player; 876 // YouTube Player 877 if (type === 'youtube') { 878 player = new YT.Player(id, { 879 videoId: videoId, 880 playerVars: { 881 start: time, 882 }, 883 events: { 884 onReady: (event) => { 885 event.target.playVideo(); 886 }, 887 onStateChange: (event) => { 888 if (event.data === YT.PlayerState.PLAYING) { 889 onPlay(id); 890 } else if ( 891 event.data === YT.PlayerState.PAUSED || 892 event.data === YT.PlayerState.ENDED 893 ) { 894 onPause(id); 895 } 896 }, 897 }, 898 }); 899 // YouTube Playlist Player 900 } else if (type === 'youtube-playlist') { 901 player = new YT.Player(id, { 902 playerVars: { 903 listType: 'playlist', 904 list: videoId, // playlist ID 905 start: time, 906 }, 907 events: { 908 onReady: (event) => { 909 event.target.playVideo(); 910 }, 911 onStateChange: (event) => { 912 if (event.data === YT.PlayerState.PLAYING) { 913 onPlay(id); 914 } else if ( 915 event.data === YT.PlayerState.PAUSED || 916 event.data === YT.PlayerState.ENDED 917 ) { 918 onPause(id); 919 } 920 }, 921 }, 922 }); 923 // YouTube Live Player 924 } else if (type === 'youtube-live') { 925 player = new YT.Player(id, { 926 videoId: videoId, 927 playerVars: { 928 start: time, 929 }, 930 events: { 931 onReady: (event) => { 932 event.target.playVideo(); 933 }, 934 onStateChange: (event) => { 935 if (event.data === YT.PlayerState.PLAYING) { 936 onPlay(id); 937 } else if ( 938 event.data === YT.PlayerState.PAUSED || 939 event.data === YT.PlayerState.ENDED 940 ) { 941 onPause(id); 942 } 943 }, 944 }, 945 }); 946 // Vimeo Player 947 } else if (type === 'vimeo') { 948 document.getElementById(id).innerHTML = ''; 949 player = new Vimeo.Player(id, { 950 id: videoId, 951 autoplay: true, 952 start: time, 953 }); 954 player.on('play', () => onPlay(id)); 955 player.on('pause', () => onPause(id)); 956 // Dailymotion Player (using Player Library Script) 957 } else if (type === 'dailymotion') { 958 const container = document.getElementById(id); 959 // Create Dailymotion player instance using Player Library 960 dailymotion.createPlayer(id, { 961 video: videoId, 962 params: { 963 autoplay: 1, 964 start: time, 965 mute: false, // Adjust other parameters as needed 966 } 967 }) 968 .then((playerInstance) => { 969 console.log('Dailymotion Player initialized:', playerInstance); 970 // Attach event listeners for play, pause, and ended events 971 playerInstance.on('play', () => onPlay(id)); 972 playerInstance.on('pause', () => onPause(id)); 973 playerInstance.on('ended', () => onPause(id)); 974 // Store the player instance for later control 975 players[id] = { type: 'dailymotion', player: playerInstance }; 976 }) 977 .catch((error) => console.error('Error initializing Dailymotion player:', error)); 978 } 979 // Store the player instance (for YouTube, YouTube Playlist, YouTube Live, or Vimeo) 980 players[id] = { type, player }; 981 }); 982 } 983 } 984 const pauseAllPlayers = (id = null) => { 985 for (const [key, value] of Object.entries(players)) { 986 if (id === key) continue; 987 if (value.type === 'youtube') { 988 value.player.pauseVideo(); 989 } else if (value.type === 'vimeo') { 990 value.player.pause(); 991 } else if (value.type === 'dailymotion') { 992 value.player.pause(); // Pause Dailymotion video using the Player Library 993 } 994 } 995 }; 996 const onPlay = (id) => { 997 pauseAllPlayers(id); 998 videoSwipers?.forEach((swiper) => { 999 swiper.autoplay.stop(); 1000 }); 1001 }; 1002 const onPause = (id) => { 1003 videoSwipers?.forEach((swiper) => { 1004 swiper.autoplay.start(); 1005 }); 1006 }; 1007 document.addEventListener("DOMContentLoaded", () => { 1008 videoSwipers?.forEach((swiper) => { 1009 swiper.on('slideChange', () => { 1010 pauseAllPlayers(); 1011 }); 1012 }); 1013 setTimeout(() => { 1014 if (!init) { 1015 onYouTubeIframeAPIReady(); 1016 } 1017 }, 500); 1018 });
1019 const checkYouTubeThumbnails = (el, currentIndex = 0) => { 1020 if (el.naturalWidth > 120) return 1021 const thumbnailSizes = [ 1022 'maxresdefault', 1023 'sddefault', 1024 'hqdefault', 1025 'mqdefault', 1026 'default', 1027 ] 1028 if (currentIndex >= thumbnailSizes.length) { 1029 return 1030 } 1031 const size = thumbnailSizes[currentIndex] 1032 const originalSrc = el.src 1033 const img = new Image() 1034 img.onload = function () { 1035 if (img.naturalWidth > 120) { 1036 el.src = img.src 1037 } else { 1038 checkYouTubeThumbnails(el, currentIndex + 1) 1039 } 1040 } 1041 img.onerror = function () { 1042 checkYouTubeThumbnails(el, currentIndex + 1) 1043 } 1044 img.src = originalSrc.replace(/maxresdefault/, size) 1045 } 1046 document.querySelectorAll('.youtube img').forEach((el) => { 1047 checkYouTubeThumbnails(el) 1048 }) 1049</script>
1049 1050
1050<script> 1051 // Function to download a file 1052 function downloadFile(url, filename) { 1053 const link = document.createElement('a'); 1054 link.href = url; 1055 link.download = filename || url.split('/').pop(); // Use filename if provided, otherwise extract from URL 1056 document.body.appendChild(link); 1057 link.click(); 1058 document.body.removeChild(link); 1059 } 1060 // Add event listeners to all elements with the [data-download-href] attribute 1061 document.querySelectorAll('[data-download-href]').forEach(element => { 1062 element.addEventListener('click', function(event) { 1063 event.preventDefault(); // Prevent the default action (if it's a link) 1064 event.stopPropagation(); 1065 const url = element.getAttribute('data-download-href'); 1066 const filename = element.getAttribute('data-download-filename'); // Optional filename attribute 1067 downloadFile(url, filename); 1068 }); 1069 }); 1070</script>
1070 1071</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.