forth – 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
future developments? OS X, Cocoa and Forth /2011/10/17/osx-cocoa-forth/ /2011/10/17/osx-cocoa-forth/#comments Mon, 17 Oct 2011 21:29:54 +0000 /?p=1729 Roelf Toxopeus has written a Mac OS X / Cocoa interface for SwiftForth and iForth [examples/screenshots…]. He writes:

Cocoa GUI interface for Darwin based Forth systems.

Goals:

— Similar in usage as other interfaces in MacForth and Mach2. Think of things like NEW-XXX ADD.XXX etc.

— No hacks, no shortcuts. Should survive OS upgrades! Follow their rules.

— Try to stay close to ObjC names and procedures. Makes Apple examples easy to follow and to implement.

Inevitable is breaking the rules.

Note: Cocoa interface runs in CarbonMacForth(2008), iForth(2009) and SwiftForth(2010).

Current Mac OSX is Snow Leopard 10.6.8 and Lion 10.7.1

Current development is in SwiftForth.

Current target is ObjC runtime 2. [Read the rest…]

Meanwhile Nao Sacrada has released an alpha version of iMops, a 64bit, Cocoa, Intel port of Mops [more info…].

Exciting, and interesting implications for io’s descendants.

]]>
/2011/10/17/osx-cocoa-forth/feed/ 2 1729
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
software optimization vs. elegance /2008/11/04/software-optimization-vs-elegance/ /2008/11/04/software-optimization-vs-elegance/#comments Tue, 04 Nov 2008 12:36:47 +0000 //www.busterandfriends.com/io/?p=143 When started writing what became io 0.0.1 beta in ’99, having thrown out a whole bunch of old material, I made an effort to write elegant code. This was partly because of the complexity of this project (which would end up in the region of 25,000 lines of code), but also a reaction to the tools that, as apprentice computer music artist-engineers, we’d inherited in the late ’90s which sacrificed conceptual and theoretical elegance for expediency or to the dogma of ‘ease-of-use’.

io was written in HMSL (Hierarchical Music Specification Language) which was, despite everything, a significantly more elegant (and conceptually more robust) system than many of the other interactive real-time computer music system at the time. Still, much of HMSL dates back to the second-half of the 1980s, and in order to get the system to run on extremely modest environments (say, the Mac Plus) the designers had to make many compromises. As Phil Burk later told me, one of the side effects of this was, for example, the uneasy mix of traditional Forth code and object-oriented programming.

However, when it came to writing io, if there was a conflict between elegance and speed, I would generally err on the side of elegance; attempting to write code that would be easy to maintain and extend (and I would, on occasion, rewrite some of HMSL’s core modules).

However, when I shifted io from scaled fixed point to floating point code in 2004, I ran into major obstacles. The processor (a sans-FPU 33MHz 68LC040 which I guesstimate does around 30MIPS) began to creak, and to prevent the system from falling-behind, I hand optimized code and sacrificed a degree of elegance to speed.

io 0.0.1 beta++, which may be significantly more expensive computationally than io 0.0.1 beta, will still run on this antiquated 68k machine. Thus, I’ll have to deal with many of the issues, and make some of the compromises, that Phil and the others dealt with in the late 80’s….

]]>
/2008/11/04/software-optimization-vs-elegance/feed/ 2 143