The artificial composer

After several stages of redesign and self-analysis, here is the first schematic of an artificial composer in action. The goal of this set-up is to give transparency to the composition process of the artificial artist.

The artist will be assisted by a human being, who is reduced to performing simple (non-creative) tasks: downloading specific film quotes, loading sound samples, recording samples.

The artificial composer will use a database of songs, midi-files and song-statistics to create new work. He will have two ways of interfacing with the “toolbox” machine that is running all audio software:

  • Through the networked robot interface, where he sends commands through the network to PC2, which then gets interpreted as key strokes and mouse events. This will use the Robot library.
  • Through a human assistant, by spoken (eSpeak) and written commands.

Any audible changes will be analysed and sent back to the artist for evaluation.

On top of using audio and video for human interaction, it will also be used for expressing artificial emotion.

Posted in Optimal artist, Research | 2 Comments

Synthetic word-associating games (II)

Working on the optimal/hybrid artist, I have been further testing on how a machine could play surrealistic word-association games.

Instead of associating by syntax as shown in Synthetic word-associating games (I), I want the machine to associate more like a human – by context.

How can we teach this to the computer? We need give the machine some kind of context, the most obvious being an on-line context. My applet does the following using a searchWord.

  1. Search for the searchWord in google
  2. Open the resulting pages
  3. Find words at a close distance to the searchWord
  4. Count the occurrences of these words on all pages
  5. Make a chance distribution from these and create a new searchWord

Opening a Google page in java is not as you would expect. Google checks the UserAgent value and sees that java is an unknown browser and will not return any results. You need to fool Google into believing that your java virtual machine is a known browser:

// fake the user agent:
// this is the user agent I am currently using.
String MyUserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17";

// Open connection and tell the URLConnection which user agent you are
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", MyUserAgent);

// now continue reading the file
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((String str = in.readLine()) != null) {
      // ...
}

After the google result pages have been loaded, a lot of code-stripping needs to be done to actually find meaningful text. Make sure to strip scripts as well, since they look like language.

After this I am also checking my words with an English dictionary.

While writing this article, I came across another word association application where you can play with the computer, each taking a turn associating. Try it.

Here are a few resulting word associating lists. The number in brackets are the number of milliseconds taken to find the next word. As opposed to Synthetic word-associating games (I) where words were found usually under 1 second, here the time taken for each words are on the scale of 10-50 seconds.

MURDER
degree    (15218)
academic    (38697)
main    (25216)
static    (14400)
class    (26739)
upper    (37278)
social    (20683)
term    (23356)
easter    (18544)
date    (24205)
day    (22997)
seven    (25399)
sound    (51433)
speed    (23601)
download    (28482)
bottom    (11050)
margin    (22834)
left    (34867)
politics    (17866)
history    (21236)
CHRSTIAN
katy    (21786)
news    (35267)
fox    (26500)
community    (28833)
more    (24806)
read    (18476)
reading    (13701)
festival    (65650)
food    (19333)
network    (26216)
computer    (30773)
personal    (22295)
company    (14017)
limited    (49951)
darjeeling    (19220)
district    (33827)
county    (31305)
ARTIST
watercolor	(22248)
painting	(36036)
art	(26014)
decorative	(32349)
history	(38820)
social	(17902)
anthropology	(21896)
cultural	(20971)
american	(55345)
import	(10570)
trade	(21797)
free	(44367)
software	(22549)
system	(55482)
use	(20733)
fair	(17950)
source	(22634)
counter	(25273)
ring	(17710)
diamond	(62717)
COMPUTER
personal    (21520)
company    (14545)
limited    (50118)
himself    (15215)
dated    (31271)
date    (26903)
day    (22779)
earth    (25247)
surface    (19450)
follow    (32749)
nose    (13835)
see    (19066)
dictionary    (13271)
cambridge    (11583)
university    (20680)
state    (20455)
nation    (31718)
content    (36159)
before    (16207)
present    (30025)
Posted in Optimal artist, Research, Uncategorized | Leave a comment

Increasing Behringer BCF-2000 fader resolution

RTFM!

Usually I don’t, but this time I did. Not to overlook any hidden features. And it paid off: NRPN, also known as Non-Registered Parameter Numbers. This is part of the normal MIDI protocol to support 14-bit messages. It has been implemented in the BCF-2000 and you can set up a fader pretty easily:

[edit]+move fader
knob1: MIDI data type -> choose ‘nrpn’
knob2: MIDI channel
knob3: parameter number
knob6: controller mode: A 14 (absolute 14-bit)
knob4: min value: 0
knob5: max value: 16384 (turn knob up to 9999 then up to 6383)
knob7: controller option: move/pick-up/motor
knob8: display value: on/off
[exit]

You can now use a program like MidiOx or the [midiparse] object from Max/MSP to test what is coming in. I made a small Max/MSP test patch for you to download.

I was fearing that the resolution wouldn’t be much higher, but luckily I was proven wrong! As opposed to the 1/127th standard resolution I got a good average 1/512th – 1/1024th resolution, increasing it to a 9-/10-bit resolution device, better suited for changing values like filter cut-off frequencies, sound amplitudes or pixel alpha values. This one is for you, Matteo!

Posted in Research, max/msp/jitter | Leave a comment