SOFTWARE | Xoxos

SOFTWARE

Berserker

2d top down (convertible?) ball-and-chain melee game, good for a few minutes of mindless smashing. The visual effects don’t capture well in stills. They and the AI voices are kind of fun.

Fite

Fite is a basic 3d fps for win32 i wrote for experience. 16 levels progress through various coloured height field environments accumulating points for weapons and faster engines.

All parts of the implementation are about as elementary as they can be – procedural audio, artificial intelligence, graphics (solid triangles) rendering being performed on the cpu so availability of a graphics processor does not matter. iirc the game loop is about a thousand lines and the total is about 2000 or so with sounds and height field design accoutrement, demonstrating that without any use of directx or opengl, such things are possible for one person to achieve in about nine weeks of work.

Blewm

32 bit windows exe, entry for one of the kvr dev challenges. Blewm is a procedural music generator (in the “dope beats n beeps” category) written in ten weeks. Some parts are less developed than others. While not as prolific as new blend, more critical aspects of the listening experience are more refined here.

The development of blewm was primarily to test ideas for adaptable rhythm and chord structures. I am not sure why i chose to make the app unfriendly to desktops (cannot be dragged) i guess i got tired of all the stupid win32 border styles and figured, if people are using it, they want to be listening to it.
download zip file

Levels

Levels is a simple, fun 2d bouncing game where you control a bubble that destroys zombies and security drones by jumping on top of them. Bounce to higher levels to acquire shooting and flying abilities. Until I do something about it, this game only runs correctly on monitors with a 1024 pixel width.

Names 1.0

Names 1.0 is a parametric language generator. With some application it can be used to produce names for fiction. Otherwise, it’s just a weird toy.

Lyrics 2.0

Many years ago I released a dodgy bit of C++ that produced a text file containing randomly generated sentences arranged into verses. I decided to update this as one of my first projects with the Win32 SDK.

Lyrics 2.0 improves on the previous version by adding optional metering and rhyme to generated verse. It’s still short of perfect, a few grammatical conventions were overlooked, the rhyming scheme only takes into account the last two vowels, and it doesn’t recognise when it’s used the same word in a rhyming pair.

What it does do is allow you to indicate the number of lines, syllables in each line, and customise the rhyming scheme. It uses a list of almost 9,000 polite english words.

And now.. a taste of its wares!

vaguest between the powerful pouches
to your roamer its wise rider shouted
purified chargers for those unbrowned thoughts
flying sunnily from that white outlaw

feast over there from that delicious height
you were going to live during a type
you with that air haven’t often been ranked
your present below it’s unsweet tree spanks

from sired defenses within those voices
to her unwise monarch I was pointing
purely design those feats between those lairs
our ocean without a medal won’t stare

around a mouth an attack has shifted
for the meteor you must be spinning
you will be ruminating with the scene
concluded quietly of the harmonies

they with that known valley were erupting
it’s slain, unwoken cheeses amongst wits
violently wished aside his bared ribbons
beautifully damaged below prisons

or…

this might unmindedly seek
teasers have aligned
feasted beyond a belief
without their ally

attended above her wine
with that fired stoker
impressing beyond her vines
from that huge omen

I am attending swiftly
I shall overwhelm
he would have raked easily
I am often read

a befriender for smokers
over that wierd talk
us within those sheared rollers
over her fierce fork

over that imitator
from it’s unbared past
below an automator
that text from their harp

BreathCube 1.1

This is technically a VST. Hermann Seib’s SaviHost is included as a wrapper to make the .dll work as a standalone. Copy all the files in the zip folder to the same directory. Run the .exe.. wait momentarily until “Ready” appears at the bottom of the GUI, then press play (the button with the little triangle underneath it).

BreathCube generates simple “pop music” in realtime. A 3-band voice synthesizer sings simple lyrics. The current word is textually displayed to assist in comprehending BreathCube’s accent (this feature was added as the update to 1.1).

It will become apparent that BreathCube uses the same song structure, though patches, effect chains, key, chord progressions et c. change. BreathCube may also be found to develop temperaments based on the machine it is running on, mood of the listener, planetary alignments et c. 🙂 While the structure is very simple, the compositions vary widely, occasionally ranging into the sublime.

BreathCube was created in 2004 with SynthEdit, before I was using the SDK to embed C++ routines. Probability events are generated using synced oscillators, which in my estimation accounts for some musicality.

The hydrant cyclops gracing the GUI was rendered by Shane Sanders.

New Blend

New Blend was my entry in the KVR Developer Challenge 2009. The objective was to develop an algorithmic music engine that improved on BreathCube, adding user configuration. The ambitious scope of this project – to make something that would begin to fulfill myriad listener expectations – proved to be the primary obstacle. Three months of development hardly addressed the desires one would have of such a product.
As time went on, I continually opted to develop the sequencing engine and deferred the timbral/audio engine to a mere week before the due date. The timbral engine suffered accordingly.. expanding on the simple synthesis engine used for BreathCube, some of the new algorithms (as patching is also algorithmic) had unexpected dynamics that would cause sounds to overwhelm others or disappear in the mix.

Around this time, despite laborious bug checking, the project suddenly started to crash. My knowledge of compiling did not allow me to identify the source of the crashes. There were around 50,000 lines of code written for the project.. each phase of development was laboriously acid tested. It’s also possible that I may have surpassed a threshold of resourcing appropriate for the SynthEdit SDK. New Blend rarely makes it past a half a dozen songs without crashing and needing to be restarted on my system. Users reported similar or worse performance.

New Blend also uses Hermann Seib’s SaviHost wrapper. The GUI allows the user to configure minimum and maximum BPM, the percentage of songs with swing rhythms, the percentage of songs in 4/4, 3/4 or various odd time signatures, percentage of nine musical scales and of probability to switch scales in a piece, and the overall length, density and complexity of generated music. A button raises the frequency of the bass filter so that bass sequences may be heard on laptops.

Overall, it’s less appreciable than BreathCube not only for the lack of stability, but because of the lack of performance interest when instruments are patched at inappropriate volumes. Yet again, with tolerance of its performance boundaries, it is capable of producing some surprising and delightful music, of significantly greater complexity than any of its predecessors.

The release of New Blend failed to ignite public excitement for the potential of automatic music generation. I don’t get it – with more refinement, these applications would transform the public experience of music. We are aware that electronic and generated music are not soulless. A contextual algorithm could be produced so that generated vocals were less enigmatic than my developments tend to be. As a musician, the odd time signature sequences excite my imagination. The progression engine ensures that you’ll never know what you’ll get, beyond that it’s guaranteed to be precisely sequenced.

Unless it crashes. Then you have to start it again.

Interpolation Explorer

One of my “Hello World” Win32 apps.. the only benefit of this is a visual experience of the merits of bicubic and hermite interpolation (both well documented at places like musicdsp.org and Julius O. Smith’s various websites, amongst hundreds of others..)
Of course in audio, how they sound is almost as important as how they look 😉

Filter Coefficient Calculators

This zip file contains two command window .exes developed from information at www.dspguide.com. One generates a text file of coefficients for Chebyshev filters, and the other for windowed sinc filters.

The Chebyshev proggie takes cutoff (as fc/fs), ripple, low/high and pole, the windowed sinc takes cutoff, window length and type (5 types) and options for printing style, eg. line ends in comma or semicolon, et c.

C++ source code is included. These were compiled with Borland FCLT, other compilers may use different commands for setprecision (# of places to print numbers as).

c++ win32 basic sound and graphics source

I’ve only taken a few steps in multimedia win32 apps, so this source is not authoritative, but, it works! The .exe draws an asteroids style ship that can be piloted with the arrow keys. Each background pixel is shaded red or green to indicate whether it is left or right of the ship to demonstrate a point to line check.

The source is a concise example of BitBlt to redraw the screen. A 2d vector class is implemented, along with an antialiased line algorithm and the point to line check. I wrote my own antialiased line and circle algorithms, there are some notes at the xoxosvst wordpress blog. It’s called the pothead line algorithm. Change the margin coefficient to 0.5f for thicker lines.

Uncommenting the audio routine will produce a 440Hz sine.