MIDI – io 0.0.1 beta++ interactive, semi-autonomous technological artifact, musical automaton, machine musician and improviser Wed, 21 Jun 2023 22:25:37 +0000 en-US hourly 1 25192515 Documentation: io 0.0.1 beta++, the musical automaton and machine improviser constructed by Han-earl Park /2019/07/09/readme/ Tue, 09 Jul 2019 09:10:53 +0000 /?p=5456 io 0.0.1 beta++, Blackrock Castle Observatory, 05-26-2010 (photo copyright 2010, Stephanie Hough)

Photo © 2010, Stephanie Hough.

Back, behind-the-scenes, I still have some articles in draft form that both detail the nuts’n’bolts decision-making processes in the construction of a machine improviser, and self-reflective critique such constructions, detailing the trade-offs and shortcomings of such an entity, and its design and implementation. I would like to get back to work on these at some point as they may provide as both cautionary tales and critical guides in future constructions of ‘creative’ automata and machine performances, and to anyone engaged in the critical (reverse-)engineering of such entities and their constructions. (There are so many stories, (self-)reflective and (self-)critical, of shortcoming and failures that get lost in our need to tell tales of technocultural heroics.)

Meanwhile, in this post I’d like to provide a selective index of documentation of io 0.0.1 beta++, its construction and performance, both of material published on this site and elsewhere.

Overview

\ constructor: Han-earl Park
\ copyright 2008 buster & friends' C-ALTO Labs
\
\ www.busterandfriends.com/io
\
\ (Edinburgh, November 1996 -
\ (London, August 1997 -
\ (Den Haag, October 1997 -
\ (Valencia, March 1999 -
\ (Southampton, May 2000 -
\ (Cork, April 2006 -
\
\ (Cork, October 2008 -
\
\ REV: 0.0.1 alpha (Southampton, October 2000)
\ REV: 0.0.1 beta (Southampton, November 2000)
\ REV: 0.0.1 alpha++ (Southampton, July 2004)
\ REV: 0.0.1 beta++ (Cork, May 2010)

io 0.0.1 beta++ is an interactive, semiautonomous technological artifact that, in partnership with its human associates, performs a deliberately amplified staging of a socio-technical network—a network in which the primary protocol is improvisation. Together the cyborg ensemble explores the performance of identities, hybrids and relationships, and highlights the social agency of artifacts, and the social dimension of improvisation. Engineered by Han-earl Park, io 0.0.1 beta++ is a descendant, and significant re-construction, of his previous machine musicians, and it builds upon the work done with, and address some of the musical and practical problems of, these previous artifacts.

Standing as tall as a person, io 0.0.1 beta++ whimsically evokes a 1950s B-movie robot, constructed from ad-hoc components including plumbing, kitchenware and missile switches. It celebrates the material and corporeal; embracing the localized and embodied aspects of sociality, performance and improvisation.

Chronology

Documentation

Audio recordings

We watch and listen carefully because we know we’re seeing a kind of manifesto in action. What is an automaton? A sketch, a material characterization of the ideas the inventor and the inventor’s culture have about some aspect of life, and how it could be. io and its kind are alternate beings born of ideas, decisions and choices. It is because io stands alone, an automaton, that the performance recorded on this CD not only is music, but is about music.

Sara Roberts (from the liner notes)

‘io 0.0.1 beta++ (SLAMCD 531) CD cover (copyright 2011, Han-earl Park)

‘io 0.0.1 beta++’ (SLAMCD 531). [Details…]

personnel: io 0.0.1 beta++ (itself), Han-earl Park (guitar), Bruce Coates (alto and sopranino saxophones) and Franziska Schroeder (soprano saxophone).

track listing: Pioneer: Variance (11:52); Pioneer: Dance (13:13); Ground-Based Telemetry (1:42); Discovery: Intermodulation (9:08); Discovery: Decay (5:08); 4G (0:59); Laplace: Perturbation (10:21); Laplace: Instability (3:08); Return Trajectory (8:24). Total duration: 63:57.

© 2011 Han-earl Park.
℗ 2011 SLAM Productions.

[Additional recording…]

Articles and publications

My article, ‘In Conversation with an Automaton: Identities and Agency in a Heterogeneous Social and Musical Network’ [local copy…], published in the Leonardo Electronic Almanac: ‘My Favorite Things: The Joy of the Gizmo’ (Volume 15, No. 11-12, November–December 2007) is still probably the best description of the motivations and choices behind the io enterprise.

Abstract

io 0.0.1 beta is an interactive, semi-autonomous technological artifact that, in partnership with its human associates, performs a deliberately amplified staging of a socio-technical network—a network in which primary protocol is improvisation. In this paper, I explore the performance of identities, hybrids and relationships, illustrating the space between myself (human partner and constructor) and io through imaginary conversations between us. Considering that io highlights, in particular, the social agency of artifacts, I find it fitting that my own notions about the nature of improvisation, the technical and the social have changed through my interactions with io.

[Read the rest…] [Local copy…]

In addition, this site has the following short pieces about the construction of io 0.0.1 beta++:

Han-earl Park, ‘frankenmusic(s),’ November 25, 2008:

Fifteen days ago, during the break between beta test sessions, Franziska Schroeder asked a pithy question that cut to the core of this enterprise: what do I hope to achieve? My answer surprised me even as it reminded me of Sara’s observation: my goal with io (and io++) is to encapsulate my take on improvisation—its mechanisms, its sociality, its significance. [Read the rest…]

Franziska Schroeder, ‘io + I met,’ November 24, 2008:

Who is io? What does she sound like? How would she react to me? Would she respond? Would she challenge me (musically, that is). In other words, would she adopt sensitively to changes, make creative contributions and develop musical ideas suggested by me? [Read the rest…]

Images

  • io 0.0.1 beta++ 05-19-2010
  • Han-earl Park, io 0.0.1 beta++ and Bruce Coates, Blackrock Castle Observatory, 05-26-2010 (photo copyright 2010, Stephanie Hough)
  • Franziska Schroeder and io 0.0.1 beta++, Ó Riada Hall, 05-25-2010
  • io 0.0.1 beta++ construction 05-12-2010 (teaser)
  • io 0.0.1 beta++ construction 05-11-2010 (teaser)
  • io 0.0.1 beta++ construction 05-23-2010 (teaser)

images © 2010 Stephanie Hough, and © 2010–2011 Han-earl Park [additional images (google gallery)…]

Source code

Download all source files (requires HMSL to run):

View individual source files linked below:

\ additional midi stuff

include?  task-midi_plus  myt:midi_plus


\ device classes

include?  task-device           myt:device
include?  task-midi_device      myt:midi_device
include?  task-interpreter      myt:interpreter
include?  task-ctrl_interpreter myt:ctrl_interpreter
include?  task-fan_out          myt:fan_out


\ input components

include?  task-parser         myt:parser
include?  task-mono_parser    myt:mono_parser
include?  task-mono_parser+   myt:mono_parser+
include?  task-poly_parser    myt:poly_parser
include?  task-guitar_parser  myt:guitar_parser

include?  task-parser_list    myt:parser_list

include?  task-pulse_tracker  myt:pulse_tracker
include?  task-pulse_tracker+ myt:pulse_tracker+

include?  task-banalyzer      myt:banalyzer
include?  task-banalyzer+     myt:banalyzer+


\ output components

include?  task-gm_instrument myt:gm_instrument
include?  task-gm_drumkit    myt:gm_drumkit
include?  task-gm_patch      myt:gm_patch

include?  task-vl_sysex      myt:vl_sysex
include?  task-vl_instrument myt:vl_instrument
include?  task-vl_patch      myt:vl_patch


\ "henri poincare"

include?  task-floatingpoint      hsys:floatingpoint

include?  task-hp_util            myt:hp_util
include?  task-hp_fputil          myt:hp_fputil

include?  task-hp_particle        myt:hp_particle
include?  task-hp_force           myt:hp_force
include?  task-hp_space           myt:hp_space
include?  task-hp_gravity         myt:hp_gravity
include?  task-hp_fpgravity       myt:hp_fpgravity

include?  task-hp_particle_player myt:hp_particle_player


\ graphics

include?  task-graph_plus    myt:graph_plus
include?  task-gr_view       myt:gr_view
include?  task-screen+       myt:screen+
include?  task-ctrl_numeric+ myt:ctrl_numeric+


\ io -- globals and configuration

include?  task-io_config   io:io_config
include?  task-io_glob     io:io_glob


\ io -- modules

include?  task-io_interp_table io:modules:io_interp_table
include?  task-io_interp       io:modules:io_interp
include?  task-io_player       io:modules:io_player

include?  task-io_particle     io:modules:io_particle
include?  task-io_space        io:modules:io_space
include?  task-io_patches      io:modules:io_patches

include?  task-io_pdur_dlog    io:modules:io_pdur_dlog


\ io -- main components

io_test? .IF
	
	include?  task-hp_screen   myt:hp_screen
	include?  task-hp_screen+  myt:hp_screen+
	
.THEN

include?  task-io_hp      io:io_hp
include?  task-io_matrix  io:io_matrix
include?  task-io_input   io:io_input
include?  task-io_output  io:io_output


\ io - user interface

include?  task-io_ui      io:io_ui
include?  task-io_screen  io:io_screen

io_file? .IF
	
	include?  task-file_elmnts     myt:file_elmnts
	include?  task-file_elmnts_mac myt:file_elmnts_mac
	
	include?  task-io_file_scene   io:modules:io_file_scene
	include?  task-io_file_glue    io:modules:io_file_glue
	include?  task-io_file         io:modules:io_file
	
.THEN

io_turnkey? .IF
	
	include?  task-dialog     myt:dialog
	include?  task-midi_menu  myt:midi_menu
	
	include?  task-io_menus   io:modules:io_menus
	
.THEN


\ io - top level

include?  task-io_top  io:io_top
]]>
5456
hp->midi initial test /2008/11/08/hp-midi-initial-test/ Sat, 08 Nov 2008 16:03:05 +0000 //www.busterandfriends.com/io/?p=200 Proof of concept of the table lookup version of the hp->midi, hp->pan and hp->cent words.

hp->midi test 11-08-08_00 [mp3″]

linear-table  ctrl-table !
linear-table  pan-table !

linear-1200-cent-table  cent-table !

hp->midi test 11-08-08_01 [mp3″]

scurve-table  ctrl-table !
scurve-table  pan-table !

linear-1200-cent-table  cent-table !

hp->midi test 11-08-08_02 [mp3″]

scurve-table  ctrl-table !
scurve-table  pan-table !

scurve-1200-cent-table  cent-table !

Notes: The ctrl-table variable holds the address to the table used for the MIDI controllers except pan; pan-table, for pan control; and cent-table, for the pitch output.

linear-table and scurve-1200-cent-table are linear functions, and scurve-table and scurve-1200-cent-table are sigmoid curves. Tables with the infix -1200-cent- have a range of one octave.

]]>
200
hp->midi early report /2008/11/07/hp-midi-early-report/ /2008/11/07/hp-midi-early-report/#comments Fri, 07 Nov 2008 00:16:07 +0000 //www.busterandfriends.com/io/?p=171 One area in which I’ve been concerned with the question of optimization vs. elegance is in the hp->midi word (a ‘word’ is Forth parlance for function / procedure / subroutine). This word takes the hp_ values (with a range of -hp_range/2 to hp_range/2), which io’s cognitive innards generate, and translates them into legal MIDI control values (0–127). hp->midi is called hundreds of times a second by io 0.0.1 beta (and perhaps will be called a greater number in io 0.0.1 beta++) so, if it hogs the system, the system may slow down unacceptably. (This was one of the words that I hand optimized when moving to floating point calculations of the hp_ coordinates.)

One of the changes I want to introduce in the move from io 0.0.1 beta to io 0.0.1 beta++ is a greater variability in its output character. A simple way to achieve this without changing the generative process at io’s core is to introduce different ways of deriving MIDI from the hp_ values. (I’ll write on this in more details in a future post.)

I’ve rewritten hp->midi to carry this out, and a quick (and very rough) benchmark suggests that, contrary to my initial fears, the new word is almost twice as fast as the old. Using the new version of hp->midi, the following code

0  hp->midi  drop

took about 0.00127 milliseconds to execute, while using the new version, it takes about 0.00204 milliseconds.

Now you don’t get something for nothing and in this case the speed increase is offset by the time it takes for io++ to initialize (lots of slow floating point calculations), and greater memory usage. Basically, instead of doing these calculations on the fly as the old word did, io++ creates lookup tables during initialization. Thus hp->midi no longer calculates the MIDI values, but instead is a lookup routine, finding the corresponding value in an array with hp_range bytes.

More on this in the coming days…

(Incidentally, hp_ is short for Henri Poincaré, and if you’re curious why, then you might find clues in my LEA article.)

]]>
/2008/11/07/hp-midi-early-report/feed/ 2 171