Joined: Jul 07, 2007 Posts: 2081 Location: Berks County, PA
Audio files: 90
Posted: Wed Dec 17, 2014 11:49 am Post subject:
Subject description: HexAtom
Am about a third of the way through the recordings in this thread, and loving it so far. Thanks for posting.
My contribution is a MOV video over on FB that I posted this morning. I tried converting to MPEG2 using Adobe Premier Pro, but it drops the right audio channel no matter what I do, so I gave up. You may need Quicktime to view it.
This is the current version of this HexAtom software using built-in Java library soft synths that I started using with Scrabble-to-MIDI back in 2009. For NYE2014-15 I plan to use this approach with AAS physical modeling soft synths, haven't started working on the patches yet. The genesis of this approach goes back to the chess-to-just-intonation music that my son Jeremy & I performed in the NYE2007-08 webcast, which really took off after our discussion here of the Glass Bead Game.
The current state of HexAtom in the video is that the graphical atoms in the cellular automaton generate MIDI (the original mode of HexAtom), and also the generated MIDI notes generate and/or destroy graphical atoms. The latter part is new as of last summer. I used that at electro-music 2014, and am expanding it as I get time. Thus there is a feedback loop between graphical and MIDI audio domains.
Here is the jython patch used to automate this particular performance, which I wrote this morning
Code:
# module nye201415 for New Year's Eve 2014-2015 practice and performance
# D. Parson, December 2014
from javax.swing import Timer
from java.awt.event import ActionListener
import types
class TimedNoodleStateMachine(ActionListener):
'''
This is a noodle driver that goes off every 30 seconds
and update the state of the HexAtom universe. We cannot put
a sleep in the main event loop -- it blocks the GUI event
thread -- so TimedNoodleStateMachine uses a javax Timer to time
the cmds passed to the constructor.
'''
def __init__(self, cmds, interp, ms, invokeFirst=True):
'''
Initialize the state of this ActionListener state machine.
Parameter *cmds* is a sequence (list or tuple) of commands,
OR a Python generator of commands. The sequence can contain,
or the generator can generate, eother individual commands as
strings, or can contain/generate sequences of commands in the
for of subsequences of string commands.
Parameter *interp* is the interpreter for the set of commands.
Parameter *ms* is the number of milliseconds between invocations.
Parameter *invokeFirst* if True (default) runs the first command
sequence immediately, before starting the timer.
'''
self.cmds = cmds
self.interp = interp
self.ms = ms
self.timer = Timer(ms, self)
if invokeFirst:
self.actionPerformed(None)
self.timer.start()
def actionPerformed(self, event):
'''
When the timer goes off, interpret the next sequence of commands.
'''
cmdseq = None
if isinstance(self.cmds, types.GeneratorType):
try:
cmdseq = self.cmds.next()
except StopIteration:
self.timer.stop()
return
elif len(self.cmds) > 0:
cmdseq = self.cmds[0]
self.cmds = self.cmds[1:]
else:
self.timer.stop()
return
if isinstance(cmdseq, str):
self.interp.interpret(cmdseq)
else:
for c in cmdseq:
self.interp.interpret(c)
def testnye1415(interp,ms):
'''
Test driver for practice run for NYE 2014-15. This is not based
on the patches I will be using. It is a simple noodle to test
the software out using synth patches provided by the Java library.
I will use AAS synths for the actual event. This just tests
the plumbing.
The *interp* parameter is the jython command interpreter object.
The *ms* parameter is number of milliseconds between advancing the
state machine.
This function returns the reference to the TimedNoodleStateMachine
object constructed, which is not needed for now.
'''
cmds = (
('pmt0=1', 'pmt1-11=1', 'pft12=1',
'A0-5', 'Q0-2', 'd3', 'pvf12=.077050', 't60', 'e255', 'a0ne0r17',
'shx.0', 'shy.0', 'trx.0', 'try.0'),
('A0-8', 'Q0-4', 'd7', 'e50', 'shx.5', 'shy.5', 'a0nw0r19'),
('A0-11', 'Q0-7', 'd13', 'e10', 'shx.75', 'shy.75', 'a0sw0r23'),
('d23', 'e1', 'shx.9', 'shy.9', 'trx.5', 'try.5', 'a0se0r29'),
('e5', 'shx.5', 'shy.5', 'trx.0', 'try.0', 'pvf12=.074070', 'a0n0r31'),
('e10', 'pvf12=.071090', 'd3', 'shx.0', 'shy.0', 'trx.0', 'try.0',
'a0x0')
)
noodle = TimedNoodleStateMachine(cmds, interp, ms)
return noodle
The pvf commands relate strongly to the feedback The probability of vacuum fluctuation value at the beginning of .077050 means that when a MIDI note feeds back into the cellular automaton (CA), there is a 70% probability (the third & fourth digits) that it will generate a new atom 7 semitones (the .07 -- affects color and MIDI pitch) above its original MIDI note, and a 50% probability that it will absorb the original atom. the 70-50 ratio is regenerative feedback. The later pvf12=.074070 (the 12 just means apply it to all 12 atomic numbers) makes this a degenerative 40%-70% ratio, and the final 10%-90% ratio kills the piece. Other transforms in the above rows change diameter of the space, skew and center of rotation of the atoms, and other properties of the CA.
I am posting an MP3 for completeness, although watching the video in HD is the thing to do. I have also posted a screenshot of the CA-to-MIDI mapping GUI, which I didn't touch at all after starting the noodle.
[/code]
hexdec172014C.mp3
Description:
MP3 recording, Dale E. Parson, copyright Creative Commons 3.0, December 2014
Filesize:
2.84 MB
Viewed:
4002 Time(s)
Screen Shot 2014-12-17 at 1.46.57 PM.png
Description:
Screen shot of the atom-to-MIDI mapper. You can live code in Python.
Filesize:
187.02 KB
Viewed:
788 Time(s)
This image has been reduced to fit the page. Click on it to enlarge.
_________________ When the stream is deep
my wild little dog frolics,
when shallow, she drinks.
Joined: Jul 07, 2007 Posts: 2081 Location: Berks County, PA
Audio files: 90
Posted: Tue Dec 23, 2014 8:45 pm Post subject:
Thanks, Jack!
Michael, I'll give you a demo next June in the planetarium. _________________ When the stream is deep
my wild little dog frolics,
when shallow, she drinks.
Joined: May 29, 2011 Posts: 2 Location: Hobart, Tasmania, Australia
Audio files: 1
Posted: Sun Jan 04, 2015 4:15 am Post subject:
Well, that was a hard act to follow
This is a contribution I've put together using some of my modular synth setup, the modules used are all DIY ones. There are four complexly modulated sound sources:
LFO'd VCO,
FM'd VCO,
4x resonating filters,
"cymbal noise" source,
which are then treated in various randomly modulated ways, passed through VCAs with envelopes and cross fading and panning, controlled by various switches run by a LFO with the rate being modulated by yet another random source. I added some feedback paths to provide extra chaos to the modulation and then tweaked through a number of iterations until i was happy with the result. The patch was then allowed to run for around 12 minutes until it got to a natural fade out and I stopped recording.
Joined: May 14, 2010 Posts: 458 Location: West Coast
Audio files: 111
G2 patch files: 7
Posted: Mon Jan 05, 2015 12:16 pm Post subject:
Loving this! Nice job, blairr.
FWIW. Anyone who wants their track included on the Noodles Comp Album (see here: https://auralfilms.bandcamp.com/album/noodles) should include a FLAC file with their post. Optionally, I can convert your MP3 file if you prefer. Just let me know. _________________ Jack Hertz.com | Aural Films
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum