Posts In: interface

Nodal Interface

November 26, 2013 Algorithmic Art 9 Comments

Superior to a linear interface in literally every way. This is the beginning of the end for you, scrollbars, listboxes, treeviews, and all you other ridiculous little controls ūüôā

Nodal Interface 1

Nodal Interface 2

I3: Post-Processing and Finishing Touches

November 8, 2009 General News 0 Comments

After a week of heavy development, Interface3 has effectively reached maximum potential - there's virtually nothing left to improve upon.  Perhaps the only thing remaining is a preferences window.

I3 now has a post-processing bank and full post-processing capabilities, as well as a new tile that controls the composition name.  Finally, I3 gained the ability to set default states for plugins by directly manipulating the plugin configuration files.  This means that users waste less time configuring plugins that they use frequently with the same state - instead, they can just set that state as the default, and I3 will automatically load the configuration when a new instance of the plugin is loaded into a tile.  This simple yet elegant feature has already saved me a great deal of time.

A final screenshot of I3:

I3: Rapidly Expanding Capabilities

November 7, 2009 General News 0 Comments

As I predicted, Interface3 has already surpassed Interface2.

A few of the powerful features of I3 follow:

  • Full project loading & saving capabilities
  • Plugin state loading & saving capabilities
  • Copy & paste functionality with generative modules (creates duplicates of modules, including all plugin and configuration data; extremely useful for setting up a large number of generative modules)
  • Ability to remove modules
  • Flexible GUI overlays
    • This means that standard Windows controls can be used for the interface's secondary panels such as loading and saving menus, preferences, etc.
    • Saves a huge amount of development time

On top of all that, I3 is downright sleek.  It looks good yet simple.  It performs operations very, very fast.  So far, it's easy to develop and still powerful.

Looks like I've finally struck the interface balance.

I3 - Preliminary Designs & Test Runs

November 4, 2009 General News 0 Comments

In a mere two days, I've managed to design the visuals and implement basic functionality for Interface3. Perhaps this indicates that, at long last, I have crafted a balanced interface - one that looks good but isn't high-maintenance. Already I3 has full rendering capabilities, bar post-processing. With the features of I3 expanding rapidly, I3 could well overtake I2 in functionality by the end of the week.

Here's a screenshot of the early GUI.

Much of the interface will probably remain unchanged since I like this design. The simplicity of the interface adds to the feeling of speed and ease-of-use. As in Interface2, a tile-button scheme allows the user to easily load plugins into module slots. The plugin selection window (not shown) in I3 improves on that of I2, which could only display four plugin thumbnails at a time. I3 can display twenty-five. I've also doubled the number of generative tiles in the interface for extra power.

Perhaps the most remarkable thing about this screenshot is the "renderer" tile. Indeed, no previous interfaces have treated the renderer as a module, but I think it's time to make a shift. There's simply no reason not to treat a renderer like a plugin since the same basic principles of configuration, execution, and interchangeability all apply to renderers just as they do to core and generative plugins. Furthermore, this will solve the problem of having to find space in the main interface for all the rendering configuration options.

If the first two days of Interface3's existence provide any indication of how things will pan out in the long run with this new interface, mGen has a lot to look forward to.

I3 - Under Development

November 3, 2009 General News 0 Comments

Since I dedicated most of October's work to coding lightweight fractal, L-system, grammar, and genetic engines (all in one month!), I will once more return my focus to the interface during the month of November.

Interface2 (I2) has served mGen well for quite a while now. Unfortunately, I2 has hindered improvement of the core framework due to its glossiness. Though the interface looks great, it simply takes too much time to add new features that keep with the sleek, highly-polished feel of the rest of the interface.

As I discussed in a previous post, the next generation interface will aim to strike a balance between maintainability, which the early-generation interfaces boasted, and aesthetic appeal, for which I2 no doubt raised the bar to extraordinary heights. Interface3 (I3) will blend the best elements of both interfaces.

Development has already started, but screenshots won't come online until the GUI starts looking nice again. I'm excited about all the opportunities that I3 will bring back to mGen. By the end of the week I hope to see the framework recover loading and saving functionality, as well as plugin state saving and, in general, a lot more configurability.

The End of an Era

September 1, 2009 General News 0 Comments

Looking back through the saved projects from mGen, it occurs to me that the last assisted composition dates back to more than a month ago.  Moreover, there have been more "pure" compositions (i.e. not assisted) in the last month than in all other previous months combined.  It looks like the end of an era has come; assisted compositions are of a dying breed.

It is in a very positive light that I must observe the extinction of assisted compositions.  The very notion of an assisted composition implies a lack of competance on the part of the program.  It means that, without the help of a user, the program can't produce adequate results and needs the user to take the output a few steps further to obtain a decent composition.  Over the past month, however, with the rapid development and amazing success of Fraccut, coupled with some major improvements in structural techniques, mGen has demonstrated great capability in composing without any help.

I always became excited when I looked back through my archive of assisted compositions.  It wasn't hard to see the trend: each month, the compositions required less and less work from me to raise them to a level of appropriate quality.  The only conclusion to draw from that trend is that which is now evident: a day would come when the program would require zero help from the composer.  Indeed, this day has arrived.

Of course, I do stretch the truth slightly.  While I do not help the program write the score anymore, I still choose appropriate virtual instruments and mixing effects to render a good composition.  This is due to the fact that, since the upgrade to the fourth-generation interface, mGen is incapable of using the "Producer" program that automates the rendering task.  I've neglected it because it seems rather unimportant compared to the authoring of good plugins like Fraccut.  When I get around to fixing the production interface, however, mGen will truly be capable of composing with zero help.

My goal has always been "from one click of a button all the way to a rendered mp3" for mGen.  No stopping at MIDI, no stopping at a dry-render from a sequencer.  The process must include MIDI conversion, sequencing, virtual instrument loading, appropriate choices of mixing effects, appropriate automation, and whatever else the composition should require.

When it's finished, it really will be the ultimate source of infinite music.  Personally, I can't wait.

GGrewve's New Look

While most of the day was devoted to actual thesis writing, I did get a chance to work on some GGrewve improvements towards the end of the night. As with many of the plugins, the interface coding for the new GGrewve will take as long if not longer than coding the functionality. I've already finished a lot, though, and the "pool" system is now in place. It seems like it will speed up configuration immensely while allowing a greater degree of flexibility and realism for the engine.

I still have to add an "Advanced Configuration" panel for under-the-hood tweaking of the engine and make sure that data transfer works fine (saving and loading) between the configuration interface and the main executable. After that's done, I'll get to work upgrading the engine to handle the pool system and other improvements.

Here's a look at the new GGrewve:

Yes, I still have very few styles. And yes, Ulrich Schnauss has a special place in my heart, especially his song "Between Us and Them" (BUaT).

Looking Back, Looking Forward

After finishing some more serious work on the new interface today, I took a moment to appreciate the distance that the program has come over such a short period of time.  In my notes I have a screenshot of the main interface from April.  At the time, it was cutting-edge.  The new treeview made organizing the composition a lot easier, and the cute little banner up to gave the program some personality.

And now I look at what I've designed over the past week.  It's come a long way.  It's come from a shoddy, single-button proof-of-concept, to a complicated but functional panel, to a more organized treeview skeleton, and finally, to a user-friendly and ultra-sleek tile palette.  Visual progress is the easiest to see, which is why it makes me happy to know how much mGen has evolved over time, even if the inner workings aren't leaps and bounds ahead of those that were in place months ago.

If nothing else, I have succeeded in creating a very unique and functional platform for algorithmic composition.  That, in itself, is a success.  Whether or not I will be able to furnish this platform with the functional modules it will require to make amazing music, I do not know.  But I know that I've done something.  I've contributed.  And that's what I set out to do.

On a side note, I had a strange moment today when the new interface gave its first output (yes, the new renderer is already's true, I've come a long way as a programmer - I did indeed make it in about 1/3 the amount of code as the last renderer).  It was a simple test with only Easy Contoured Structure, ProgLib, GGrewve, and ChillZone pianist loaded.  Everything seemed to be going fine.  But then ChillZone freaked out.  It started doing crazy inversions and removing and adding notes somewhat randomly.  Weirdest of all though, was that these notes were all perfectly acceptable.  It was still playing in the key...but it was doing something I've never seen before.  Exceptionally odd.  The code hasn't been modified in over a month, as indicated by the timestamp!  So what on earth is causing this "ghost-in-the-machine?"  It's a pretty cool bug, I admit (if a little creepy).  But I'll get to the bottom of it.

Almost Finished with Primer

July 3, 2009 General News 0 Comments

I'm continuing work on the new interface and progress is being made very rapidly.  I've almost finished the frontend.  All I have left to do is apply some cosmetics to the render button and then add some menus for render settings.  For the most part, however, the important work is finish.  Module loading and changing works perfectly.

I'll probably tackle the data handling soon.  Maybe tomorrow if I work fast.  I've been working very fast lately though, and I'll have to keep up this pace if I hope to make my next deadline - 23,000 lines by the 15th.  Looking at this now I know it's not possible.  That's simply too steep of an increase from the last deadline (17,000 on the 1st, which equates to 400 lines per day for fifteen days straight).  Regardless, I can try to get as close as possible to this mark.

Sleeker, Faster, Prettier

July 2, 2009 General News 0 Comments

The emerging interface is both proof that hard work can accomplish anything, as well as hope for those like me that thought interfaces can't be designed without artistic talent.  With enough fooling around in photoshop and the likes, I managed to produce an interface that, to my standards, is extremely slick.

I hand-coded all the controls, so you'll find no standard buttons, listboxes, etc. in the new interface.  Everything is custom.  And the work paid off.  It looks great.

Not only does the interface look great, it also works great.  It will be a very powerful and streamlined interface when I finish it.  I've already finished the plugin loading functions and the structure & progression tiles are already fully-functioning.  Unlike in the last GUI, where the user had to double-click the correct treeview entry, select a text-only plugin name from an ugly listbox, then click an OK button, the new interface demands only two clicks to load a plugin: one on the tile into which the plugin will be loaded, and the second to choose the plugin.  Furthermore, plugins are displayed as tiles instead of text, so finding the right one among many is as easy as identifying the correct icon.  It's way faster (not to mention way more fun) to load and configure plugins now.

As soon as I finish the frontend, which will probably be a few more days, I'll have to start grinding out the backend.  I feel like the last interface's rendering functions were bloated, to say the least.  I hope to be able to do it all over again in less than half the code.  I think that's pretty reasonable given how much I've improved as a programmer since the time the original render code was written (seventeen thousand lines ago).

Things are definitely looking up for mGen's aesthetics...but the real question is: will these new aesthetics inspire more creative advances?  Or will mGen just be a good-looking failure?  I guess I'll have to keep pressing onward to find out.