{"id":1055,"date":"2026-02-16T16:18:22","date_gmt":"2026-02-16T15:18:22","guid":{"rendered":"https:\/\/samueljuliangrace.com\/?page_id=1055"},"modified":"2026-03-23T16:23:04","modified_gmt":"2026-03-23T15:23:04","slug":"range-2025","status":"publish","type":"page","link":"https:\/\/samueljuliangrace.com\/?page_id=1055","title":{"rendered":"Range 2025"},"content":{"rendered":"\n<div class=\"wp-block-group work-page is-layout-flow wp-container-core-group-is-layout-e603688c wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-group work-main is-layout-flow wp-container-core-group-is-layout-e603688c wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n    <div class=\"sjg-audio-player\" data-audio=\"https:\/\/samueljuliangrace.com\/wp-content\/uploads\/2026\/02\/Range_2025_Mixed.mp3\">\n        <div class=\"sjg-waveform\">\n            <div id=\"sjg_wave_69e60502d80f4\" class=\"sjg-wave-canvas\"><\/div>\n            <div class=\"sjg-loader\"><\/div>\n           <div class=\"sjg-audio-toggle\">\n    <span class=\"sjg-label\">LISTEN<\/span>\n<\/div>\n        <\/div>\n        <script>\n        (function () {\n            const wrapper = document.currentScript.closest(\".sjg-audio-player\");\n            if (!wrapper) return;\n            const canvas = wrapper.querySelector(\".sjg-wave-canvas\");\n            const loader = wrapper.querySelector(\".sjg-loader\");\n            const button = wrapper.querySelector(\".sjg-audio-toggle\");\n            const audioUrl = wrapper.dataset.audio;\n            let wavesurfer = null;\n\n            function setPlayingState(isPlaying) {\n                button.classList.toggle(\"is-playing\", isPlaying);\n                document.body.classList.toggle(\"sjg-audio-playing\", isPlaying);\n            }\n\n            button.addEventListener(\"click\", function () {\n                if (!wavesurfer) {\n                    loader.style.width = \"0%\";\n                    wavesurfer = WaveSurfer.create({\n                        container: canvas,\n                        height: canvas.clientHeight,\n                        waveColor: \"rgba(0,0,0,0.2)\",\n                        progressColor: \"rgba(0,0,0,0.9)\",\n                        barWidth: 2,\n                        barGap: 1,\n                        normalize: true,\n                        cursorWidth: 0,\n                    });\n                    wavesurfer.load(audioUrl);\n\n                    wavesurfer.on(\"loading\", (progress) => {\n                        loader.style.opacity = \"0.5\";\n                        loader.style.width = progress + \"%\";\n                    });\n\n                    wavesurfer.on(\"ready\", () => {\n                        loader.style.width = \"100%\";\n                        setTimeout(() => loader.style.opacity = \"0\", 200);\n                        wavesurfer.drawBuffer();\n                        wavesurfer.play();\n                    });\n\n                    wavesurfer.on(\"play\", () => {\n                        document.querySelectorAll(\".sjg-wave-canvas\").forEach(el => {\n                            if (el !== canvas && el.wavesurferInstance) {\n                                el.wavesurferInstance.pause();\n                            }\n                        });\n                        window.sjgActiveWaveSurfer = wavesurfer;\n                        window.sjgActiveToggleButton = button;\n                        setPlayingState(true);\n                    });\n\n                    wavesurfer.on(\"pause\", () => {\n                        setPlayingState(false);\n                    });\n\n                    canvas.wavesurferInstance = wavesurfer;\n                    return;\n                }\n                wavesurfer.playPause();\n            });\n        })();\n        <\/script>\n    <\/div>\n    \n\n\n\n<figure class=\"wp-block-image size-large\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/samueljuliangrace.com\/wp-content\/uploads\/2026\/02\/PANA1406b-1024x683.jpg\" alt=\"\" class=\"wp-image-1057\" srcset=\"https:\/\/samueljuliangrace.com\/wp-content\/uploads\/2026\/02\/PANA1406b-1024x683.jpg 1024w, https:\/\/samueljuliangrace.com\/wp-content\/uploads\/2026\/02\/PANA1406b-300x200.jpg 300w, https:\/\/samueljuliangrace.com\/wp-content\/uploads\/2026\/02\/PANA1406b-768x512.jpg 768w, https:\/\/samueljuliangrace.com\/wp-content\/uploads\/2026\/02\/PANA1406b-1536x1024.jpg 1536w, https:\/\/samueljuliangrace.com\/wp-content\/uploads\/2026\/02\/PANA1406b-2048x1365.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-group work-meta is-layout-flow wp-container-core-group-is-layout-e603688c wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<div class=\"wp-block-group work-meta-single is-layout-flow wp-container-core-group-is-layout-e603688c wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<h2 class=\"wp-block-heading has-text-align-right\">Range Sound Festival <em>2025<\/em><\/h2>\n<\/div>\n\n\n\n<div class=\"wp-block-group work-description-wrap is-layout-flow wp-container-core-group-is-layout-e603688c wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n<p class=\"work-description\">This performance presents abstract sound as a visceral, sculptural material made through code alone. Laptop, interface, mixer, amplifiers, cables, and speakers are treated as a single, homogeneous instrument, activated to play the space itself.&nbsp;<br>Performed in total darkness the piece submerged the audience in the work, encompassing the senses, allowing listeners to retreat into their unique perception and experience of the piece.<\/p>\n\n\n\n<p class=\"work-description\">This work was performed at &#8220;Range&#8221; Sound Festival 2025 where Samuel is also a co-creator and active member of the &#8220;Range&#8221; collective. <a href=\"https:\/\/range-festival.de\/\">https:\/\/range-festival.de\/<\/a><\/p>\n\n\n\n<p class=\"work-description\">photos taken by Isabel Valerie<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Range Sound Festival 2025 This performance presents abstract sound as a visceral, sculptural material made through code alone. Laptop, interface, mixer, amplifiers, cables, and speakers are treated as a single, homogeneous instrument, activated to play the space itself.&nbsp;Performed in total darkness the piece submerged the audience in the work, encompassing the senses, allowing listeners to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"content-page-wide","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"class_list":["post-1055","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"samueljuliangrace@gmail.com","author_link":"https:\/\/samueljuliangrace.com\/?author=1"},"uagb_comment_info":0,"uagb_excerpt":"Range Sound Festival 2025 This performance presents abstract sound as a visceral, sculptural material made through code alone. Laptop, interface, mixer, amplifiers, cables, and speakers are treated as a single, homogeneous instrument, activated to play the space itself.&nbsp;Performed in total darkness the piece submerged the audience in the work, encompassing the senses, allowing listeners to&hellip;","_links":{"self":[{"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=\/wp\/v2\/pages\/1055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1055"}],"version-history":[{"count":4,"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=\/wp\/v2\/pages\/1055\/revisions"}],"predecessor-version":[{"id":1291,"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=\/wp\/v2\/pages\/1055\/revisions\/1291"}],"wp:attachment":[{"href":"https:\/\/samueljuliangrace.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}