October 19th, 2016
MDAL - First Public Beta
The Music Data Abstraction Language (MDAL) project has been taking up a lot of my time in the past two months, and after three days of hardcore bugfixing I finally advanced it to a point where I can show off a working beta. The whole thing is still at a very early stage though, so don't expect to get much use out of it yet.
So what on earth is MDAL? Broadly speaking, MDAL is a different take on the subject of music markup languages such as MML or ABC. While the latter are closely related to traditional music notation, MDAL has it's roots in tracker music. MDAL uses a notation that closely resembles module files, meaning it has a sequence-pattern-row structure.
The main objective for now is to provide a simpler alternative to hard-coding music in assembly for those 1-bit routines where XM conversion isn't feasible. However, it may become useful for, uh, other things in the future... For the time being, only the BetaPhase engine is supported, though.
October 15th, 2016
New ZX Beeper Engine: BetaPhase
A rather unassuming three-channel engine sound-wise, BetaPhase is in fact a little technical revolution. It features a never-before used tone generator technique which is faster than any other pulse-interleaving method. As the name might suggest, BetaPhase is primarily intended to provide a framework for testing the capabilities of the new technique. For the time being, BetaPhase implements an original idea proposed by Shiru, which is to use phasing to control the duty cycle (duty threshold comparison wouldn't work). It also uses scalers, something proposed by zilogat0r a while ago, though I'm pretty sure he didn't imagine them quite the way they are implemented here. Long story short, BetaPhase is available as source code only, and may be subject to frequent changes.
September 23rd, 2016
New ZX Beeper Engine: PhaserX
While playing around with Phaser-style synthesis, I came up with some fresh ideas centered around modulating the duty cycle in sync with the tone generators. PhaserX is essentially a testcase for these new concepts. It's two channels only, but it has a load of configurable parameters. No XM converter again, source code on github as usual. I've also done a little write-up on the techniques used.
September 2nd, 2016
HoustonTracker v2.20 Released
Time for a HoustonTracker update! It's got more effects, it's got more fine-grained speed control, and best of all, it ships with a new savestate manager utility which can import tracks from older versions. Check out this tutorial video on Youtube for an overview over the latest feature additions. Got a new demo tune as well, though I made this one at a rather early stage of development, hence it actually doesn't demonstrate most of the new effects.
August 11th, 2016
New ZX Beeper Engine: Phase Squeek
Phase Squeek is an unholy cross-over between Shiru's Phaser engines and zilogat0r's Squeeker, with loads of configurable sound parameters. Also known as TOUPEE, the Totally Overpowered, Utterly Pointless Extreme Engine. No XM converter this time, because there's no way this engine can be simulated with an XM template. Demo tune + source code + download
August 1st, 2016
Combining AY and ZX Beeper
Been doing some tests with a music driver that couples the AY soundchip with the beeper. This might actually be the first engine ever to do a full sync between AY and ULA sounds. Not sure why it hasn't been done before, there's really no big magic required. Simply update AY registers once every 256 beeper soundloops, that's all there is to it. I'm too lazy to make proper release of this, but if you like you can study the source code, which also includes a short demo tune.
July 31st, 2016
New ZX Beeper Engine: Squeeker Plus
Making an engine based on zilogat0r's wonderful Squeeker engine (written in 2000, when the ZX beeper scene had almost died completely) has been on my to-do list for a long time. Now I've finally gotten around to it, adding per-tick channel-independant duty cycle control, a noise generator, and some percussion to the classic. Very pleased with this one! Demo tune + source code + download (includes an XM converter).
June 10th, 2016
Two New ZX Beeper Engines: zbmod and Beepertoy v0.1
Two for the price of one! Exhibit A: zbmod, a 3 channel MOD player. It's meant to replace the notorious SampleTracker, which until now was the only engine to mix 3 sample channels on the Speccy beeper. I think it's fair to say that zbmod sounds much better :D It also has a better tone range, and the ability to loop samples. Demo tune + source code + download (includes an XM converter).
Exhibit B: Beepertoy v0.1. Now this one is a beast! It brings together various different engines under one hood. So you can have the best of both the pin pulse and pulse interleaving world, as well as advanced wavetable synthesis with bleeding edge fx technology. Demo tune + source code + download (does not come with an XM converter, unfortunately).
May 26th, 2016
New ZX Spectrum Beeper Engine: Octode 2k16
Yes, it's been pretty silent on here lately... but rest assured, any rumours about me quitting are completely unfounded. The past weeks I have been busy putting together the next HoustonTracker release, which will be out soon. Also, I'm learning C++ and cross-platform GUI programming with wxWidgets. Nevertheless, it was about time for some asm practise, so here's my latest beeper engine creation - Octode 2k16. In short, it's a re-write of Octode PWM with better sound and increased frequency range. Check out the demo tune on Soundcloud, view the source code on github, and most importantly download the package (includes an XM converter).
April 5th, 2016
Low-pass and High-pass Filters on ZX Beeper
Achieved a new breakthrough in 1-bit technology by implementing the first ever low-pass and high-pass filters on the ZX Spectrum Beeper. Not sure what to do with that yet, so for the time being there's just this .tap with a little test loop for you to check out. First loop is unfiltered output, followed by low-pass and finally high-pass filtered output.
April 4th, 2016
QED68 - 4 Channel Sample Playback on TI-92 Plus
Got a new 1-bit routine ready that will play 4 channel modules with PCM WAV samples on the Texas Instruments TI-92 Plus graphing calculators. If you happen to own a TI-92 Plus, you can download the QED68 package (includes an XM converter), view the source on github, or check out this heavy metal demo track. Many thanks to 1ng for donating his TI to the good cause.
April 2nd, 2016
5th DMG Channel Discoverd
Umm, well, not really. This was just some high class trolling for April Fool's Day. Nevertheless, I did code up a little something that will produce 5 voices on a standard Gameboy. This is achieved by mixing two voices on the Gameboy's second pulse wave channel, using 1-bit pulse interleaving. Watch the video, or grab this ROM. Most emulators will either produce horrible noise or no sound at all, so make sure you check this on actual DMG hardware. mednafen and Gambatte (on highest resampler setting) will work as well.
March 17th, 2016
HoustonTracker 2 Nominated for A Meteoriks Award
Very pleased to announce that my TI calculator tracker has been nominated for a Meteoriks award. For those who aren't in the know, the Meteoriks awards are pretty much the Oscars of the demoscene. The winners will be announced at the upcoming Revision demoparty. So until then, keep your fingers crossed for me, will ya?
March 3rd, 2016
New ZX Spectrum Beeper Engine: fluidcore
Expanding on the ideas from my recently released "wtfx" player, I've created another new 1-bit sound routine for the ZX Spectrum beeper. Fluidcore mixes 4 channels with a total of 17 volume levels, mixed at an incredible 23 KHz. The engine can also handle overdrive, like my "qaop" player. Also, unlike wtfx, the fluidcore does include an XM converter. Watch the demonstration video on youtube, listen to a hardware recording on soundcloud, view the source code on github, and most importantly download the package and converter. Last but not least, here's the pouet entry.
FEBRUARY 29th, 2016
Got A New Camera!
The parents of my girlfriend were kind enough to give me their old camera. It's a Praktica MTL-3, an analogue single-lens reflex camera made by well-known East German manufacturer Pentacon in the late 1970s and early 1980s. This one is in near-mint condition, and comes with several extra lenses and other auxilliary equipment. Some of you may know that my old camera got stolen in Sweden last year, so it goes without saying that I'm very happy to receive this gift. Looking forward to getting back into analogue photography as soon as possible.
FEBRUARY 19th, 2016
HoustonTracker 2.10 Released
The first major update for HoustonTracker 2 is here. Version 2.10 features a more powerful sound driver, and several new effects. Keyhandling is more streamlined, and a sizeable amount of bugs has been fixed. For a full list of updates, check the development thread on 1bitforum. I also made a quick demo tune with the new version. Last but not least, here's a direct download link for the new version.
FEBRUARY 17th, 2016
Irrlichtproject.de Back Online
Yup, the site's back up after a prolonged downtime. All the content should now be accessible again. I sincerely apologize for any inconvenience caused.
FEBRUARY 3rd, 2016
New ZX Spectrum Beeper Engine: wtfx
In my search for a more accurate, distortion-free PCM wavetable playback on the ZX beeper, I've come up with a new engine. Named "wtfx", the routine mixes 2 channels with 4 volume levels each at a blazing 17.5 KHz. This time, I've followed the advice by introspec and implemented 8t output alignment in order to work around the Spectrum's I/O contention issue. wtfx also features tick-based effects, meaning you can change pitch and instrument settings within a row of song data. Unfortunately this means there is will be no XM converter for this engine, and until the routine is implemented in a proper editor, the only way to make music with it is to code it by hand, in assembly. So, it's more of a tech-demo than an actual music making package. For now, you can watch a short demonstration video , view the source code on github, download the package for further inspection, and upvote the entry on pouet.
JANUARY 31st, 2016
irrlicht project featured on IOUT Open Mixtape 2015
I'm pleased to announce that my ZX Spectrum track "Showdown" is featured on the brand-new Interpretation Of Universal Transmissions' Open Mixtape 2015 compilation, which was released yesterday. The special thing about this compilation is that each of the artists was also asked to submit a few thoughts in writing. So, if you're interested, read my latest rantings on 1-bit music. Anyway, stream and/or download the compilation on IOUT's bandcamp.
JANUARY 22th, 2016
Website Version 5.0 Launched
More than five years after the last major overhaul of this website, it was about time for a new irrlichtproject.de layout. As I have since adopted "Digital Minimalism" as my artistic credo, a minimalistic layout seemed appropriate. The new site has been hand-coded from scratch, like all the previous versions.
A major problem with the old site was that it had hit the limit in terms of the amount of content it was able to include. So my objective was to produce a layout that would be more flexible and dynamic. Also, the old site did not display well on mobile devices. Even though I'm not a fan of these gadgets, I nevertheless felt the need to provide a proper viewing experience for those who are.
A few words about the coding experience. Prior to making this new layout, my knowledge of HTML dated back to the early days of 4.01, so the logical step was to throw most of that knowledge out of the window and start re-learning HTML from scratch. While I thoroughly came to appreciate HTML5 and the changes that it has brought, I'd love to see the same principles of coherence and stringency applied to CSS3. Sure, with version 3 CSS has become very powerful, which is great. However, syntax-wise CSS is still the same ugly, indecipherable mess it has always been.
Well, at least I thought so until I had a closer look at SVG. If CSS is a thick but friendly forest where you can occasionally get lost, then SVG is an impenetrable jungle with malicious spirits lurking at every corner. No doubt it's a powerful tool, but in my hands, it rarely does what I want it to do. Especially not when it's being displayed in a browser. It actually brings back memories from a more sinister CSS past, when you had to supply properties in a certain order to make sure it displays properly in most browsers. The same is happening now with SVG. Despite that, it's a neat technology that I definately want to explore further. As a truly reliable web standard however, it's not quite there yet in my opinion.
By the way, that "version 5.0" part is entirely made up. I've operated my own website since the year 2000 and naturally, it has seen it's share of changes and revisions. I've actually lost track of how many times I've changed the layout over the years, and most of the old layouts have been lost in the void of retired, dying hard drives. Well, 5.0 has a nice ring to it, so here we go.
JANUARY 13th, 2016
XM Converter for Squeeker Beeper Routine
Making an XM converter for Zilogat0r's infamous Squeeker 1-bit routine has been on my to-do list for a long time. I absolutely love the sound of this four channel ZX Spectrum routine and it's unique synthesis core, but so far the rather cumbersome BASIC editor by Factor6, which was the only available interface until now, has put me off actually doing some music with it. Now I finally got around to making an XM converter for it. It's based on the 2012 version of the routine (the original having been written back in 2000) and uses a new data format of my own design, which is less memory efficient than the original, but loads faster and allows in-tune tempo changes. Download the converter here.
JANUARY 10th, 2016
New Track for DiHalt Lite Beeper Music Competition
Managed to finish a new ZX Spectrum beeper music track, just in time for the 1-bit music compo at DiHalt Lite 2016. Decided to give my own quattropic sound driver a whirl this time. I actually came in second in an overall very strong competition, so thanks to everybody who voted for me! The track is called "Frozen Flames", you can stream/grab it for free on the official vote page as long as it's still online.
DECEMBER 28th, 2015
New Doppelplusungut Album Ready
The same procedure as every year James... At the end of the year, tradition requires that I meet up with DJ dat zekt to record a new album for our trash-punk project Doppelplusungut. The new album contains 28 tracks (plus the obligatory "hidden" bonus material) with a wide range of styles ranging from Blues to Speedcore, made on an even wider range of mostly obscure instruments. This year's setup even included a refrigerator. Of course Doppelplusungut's trademark multi-dimensional space radio play epos is continued as well. Amazingly, we finished the whole thing in just three weeks, including production of the initial run of 50 CD-Rs. As usual, the album is only available through personal contact, or via a certain record store in Berlin.
NOVEMBER 11th, 2015
Computer Music in 1949?
As some of you know, researching the origins of computer music is one of my long-running side projects. Earlier this year, I was able to confirm that the first public demonstration of computer music had in fact taken place a few months before the events surrounding the Australian CSIRAC machine in 1951. Now however, I've discovered a spectacular source that pushes the date back as far as the year 1949. read more on Ancient Wonderworld...
OCTOBER 6th, 2015
HoustonTracker 2 Released
Horray, it's finally done! My new music editor for Texas Instruments' graphing calculators was officially released at the Deadline demoscene event in Berlin last weekend. For further details, downloads, and documentation, head over to the official HoustonTracker website. What follows here is a little making-of, and some personal thoughts on the project.
A few years ago, I made my first attempt in creating a native tracker tool for the Z80 line of TI graphing calcs, which resulted in the original Houston Tracker. Naturally, my inexperience in writing a tracker software led to some bad choices. The UI and workflow of the tool were tedious, the sound drivers had detuning issues, the data format was inefficient, and worst of all I ran into some critcial bugs which proved impossible to fix, not least thanks to the disorganized mess of code I had created. So ultimately I had to abandon the project.
Since then, I'd always wanted to go back to the project at some point, and to rewrite the whole thing from scratch. This year, I finally found the time to do so. I started to work on HT2 in mid-February, kicking things off with a new custom sound driver. From the first drafts, it took about a month till I was satisfied enough with it. Next, I started to build the GUI and the graphics drivers. At first, the GUI was quite heavily based on the original HT1, except that I opted for a more traditional sequence-pattern structure as known from successful trackers like LSDJ and Famitracker, as opposed to HT1's pattern-less approach which was mostly based on Shiru's 1tracker (still my #1 choice for music composition). As I went along, more and more elements from HT1 disappeared. Pretty much the only thing that survives now are the markers (BS/BE) that you can use to edit the sequence.
The next step was to implement the underlying editor logic. Especially the keyhandling proved to be surprisingly tricky. Naturally, I wanted the keyhandler to be as fast as possible, but the darn thing just kept glitching and glitching, especially on the newer calculator models. One cause for this was that TI has been using cheaper and cheaper components over the years, making the keypad hardware more and more sluggish. This is quite well documented though, and should not have been such a big issue. What isn't documented however is the fact that TI does not de-bounce the keypad of their calculators, so releasing a key has a good chance to actually act as another keypress. You'd think that 30+ years after the TI99/4A, they'd have this figured out, but no. Well, I finally got the keyhandling working, but the implementation remains weak, so I'll probably rewrite it at some point.
Another major problem I ran into was that on the newer TI models (83+/84+), random RAM failures kept occuring. It took me several weeks to figure out the root cause. Who would have thought that the hardware of the newer models can, by design, draw so much battery power that the RAM refresh will fail? Deactivating several hardware components (USB, timer crystals) finally did the trick.
The last big step was to add the file system and logic used for storing song backups. I implemented a quite ambitious byte-based compression scheme, something I had not thought about at all when creating HT1. Naturally, this was one of the most difficult steps in the whole project, and it took me and my trustworthy team of beta testers a long time to get all the bugs out. (Well, to be honest I wouldn't be surprised if there are still a few rough edges in there).
So, what's the future of HT2? Given that people will actually use it, I have some quite far-reaching plans for it. There's still room for improving the GUI and the keyhandler (as stated above), and I continue to make enhancements to the sound driver as well. Also, on the long run, I want to integrate the tracker more deeply with the TI operating system to free up more memory. The next version, HT 2.1, should hopefully be ready to ship in early 2016. After that however, things depend on how much time I will have available. I don't want to dedicate all my free time just to HT2, because I have many other exiting project ideas as well. Nevertheless, I look forward to continue extending and enhancing this tracker for many years to come.
SEPTEMBER 24th, 2015
New ZX Spectrum Beeper Engine: Tritone FX
Strangely enough, after finishing the 7d7e project, I was even more in the mood to create new 1-bit sound routines. So today I present you Tritone FX, a clone of Shiru's Tritone engine with some added features.
In recent years, there has been a tendency to use Tritone at very high speed levels in order to pull off advanced sound effects. Frankly I was never a very big fan of this, as I think it leads to an awfully muddy sound. So I've drawn up a concept that should render the need for this high speed trickery obsolete.
I remember discussing an FX-oriented scheme with Shiru back in 2011, but failed to convince him, and I wasn't able to implement something like that myself back in the day either. Well, now I can and so I did, hehe.
The new concept is based on an observation propagated by introspec. The idea here is that when implementing timing with an inner and an outer loop (decrementing the low and high bytes of a 16-bit counter seperately), the outer loop does not need to be timing-stable. With Tritone FX, I started to explore where the limits of this approach are, and as it turns out, they are rather generous. They are in fact generous enough to update a bunch of parameters by reading an FX table during the counter update, which is exactly what Tritone FX does. This allows you to create fast arpeggios, and update the duty settings on the fly. I also added the capability to generate noise instead of tones on one of the channels.
The downside is that this behaviour is too complex to simulate with an XM template, so as of now the routine remains without a user interface. I hope that one day it will be implemented in Beepola and/or 1tracker, but until then the only way to make music with it is to hard-code everything in machine language.
If you're curious enough, you can grab the sources from my github, or listen to the demo tune.
SEPTEMBER 20th, 2015
7d7e: Seven New ZX Spectrum Sound Routines in Seven Days
The past couple of weeks, I went on a coding spree, making a number of new 1-bit sound routines. Instead of just throwing the routines out on the net, I decided to release them within the scope of a little art project, publishing one engine per day over the course of one week. Hopefully this will help a bit to spread my vision of code as an artform in it's own right.
On the technical side, my goal with this project was to put into practise some of the techniques I had learned throughout the year, to advance my coding skills, and ultimately to bring some new and unheard sounds to the 1-bit world.
Most importantly, I explored the possibilities of wavetable synthesis in a 1-bit context, creating two engines with high quality wavetable playback. So far, these are the only multi-channel wavetable routines on ZX Spectrum beeper, aside from the old SampleTracker 1-bit routine which plays full PCM samples, but at the cost of a very low playback quality.
Furthermore, I pushed the limits of the pulse-interleaving PWM technique by creating two engines with six and eight channels respectively. I also improved on my own work with a new 4 channel routine that can synthesize pseudo-white noise along the tone playback. Last but not least I successfully broke the record for the smallest Spectrum beeper routine, creating a complete two channel routine in just 83 bytes - 16 bytes less than the previous record.
Even though the project garnered only limited attention (as was to be expected), I'm nevertheless quite happy with the outcome, and am thinking of repeating the experiment at some point.
For now, you can read up on the details in the release thread over at the 1-Bit Forum. Downloads can also be found in the code section of this website, and various demo tracks can be found on my soundcloud.