Track premiere: Brendan Hanks reinterprets himself with “Your Exile By Algorithm”

Brendan Hanks — photo courtesy of the artist

This spring, during Mission Creek Festival, a lucky few were treated to a unique sci-fi dining experience. The Sci-Fi CoLab brought together dancing, storytelling and food to take attendees on an otherworldly journey. Providing the soundtrack was electronic musician Brendan Hanks.

Hanks’ new record, Generations, which drops Friday, mines that science fiction experience. The full-length album, which Hanks wrote and produced, consists of just four tracks: “Our Futures,” “Your Exile By Algorithm,” “Our Furies” and “Your Infinite Exile.” Tracks one and three were co-produced by Philip Rabalais (Trouble Lights, Utopia Park); Phil Young (Tires, Anna Libera, Night Stories) provided additional production on “Your Exile By Algorithm.”

Little Village is pleased to premiere “Your Exile By Algorithm” today. It’s a sci-fi collaboration, of sorts — Hanks produced the track by feeding one of his earlier recordings, “Your Exile,” through an algorithm in the program Ableton. It extracted his composition to midi notes, which were then played on a digital piano.

“Other than cleaning up the most sour bits,” Hanks said in an email, “this is entirely a machine’s interpretation of my music.”

The title is two-fold: Quite literally, of course, it is Hanks’ track, “Your Exile,” as interpreted by an algorithm. It also forces the listener to confront the possibility, though, of being exiled by an algorithm — of the way that the musician might be exiled if algorithms are engaged in the interpretation of music.

Hanks answered a few questions over email on the ideas and philosophy behind the track and the album.

You mentioned that this was music created for the Space Co-lab. Was that science fiction context what interested you in the idea of feeding your track into an algorithm for “Your Exile By Algorithm?”

The story that Richard Siken read at the Space CoLab event entails a generation ship (a hypothetical means by which to transport humans to distant stars), and a class of robots charged with absorbing the negative emotions of humans in order to make the trip possible. As such it seemed appropriate to let a machine assist me in writing the music over which he would be reading. I have used different methods to do this in the past, such as defining a rhythm then allowing the computer to choose pitches and, after that, fitting it to a traditional scale. Feeding a track into this algorithm in Ableton wasn’t something I had done before, and was more of a, “Let’s see what happens” kind of decision, the result of which disarmed me enough that it immediately felt like the correct choice.

Are the other three tracks more standard recordings, or do they experiment with mechanical interpretation as well?

“Your Infinite Exile” is another iteration of “Your Exile” derived from an algorithm, this one being the famous PaulStretch algorithm (if you’ve listened to a YouTube video that’s like “JUSTIN BIEBER SLOWED DOWN %800 IS AMAZING” then you’ve heard it’s effect, though my personal favorite is “Don’t Fear The Reaper,” which ends up sounding like a lost Tim Hecker album). As the story wraps up with the ship crossing a threshold it felt appropriate to emulate the closest thing we can experience to time dilation.

Brendan Hanks — ‘Generations’ album art by Patrick Reed.

“Our Futures” is a fairly standard recording — I had a sample of the trains coming into the yard near my house that felt like a good base and built an ambient track from there. “Our Furies” was meant to be a shadow version of that with all the pitches re-keyed to the relative minor, subbed a fog horn for the trains, and recorded some modular synth patches I had been working with in order to lean into the idea of robots behaving in unexpected ways.

What are your overall thoughts on computerization and art? Where does “Your Exile By Algorithm” fall, conceptually, on a scale of zero to Hatsune Miku?

It’s probably closer to Hatsune Miku than I realized! The original “Your Exile” was recorded by me sitting down with a synthesizer, playing chords and manipulating values to get different sounds out of it, while “Your Exile By Algorithm” is the result of a piece of software mapping frequencies to MIDI data. The funny thing to me about these tracks is that if you played them to someone with no prior knowledge and asked them which sounded more “human” I’m certain they’d pick the algorithmically generated one.

I think of algorithmic generation and other forms of computer-assisted/generated art as just another tool — if you built the algorithm then you made artistic decisions in it’s design, and if you’re using someone else’s then you’ll make editorial decisions about what to include and what to discard (and in this case making no decision is also making a decision). You can end up with something that sounds good or you can end up with crap.

[gravityform id="17" title="false" description="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper your-village-form_wrapper' id='gform_wrapper_17' ><a id='gf_17' class='gform_anchor' ></a><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_17' id='gform_17' class='your-village-form' action='/track-premiere-brendan-hanks-reinterprets-himself-with-your-exile-by-algorithm/#gf_17'> <div class='gform_body'><ul id='gform_fields_17' class='gform_fields top_label form_sublabel_below description_below'><li id='field_17_7' class='gfield gfield_html gfield_html_formatted gfield_no_follows_desc field_sublabel_below field_description_below gfield_visibility_visible' ><h3 style="font-weight:800; font-size:34px;">Let's get started</h3> <p style="font-size:18px;">Fill out this form and we'll contact you with information about marketing with Little Village!</p></li><li id='field_17_4' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' for='input_17_4_3' ></label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name has_last_name no_suffix gf_name_has_2 ginput_container_name gfield_trigger_change' id='input_17_4'> <span id='input_17_4_3_container' class='name_first' > <input type='text' name='input_4.3' id='input_17_4_3' value='' aria-label='First name' tabindex='2' aria-invalid="false" placeholder='First name'/> <label for='input_17_4_3' >First</label> </span> <span id='input_17_4_6_container' class='name_last' > <input type='text' name='input_4.6' id='input_17_4_6' value='' aria-label='Last name' tabindex='4' aria-invalid="false" placeholder='Last name'/> <label for='input_17_4_6' >Last</label> </span> </div></li><li id='field_17_5' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_17_5' ><span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_5' id='input_17_5' type='text' value='' class='large' tabindex='6' placeholder='Company name' aria-required="true" aria-invalid="false" /></div></li><li id='field_17_3' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_17_3' ><span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'> <input name='input_3' id='input_17_3' type='text' value='' class='large' tabindex='7' placeholder='Your email address' aria-required="true" aria-invalid="false"/> </div></li><li id='field_17_8' class='gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_' ><label class='gfield_label' for='input_17_8' >Phone</label><div class='ginput_container'><input name='input_8' id='input_17_8' type='text' value='' /></div><div class='gfield_description'>This field is for validation purposes and should be left unchanged.</div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_17' class='gform_button button' value='SUBMIT' tabindex='8' onclick='if(window["gf_submitting_17"]){return false;} window["gf_submitting_17"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_17"]){return false;} window["gf_submitting_17"]=true; jQuery("#gform_17").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=17&amp;title=&amp;description=&amp;tabindex=1' /> <input type='hidden' class='gform_hidden' name='is_submit_17' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='17' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_17' value='WyJbXSIsIjlmNzc1YTEyZmZjNmYyODk5Mzk0NDM3ZjRlOGYyZDNmIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_17' id='gform_target_page_number_17' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_17' id='gform_source_page_number_17' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="193"/><script>document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_17' id='gform_ajax_frame_17'>This iframe contains the logic required to handle Ajax powered Gravity Forms.</iframe> <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 17, '' );jQuery('#gform_ajax_frame_17').load( function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_17');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_17').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;if(is_form){jQuery('#gform_wrapper_17').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_17').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_17').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_17').offset().top); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_17').val();gformInitSpinner( 17, '' );jQuery(document).trigger('gform_page_loaded', [17, current_page]);window['gf_submitting_17'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_17').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_17').offset().top);jQuery(document).trigger('gform_confirmation_loaded', [17]);window['gf_submitting_17'] = false;}, 50);}else{jQuery('#gform_17').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [17, current_page]);} );} );</script><script type='text/javascript'> if(typeof gf_global == 'undefined') var gf_global = {"gf_currency_config":{"name":"U.S. Dollar","symbol_left":"$","symbol_right":"","symbol_padding":"","thousand_separator":",","decimal_separator":".","decimals":2},"base_url":"https:\/\/\/wp-content\/plugins\/gravityforms-asdf111aasdfffs-nope","number_formats":[],"spinnerUrl":"https:\/\/\/wp-content\/plugins\/gravityforms-asdf111aasdfffs-nope\/images\/spinner.gif"};jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 17) {if(typeof Placeholders != 'undefined'){ Placeholders.enable(); }} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [17, 1]) } ); </script>