Friday, November 11, 2016

Tagger Grid Controller

I'll try to keep this short and sweet...

Yesterday, I did some work on the Tagger package of the Nine Worlds Desktop Software. The front end didn't change at all, the goal is a refactoring of commonality that I have wanted to do for quite some time.

For anyone forking or cloning the current repo (NineWorldsDeep) the relevant commits from yesterday are be79665, 874eb81, c45885a, and 424ddbb.

I created a controller class (TaggerGridController) to encapsulate the common functionality of HorizontalTaggerGrid (used in Audio media tagging) and VerticalTaggerGrid (used for Image media tagging).

The motivations for this were to implement some functionality common to both, and previously this involved a lot of copy/paste between the two UserControls.

Going forward we are working to implement a multi tag filter system, which will retain the partial matching of the current implementation, while adding support for both intersections and unions of multiple specified filters.

Stay tuned for further updates as to what that looks like in action. See you soon...

Tuesday, October 25, 2016

The Early Years: A Pestilential Inauguration of Dark Rhyme Prosody

My first album was primarily about familiarizing myself with the process of growing a projected set of tracks from conception to release.

I kept the beats intentionally simple and steady looping through the entirety of the song. Some had longer loop than others, but they all were straight repeat from beginning to end. It's been done plenty before and I selected it as format to get started quickly (Always Be Producing, Details Be Damned).

I chose to set a goal of five tracks, my rationale was that the average EP is 4-6 tracks and I decided to rest in the middle. I feel it is important to set specific goals like this. You have an objective to aim for, you know when a phase, such as recording, is finished and you can move onto the next phase, like mixdown, for those same set of tracks.

I try to spend time regularly messing about with beats in general. It's better to have too many than too few. The beats for this album were some that I had been playing with and I wanted to use as canvases for my lyrics. 

In each case, I had the beats before I had the full lyrics, but I constantly take note of lyric fragments as inspiration hits, so not everything in the songs was specifically inspired by the beat.

I'm not going to dissect each song bit by bit, I leave that to the listener. My goal here is to share the process and the experience.

I learned a lot from this first album. Mix-down and mastering nuances, songwriting and creative obstacles, sound design, recording techniques, and so many other aspects. Most of all, I learned how little I know, and how much more I want to explore.

Is everything perfect? Hardly. It won't be, not on an early effort. Focusing too much on perfection will prevent you from ever actually PERFECTING your technique. The word itself implies less than perfection. Get used to it, then get better.

Which brings me to my final point.

If you are a musician, and you haven't actually made an album yet, do so. 

Start now. Avoid excuses, and commit to finishing no matter how rough the end product (you most likely will surprise yourself if you are at all serious about it). Pour your heart and soul into it as if it was a million dollar studio album. Squeeze every bit of creativity you can from your meager equipment. Have fun with it, make it a journey of discovery. Embrace finality when its done.

And then start working on Album #2. And then Album #3. Keep going. So many people give up without even trying, don't be one of them.

Stay Creative. Always Be Producing.

Tuesday, October 11, 2016


I'm an organized person, I like sorted libraries of sounds that I can use for quick reference or improvisational inspiration. I've been toying with the idea of a Rhythm Library in NineWorldsDeep for a while now, something like a reverse scale lookup for drum and percussion patterns.

The coding part should be quite easy, but I need a hand curated set of rhythms to work with, at least as seed data, and the entire attitude of the NWD ecosystem is directed towards personalized repositories of creative elements. Something user generated instead of downloaded, something hand curated.

As you will see if you keep up with my blog, I tend to start with a manual process and then piece by piece replace various steps with software processes, little by little a manual process becomes machine augmented and potentially automated.

So, with that in mind, I have begun building a personal collection of reference notes, contained within an Ableton Live set, with the raw midi for each pattern exported to an NWD folder (located within the current hierarchy, subject to change, at NWD-AUX/abletonMidiExports/).

I named my project as I do many of my "meta" projects, with a "000-" prefix to easily place them at the top of an alphabetic sort, like so:

Within that folder, I created two sub-folders, "derived" and "learned". In keeping with the idea of mimicking a manual process, these are like a musicians notebook, the learned folder keeping track of lesson patterns, the derived folder being personal creations that evolve from rudimentary elements (the astute will be aware that all creative works are by nature derivative, as evinced by Kirby Ferguson's excellent video series "Everything Is A Remix").

Within the "learned" folder, I create a sub-folder for each "tutelary" source. There are a lot of articles online about creating drum patterns in a software DAW, but my method tends to deviate from many of those out there.

I approach the concept just like a physical drummer would, learning basic patterns and working up to more advanced rhythms. I find drum reference books to be a great source for this. 

There was one catch, I don't have a lot of drummer books floating around, but in the interest of my personal philosophy DIY DBD (Do It Yourself, Details Be Damned), I worked with what I had. 

There is a really introductory book I do own from back when I was a guitar player dabbling in drums on the side, The Everything Drums Book, by Eric Starr. I set my sights on exploring the basic rock section of exercises, for now.

Within my live set, I created a single scene, with a single clip, for each rhythm exercise (pictured below) and exported the MIDI to a corresponding file within the learned rhythm folder hierarchy (pictured above).

Note the red outline around the first five scenes in the image above. I use an Akai Professional APC Key 25 for my MIDI controller, and this displays the clips currently assigned to the hardware clip launch buttons. 

I mention this because a great side effect of setting up a project like this is that I can select a number of different but complimentary rhythms and then play them and mix them DJ style in realtime, giving me even more tools for creating larger rhythmic landscapes.

When selecting the MIDI patterns in the browser window, they will not automatically audition as audio samples do, but the following will popup where the audio waveform appears for samples.

Clicking on it will indeed preview the MIDI, but the default sound is a bit annoying. Like, really annoying and not at all helpful for drums because they are in a lower register of MIDI notes. So, in summation, you will see the following image, but you will hear atrociousness.

Undaunted and adventurous, I did some googling, surely someone else has been annoyed by this and my programming background had me suspecting there might be a hack out there to alleviate this.

Luckily, my hunch was correct and I discovered a great YouTube video by user Ableton Addict that addressed the very issue. 

I come from a piano/keyboards background, so I went with video's example of using a grand piano sample for the core note. This was additionally nice in that even with the drums in a lower octave, the piano notes still created enough of a differentiation to better discern the auditioning rhythm (as whichever sound you choose will be used for auditioning all MIDI, not just drums).

Post video directions, my Ableton Resource folder looked like this, and the obnoxious initial sample was no more (okay, relegated to backup for the pedantic).

Another productive day, another journey into creativity, and another daily dispatch from NWD HQ.

Do It Yourself, Details Be Damned. 

Question excuses. 

Always be producing.

Parallel Effects in Ableton Live using Racks

I’ve been working with Ableton for quite some time now, but I have to honestly say that I only am aware of a small subset of features available.

I’ve been trying to play around with anything that looks intriguing to me, and yesterday's foray was experimenting with using racks to achieve parallel effects on a given bit of audio.

I found a YouTube video that got my gears turning, and from there I just let my experimentation run.

I had some random samples laying about from a previous session where I was using external drum pads to play some live drum sounds, and recorded them into Audacity of all things (this was back before I really was using Ableton).

I picked a sample that I wanted to experiment with and I singled out my looping section in Simpler.

I dropped a chorus effect into the track, and then right-clicked "group" to create a chain for the Chorus. I fiddled around with the modulation until I found a spot I liked, and turned the Dry/Wet all the way up (100% wet). My goal was to use the chorus to create a sort of odd sound, not so much a chorus effect in the traditional sense.

Adding another chain into the rack, I put an Overdrive effect into this. I also assigned the x/y parameters of the Overdrive to my midi controller, giving each its own knob so I could manipulate them independently in realtime.

All set to go, I went to Arrangement View, and armed my MIDI track to record, being sure to enable automation recording as well. I just usually let myself run wild with these sorts of moments, it's like audio finger-painting to me, I approach it playfully. When I felt like I had a few minutes of material I was happy with, I was ready for my next stage.

First, I route the Master Audio Track into the input of another audio track, then record what I've done in MIDI to audio. 

This gets me a set of tracks that looks like this:

I disable the original midi track but usually keep it intact case I want to tweak it and redo the audio. From here I chop up the audio into loops I like. My favorite part is the nuances of sound sculpting the recorded automation creates. I can take the same underlying rhythm and get very different sounding samples from it.

When I'm freestyling, I avoid click tracks, quantization, all of that. Just the rhythm of me recorded raw. I was ear taught at a young age, long before I ever knew what a metronome was or why to use one, so when attempting to flow freely I find them cumbersome. 

This means my raw audio usually has a decent internal timing, but it's never aligned to the tempo of the beat grid. At this point, I take the loops I like and use warp markers to properly align them to the grid. It's important for me to keep them as intact as possible to truly preserve the spontaneity of the original, but interesting sounds can definitely arise from extreme warping as well. When properly aligned in the clip view, I drag them over to arrangement and export audio to create a new loop.

Through this process, I ended up with a handful of new loops in my library, and had some fun as well (always a bonus). 

For demonstrative purposes, I will update this post when I've thrown a couple up on SoundCloud.

Stay Creative.

UPDATE - Below are two of the loops I came up with using the above techniques.

Sunday, October 9, 2016

NineWorldsDeep for the (Windows) Desktop

The desktop app for the NineWorldsDeep ecosystem (NineWorldsDeep on Github) started quite some time ago, long before the first commit to the current repository. It was an idea I had in my early twenties, but took me until my late twenties to actually start realistically experimenting with it, and was years after that when it finally started taking the form it is now.

The plan always was to create a setup wherein I could pull together random inspiration on all manner of creative endeavors, and that original vision was for an expansive definition of those endeavors, including the obvious audio and visual media, as well as such far reaching aspirations as interconnected notes on subject matter for books.

All of this informed the design decisions from the start, with some inevitable meanderings into this and that direction depending on my shifting understanding of the technologies available and evolving intent for the system as a tool that ultimately was mine first and foremost.

Some time ago I realized I was spreading myself too thin, I was reaching burnout levels by attempting to take on too much, and scope creep was killing me. I had to make a choice. On the one hand there was the tech, which I’ve been good at all my life, but has sort of plateaued in interest for me. On the other hand, my music, which has also been a lifelong love of mine, started to really develop in me a vision of how I could take it further, if only I started devoting more time to my pursuit and understanding of it, beyond just jamming with friends (though that’s always gonna be fun).

I was interested in really trying to make something that was as much a personal journey into self as something I could share with others.

So the music took the lead, but in such a way as to make the tech as useful as ever, albeit in a dialed down fashion with regards to releasing new versions. I have made the decision to shelve major projects within both the desktop and mobile environments in an effort to make more room for standard maintenance and smaller but useful incremental improvements.


I had to lay out the background, that’s a rough summary, which brings me to the current topics for the repository.

There has been quite a bit of work as of late relating to “Clusters” and a concept of cluster comparison to compare large media sets to find commonalities and differences (like finding all duplicates, or syncing two clusters to replicate all missing media on either side, fun stuff like that).

As much as I would like to continue all of that, it’s too much work for an auxiliary feature. Maybe someday I will come back to it (the code is still there, the entry point into it will simply be commented out).

What had taken priority was a bug that was causing discrepancies between tagging on the laptop and the transfer of those same tags when exporting to mobile devices.

The problem is simple. I have various media (audio, images, writings/notes) that are tagged under a given subject. I want to collect all of those and export them to a device (say, my tablet) so I can take them with me and have them all at my fingertips when I am working on a related project.

Currently all tags applied on the mobile device are importing just fine into the laptop synced through the Warehouse subsystem. Exporting tagged media, however, does not propagate all tags going in the other direction.

I was stumped as some media did come through with the correct tags. The code was some of the earliest I had written, was “spaghetti with meatballs” (partial but messy OOP) like crazy. It took a bit of digging, but I was able to verify that the data was in fact being transferred OUT.

The issue actually lay in the intermediary sync step, wherein the existing data on the mobile device was taking precedence. The tags that were appearing to come through were those previously stored on the device and still registered to the media in question.

Luckily, I had anticipated this a while back and the new data was being written to a timestamped file to avoid overwrite, but the mobile software never got around to implementing the ability to import from these timestamped files, so there it waits.

Once the mobile is brought up to snuff, I will be moving forward with getting the old window based UI model converted into the new side by side view pane model, which I like for aesthetic reasons as well as practical purposes of comparison and linking.

That is your desktop tech update for today, straight from the NWD ecosystem HQ.

Stay tuned for further developments...

Saturday, October 8, 2016

My Own Private PanDaemonium...

We find ourselves here, in this shared moment, across time and space by means of various shades of techno-wizardry comprising the vast inter-webs of cyberspace. A message in a bottle adrift on a limitless sea of potential interactions, amidst the petabytes of data that churn everyday within the digital ocean of the online world.. 


*carny barker exits stage left*

In all seriousness, I’m starting this blog for a number of reasons, but I have to first and foremost give credit where it is most certainly due, to a little book I found in a local bookstore called Show Your Work, by one Austin Kleon.

I have been a creative individual for as long as I can remember, and have always been a bit shy about it. It is my personal exploration of my own inspiration, why the hell would I want to share that? 

Turns out art seems to grow even better when it isn’t living in a vacuum (who’d have thought?), and I am finding that putting some structure into my endeavors, like focusing on deliverables, has forced me to shed some of my self imposed barriers, to great effect.

So this blog is a way for me to summarize what I’ve been working on and where I plan to take it next. I have always considered myself an autodidactic polymath, so there’s always a few different projects going on. Currently, my time is spread among a mobile app, a desktop app (both open source), and my music.

Both the mobile app and the desktop app are designed as tools for organizing random creative inspirations. They work together and I’ve been using them for my own personal process ever since I started them over a year ago. Code-bases are on GitHub under Gauntlet (mobile) and NineWorldsDeep (desktop), feel free to poke around if so inclined.

They have grown and evolved alongside each other, and have always been personal projects, so they are far from something the average user could just use, but they are open source and stable enough for someone familiar with Android and C# to experiment with. I will go into greater detail in future posts.

Musically, this year has been a milestone for me. I recently finished recording my first album, an EP of five tracks, which is in the mastering stages as we speak. 

This is a big step for me, because I have tinkered with music since I was eight years old, but that’s a huge emphasis on tinker. This year I decided I was going to make something tangible, something I could point to when friends and relatives give you that “oh, you’re a musician” tone. 

It’s as DIY as an 80’s punk record, the beats are intentionally basic, the vocals are a bit rough, I mixed it without monitors (*gasp*). 

And I couldn’t be more proud. 

I stand firmly behind my first bass teacher who told me “you’ll never get good, if you can’t first be comfortable with being bad”. Not complacent, mind you, but comfortable enough to keep with it. Practice makes perfect. Start with a realistic goal, however imperfect, follow through to completion, and then take all the lessons (the “should have done this instead” doubts), and move forward into the next project with that experience under your belt.

So yeah, I'm rather pleased with myself. Wanted to tell someone. And I should have monitors by the time the next album is ready for mixdown (I'm not a dilettante, just poor and refusing to use that as an excuse to do nothing). Stay tuned for more updates, I’m going to try to post regularly. 

Oh, and I know this blog isn’t graphically pretty at the moment (or at least as pretty as I want it to eventually be). Chalk it up under the “acceptable imperfections” category. 

Dead last still outshines never finished, and never finished always outranks never started.

Let’s do this.