{"id":2045,"date":"2025-09-30T20:53:23","date_gmt":"2025-09-30T18:53:23","guid":{"rendered":"https:\/\/michael-edwards.org\/wp\/?p=2045"},"modified":"2025-10-01T16:54:33","modified_gmt":"2025-10-01T14:54:33","slug":"lusted-fleeting-lights","status":"publish","type":"post","link":"https:\/\/michael-edwards.org\/wp\/?p=2045","title":{"rendered":"lusted fleeting: lights"},"content":{"rendered":"<p>My 68-minute <a href=\"https:\/\/www.soundonsound.com\/techniques\/introduction-immersive-audio\">immersive audio<\/a> piece\u00a0<em><a href=\"https:\/\/michael-edwards.org\/wp\/?p=2013\" target=\"_blank\" rel=\"noopener\">lusted fleeting<\/a> <\/em>can be performed with or without 1-6 live speakers and sequenced lighting effects. For the performance <a href=\"https:\/\/www.henriqueportovedo.com\" target=\"_blank\" rel=\"noopener\">Henrique Portovedo<\/a> and I did in Portugal on September 5th 2025, I tried out DMX programming to synchronise lighting changes with the spoken text. For now, two lights (or groups) suffice and these are both in 4-channel mode, for Red-Green-Blue+White 8-bit values. As the live performance is driven by <em><a href=\"https:\/\/reaper.fm\" target=\"_blank\" rel=\"noopener\">reaper<\/a><\/em> but the DMX programming was done in <em>MaxMSP<\/em>, I added <em>MIDI programme changes\u00a0<\/em>at specific points in reaper to select colours from a nine-colour palette in <em>MaxMSP <\/em>that was created in collaboration with Karin Schistek, my favourite synaesthete. She listened to the music with me and determined the selections based on her very clear colour association with the music as it developed. Two MIDI channels were used to directly reference the colours for both lights independently, as indexed in a simple table, and two further channels were associated with the transition times to the colour target (the given programme number being directly translated into a transition time in seconds). Very simple but effective enough for my purposes, and of course this solution meant jumping around in the piece during rehearsal was not an issue, as a stepping procedure was not in place.<\/p>\n<p>I also added supertitles in <em>MaxMSP<\/em>. There are 179 text snippets read out during the performance. As I&#8217;d already had enough of entering into <em>reaper<\/em>, by hand, every programme change needed for the lighting effects, this time I looked to <em>chatGPT<\/em> for a way of scripting the connection between spoken text snippet and <em>MaxMSP<\/em> supertitle projection. From the get-go, I&#8217;d written <em>Lisp\u00a0<\/em>code to place slides into\u00a0<em>reaper,<\/em> so that the speakers are prompted to read their text at the exact point in the piece where it occurs in the fully-produced &#8216;album&#8217; version (i.e. the one with my recorded voice speaking the texts&#8212;see <a href=\"https:\/\/michael-edwards.org\/lf\/\" target=\"_blank\" rel=\"noopener\">this<\/a> for more details). <em>reaper\u00a0<\/em>can have video tracks but at some point I discovered that these don&#8217;t have to contain actual videos, rather they can simply contain PNG images and they&#8217;ll be displayed in the video window according to their placement on the timeline. So this is perfect for <em>lusted fleeting\u00a0<\/em>performances. As the PNGs were already placed exactly where necessary, it was a &#8216;simple&#8217; case of adding the index<sup class='footnote'><a href='#fn-2045-1' id='fnref-2045-1' onclick='return fdfootnote_show(2045)'>1<\/a><\/sup> to the text snippet, again stored in a <em>MaxMSP<\/em> table, at the start of every new PNG image in <em>reaper<\/em>. This being more closely linked to existing events than the lighting changes led to a <em>chatGPT<\/em>-driven automation process.\u00a0<em>reaper\u00a0<\/em>can be scripted in\u00a0<a href=\"https:\/\/www.lua.org\/about.html\" target=\"_blank\" rel=\"noopener\"><i>Lua<\/i><\/a> but I was surprised that <em>chatGPT<\/em> knew so much about this. It was quite simple to get ascending programme changes added to one track at the start point of every PNG on another track. Much simpler than I imagined in fact, and far quicker than typing them all in by hand.<\/p>\n<p><a href=\"https:\/\/michael-edwards.org\/wp\/wp-content\/uploads\/2024_0001_product_dmxusbpro_000.png.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2053\" src=\"https:\/\/michael-edwards.org\/wp\/wp-content\/uploads\/2024_0001_product_dmxusbpro_000.png-300x300.png\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/michael-edwards.org\/wp\/wp-content\/uploads\/2024_0001_product_dmxusbpro_000.png-300x300.png 300w, https:\/\/michael-edwards.org\/wp\/wp-content\/uploads\/2024_0001_product_dmxusbpro_000.png-1024x1024.png 1024w, https:\/\/michael-edwards.org\/wp\/wp-content\/uploads\/2024_0001_product_dmxusbpro_000.png-150x150.png 150w, https:\/\/michael-edwards.org\/wp\/wp-content\/uploads\/2024_0001_product_dmxusbpro_000.png-768x768.png 768w, https:\/\/michael-edwards.org\/wp\/wp-content\/uploads\/2024_0001_product_dmxusbpro_000.png.png 1080w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>I should of course mention that in order to send data to the DMX lights, I used the <em>serial\u00a0<\/em>object in <em>MaxMSP\u00a0<\/em>to communicate with the<em> <a href=\"https:\/\/www.enttec.com\/product\/dmx-usb-interfaces\/dmx-usb-pro-professional-1u-usb-to-dmx512-converter\/\" target=\"_blank\" rel=\"noopener\">Enttec DMX USB Pro<\/a><\/em>. Sadly I didn&#8217;t have any luck with the cheaper\u00a0<em>Open DMX USB<\/em> box from the same company. Thanks to <a href=\"https:\/\/christosmichalakos.com\" target=\"_blank\" rel=\"noopener\">Christos Michalakos<\/a> for sharing his test patch to get me started with this.<\/p>\n<p>&nbsp;<\/p>\n<div class='footnotes' id='footnotes-2045'>\n<div class='footnotedivider'><\/div>\n<ol>\n<li id='fn-2045-1'> I need two MIDI channels for these indices, as MIDI programme changes are, like all MIDI data, limited to 7 bits, or a maximum of 128 values, whereas we need 179 indices. <span class='footnotereverse'><a href='#fnref-2045-1'>&#8617;<\/a><\/span><\/li>\n<\/ol>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>My 68-minute immersive audio piece\u00a0lusted fleeting can be performed with or without 1-6 live speakers and sequenced lighting effects. For the performance Henrique Portovedo and I did in Portugal on September 5th 2025, I tried out DMX programming to synchronise lighting changes with the spoken text. For now, two lights (or groups) suffice and these [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2051,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,216,27,137],"tags":[267,232,269,268,84,243],"class_list":["post-2045","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithmic-composition","category-ambisonics","category-composition","category-performances","tag-dmx","tag-immersive-audio","tag-lighting","tag-lusted-fleeting","tag-maxmsp","tag-reaper"],"_links":{"self":[{"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2045"}],"version-history":[{"count":9,"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2045\/revisions"}],"predecessor-version":[{"id":2064,"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2045\/revisions\/2064"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=\/wp\/v2\/media\/2051"}],"wp:attachment":[{"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michael-edwards.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}