Audio Mixing and Manipulation Project Logo

News about the most significant happenings are posted here.

Slowly, But Surely... :: 3rd May 2005
After some setbacks that stopped the show for a few months, mostly surrrounding me having RSI (which is now much better - turns out it was mostly an ergonomics thing), AMaMP core development is back on track. The road to 0.3.3 will be a slow one, but work is underway; we now have channel mapping and channel volume support in place, global message by IPC support, and as a bonus crummy 24-bit PCM wave support that you really wouldn't want to use for anything at the moment. A few bug fixes have also been committed. Finally, if you want to see a cool web app using AMaMP in the real world, check this out. Thanks to John Napiorkowski for sharing what he was using AMaMP for and for a number of helpful bug reports.

Core 0.3.2 Released :: 5th January 2005
The second development release as the AMaMP core moves towards the 0.4 release is now available. This release is certainly worth having over 0.3.1 if you use anything other than Windows or Linux; a lot of cross-platform build issues have been resolved. New features include noise gate and volume shaping effects, various new IPC instructions and a much more useful test harness and test suite. A lot of bugs have been fixed too.

Yes, This Thing Is Still Happening! :: 20th December 2004
Sorry for being so slack on posting news of late. AMaMP Core 0.3.2 is on the way in 2 or 3 weeks time, and promises to be better than 0.3.1, which by my own admission was a mess when it came to any non-Win32, non-Linux/x86 platform, and still wasn't great on those. Quite a few things have been done so far for 0.3.2: a lot of build problems have been squashed, proper endian conversion has been put in place, we have a test script that's worth running, some new IPC instructions are handled and some longer standing bugs and issues are resolved. And for the folks who "bleh, internals" all that lot and want things they can play with, 0.3.2 gives you noise gating and volume shaping. Yes, they're implemented. Yes, they're tested and they work. Yes, you should be excited. Well, maybe. :-)

Core 0.3.1 Released :: 30th October 2004
Version 0.3.1 of the AMaMP core has been released, marking the shortest time between any two core releases and also the first minor release. This release doesn't offer a massive new range of features, but has been made in recognition of the new modular I/O system. That said, soundcard recording is now available on Win32, soundcard playback and recording is supported on cygwin, the add input and add output IPC message handlers have been implemented and the core can now be started in a paused state by not supplying an instruction file. Have at it! :-)

More Stuff Done :: 17th October 2004
After a week where I just didn't feel like coding much, I've dug in to get the next batch of things sorted out. You can now start the core without an instruction file (where it is automatically paused at position 0), issue it instructions to add inputs, outputs and placements via IPC and resume it. This is a pretty big (and quite important) step forward and opens a lot of doors. I've also fixed some bugs and put the hooks in place for the file module lookup by file type and content (the implementation won't be a 0.3.1 thing, though).

Win32 Recording Support :: 8th October 2004
You can now record sound (e.g. using the soundcard) on Win32, and presumably also Cygwin. Enjoy.

New I/O System In :: 7th October 2004
The new I/O system has been integrated into the core, and all I/O functionality is now working through it. All the functionality of the core that was there before is there now, and a whole lot more to boot. I've also got soundcard output working under Cygwin. I'm still planning for a 0.3.1 release around the end of October.

Progress On New I/O Module System :: 20th September 2004
Implementation of the new 0.4 features has started, and the move to the new modular I/O system is well underway. The new I/O module build tools are almost complete and they are integrated into the build process. Modifications have also been done to allow some effects and I/O modules to be compiled into the core, others not, and then both to be usable. The plan is to make a 0.3.1 release, which will basically consist of what we had in AMaMP 0.3, but with the new I/O system in the place of the old one. I'm aiming to have 0.3.1 released by the end of October.

0.4 Work Underway :: 8th September 2004
Work on 0.4 is in progress. The core page has the plans for what will be in the final 0.4 release. The working syntax for instruction files has been updated too, and possibly most significantly the io2c specification has been essentially completed. See the documentation page for access to these documents.

Advanced VB Language Binding :: 8th September 2004
It didn't get mentioned in the 0.3 release notice posted here a few days back (though did appear in the change long) that a new advanced VB Language Binding made it into the release. Documentation for it has not yet been completed, but there is an example. A big thanks to KDL for working on this - maybe now one of us will find time to tie it into the current VB front end, or even get a new one underway.

Core 0.3 Released! :: 3rd September 2004
After several delays here and there, and just one day short of 5 months since release 0.2, the third release of the AMaMP core is with us! Compiling on the same range of platforms as 0.2 did, AMaMP Core 0.3 adds a powerful cross-platform plug-in style effects system along with build tools to streamline effect development. Other new features include (backward-compatible) syntactical additions and tweaks to make the core easier to target, support for a wider range of IPC messages (including pause, set position and placement addition, modification and removal) and better error reporting by the parser. A number of other smaller fixes and tweaks have also been made too. Enjoy!

Core 0.3 Feature Freeze :: 21st August 2004
Aside from getting the new VB language binding in, 0.3 is in feature freeze. There is one bug left to fix that I'm aware of (in the Flange effect), but everything that was slated for the 0.3 release is done. In other news, the plans for 0.4 are being discussed on the list, including a couple of RFCs being floated around.

Core Approaches 0.3 :: 17th August 2004
I didn't manage my mid-month code freeze, so the 20th won't be the release date for 0.3 any more. That said, it's very near completion. All of the tricky IPC work is done - only a few simple things remain. There are a few small things to do in the flange and delay effects, plus a missing macro to implement in fx2c. Mike Beck, aka KDL, also announced today that the new VB language binding is ready, so this will also feature in the 0.3 release. This is going to be our best and most useful release yet!

GTK Front End :: 10th August 2004
I have some exciting news - a GTK front end is underway! I'd like to welcome Bob Firth to the AMaMP team - thanks for joining us, Bob. :-) This news page will keep you posted with how things progress in this new front end. The core has also moved a little further forward as I start to knock off the IPC tasks.

Progress :: 7th August 2004
I took a two week holiday somewhere between the last post and now, so things have been a little slow. Anyway, effects are just about there - including building into the core and parameter checking. Just the odd missing macro from fx2c to get in place and we're there. At least, until we find something that's broken. I've also enhanced the parser/tokenizer so they spit out line numbers with errors and accept the keywords TimeOffset, StartTime and EndTime so we can enter times instead of samples when hand writing AMaMP instruction files. These will hopefully make life much easier for people working with the core.
So when will 0.3 be out? Well, there is a good bit of IPC stuff left to do, a bug to fix in the flange effect. Depending on how much time I get, 0.3 should appear maybe around the 20th, if I can get a feature freeze for the middle of the month.

Documentation :: 4th July 2004
I've reorganised the documentation section a little and written more documentation, including a nice overview of the core with instruction file examples and much of the documentation for the effects system.

Effects :: 4th July 2004
We now have a working effects system, using loadable modules, on both Windows and Linux (and with any luck, cygwin too). The vast majority of effect file macros are implemented in fx2c, and the build system has been updated. There's still some work to do in terms of getting effects building into the core and in terms of doing the parameter checking, but then the effects system is almost there. A delay effect has been implemented to test things out and it works well. Finally, KDL's work on the VB binding edges closer to completion.

Update On 0.3 :: 15th May 2004
Despite a mass of work at university and the looming exams, AMaMP core 0.3 very slowly ambles on. The internals tidy-up was completed. Effects implementation is underway, and while there's little to play with yet some of the underlying parts are in. The biggest job left until we have something ready to test and debug is fx2c, the effects file "compiler". Last but not least, KDL is re-writing the VB language binding. When he's done, it'll be much improved over my humble efforts. Thanks, KDL!

Core 0.3 Is Underway :: 10th April 2004
While there are no exciting new features to play with yet, the various structures used by the core have been laid out a lot better. The big improvements were to do the the I/O system, which now has a much neater interface. The work to stash certain data in the job structure has been completed also, and work has been started on a dynamic library loading abstraction layer. I also made a new document available detailing what's in the core source tree. Enjoy. - Jonathan

AMaMP Core 0.2 Released :: 29th March 2004
Today the second release of the AMaMP core was made. More details are in the release notes, though we have language bindings for Perl, C and VB as well as all the features previously plotted for 0.2. Head over to the download page at SourceForge.

VB Language Binding :: 14th March 2004
Today I've checked in a VB language binding and an example program. I've also got the C binding and test program to compile under Linux. Unfortunately, I've run into a problem centering around the popen() function not supporting bi-directional pipe I/O, so I'll need to re-write that to do things differently.

C Language Binding And 0.2 :: 11th March 2004
Checked into CVS a C language binding for AMaMP. It's been quite a big chunk of work, and I've yet to test the POSIX bits, but under Win32 it works just great. There's a test program showing the binding in action and how easily you can run the core and exchange messages with it in C. It's usable for C++ too, I'd expect. Also did some tiny fixes in the core. The 0.2 is coming soon and will feature:
- WAV mixing on at least Win32, cygwin, Linux.
- Soundcard output on Win32 and Linux.
- IPC using pipes and support for a few basic message types
- Much lower memory usage than 0.1
- Speed improvements over 0.1
- Language bindings for C, VB and Perl
A release containing the VB front end and core binaries with a nice installer will follow the 0.2 core release. Core development will move onto the work towards 0.3, starting with an I/O and internals tidy-up and effects support. - Jonathan

Linux Soundcard Output, Test Harness :: 11th February 2004
It's been almost a month, and university has kept me as busy as I feared. However, we now have soundcard output on Linux, albeit with /dev/dsp instead of ALSA. I haven't been able to lay my hands on anywhere to test ALSA just yet, but I'm happy to settle with /dev/dsp for release 0.2. I also recently checked in a test harness and an initial test. Configure works pretty well on Linux and Win32/MSVC++, though there appears to be issues elsewhere. Time for a play on Source Forge's compile farm. :-)

Multi-Channel Guts In :: 12th January 2004
AMaMP is now ready (under the hood, if not in terms of what is exposed) to provide support for mixing a potentially unlimited number of channels. This is important in terms of tying down the way data will be presented to effects modules and, later, external I/O modules. I also compiled AMaMP on Linux and gave it a quick test (just with wave files). It compiled cleanly and executed successfully - the next step is getting ALSA support it. That's next on my hit list, though being back at uni means I can't be certain when time will appear for me to do it.

Core Progress :: 10th January 2004
Much progress has been made on the core - IPC has been cleaned up and many bugs in it have been fixed since it got its last mention here and as much as has been planned for 0.2 has been done. In addition, work is well underway to enable support for an arbitary number of channels. Core 0.2 for the end of the month is looking possible.

Site Updates :: 1st January 2004
I've updated the documentation section and the core page. In doing so I've laid down a lot of details about future plans and updated various specifications, both current and working. There are some more things to add to the documentation section when I get round to writing them.
Mike (aka KDL) has reported that work on the new Win32 front end is going well. He is re-implementing the drag-and-drop "arrangement editor" to both bring it up to speed with current core capabilities and to allow new ones to be put in place more easily.

Core & VB Frontend IPC In Place :: 27th December 2003
At long last the IPC mechanisms are in and basically functional for both the core and the VB front end. The main problem has been doing non-blocking reads on stdin - turns out there isn't a standard way to do it, so I now have a custom fgets implementation in the core which is conditionally compiled depending on the platform. The VB frotnend also has code in to send messages, in a nice IPC module that eventually can be tidied up and handed to developers so they can use AMaMP. It allows you to play and stop (using stop results in sending the exit message). Latest I'm aware it works under NT based Windows OSes, and there is an issue with 9x based ones. Should also work on POSIX OSes, like Linux, UNIX, but that's untested. Summary: we've still some way to go, but IPC is coming together. - Jonathan

IPC :: 18th December 2003
Started work on getting IPC support into the core. Checked into CVS the first bits of work in the incoming message parser, and re-did the errors and warnings stuff so they are sent as valid messages. Made a post on the mailing list about this stuff, and also talked about message dispatch in a little detail. There are also some minor changes on the IPC document itself. - Jonathan

IPC Specification :: 16th December 2003
Posted my first version of the specification for how external programs will communicate with AMaMP. - Jonathan

Build System, ALSA :: 15th December 2003
Checked in my first attempt at a build system (, which generates config.h and a Makefile depending on the platform) and the .c and .h files that I'll fill out for putting support for ALSA in. Did a few updates to various documents on the site, including what I think is a fairly final 0.2 to-do list for the core. No promises. See mailing list archive for Win32 frontend development discussions and other cutting edge thinking, including my thoughts on effects. Or better, subscribe and join the fun. - Jonathan

Win32 Streaming Output Completed :: 5th December 2003
Finally finished the bit I've been wanting to get done for ages. It seems to work well; so long as you're using a reasonable buffer size the sound won't skip or anything like that. It won't start playing until the first couple of buffers are done. The buffer size I've kept in there from the start turned out to be fine, so just compile with the default and give it a spin. It's all in CVS folks, enjoy. - Jonathan

Beginnings Of Streaming Output In :: 4th December 2003
After an extremely busy month at Cambridge, the end of term has arrived and I've found time to pull my tiny fragments of work over the last month together and checked the changes into CVS. The parser now understands StreamOutput chunks, and I have created a couple of template I/O drivers for Win32 Wave API I/O and DirectSound I/O. There's some untested code for opening and closing the Win32 Wave device. There's a good chance this will be implemented before the DirectSound - in fact 0.2 may be Win32 Wave API only. I think ALSA should have priority over DirectSound; support for streaming I/O on both Linux and Win32 is better than 2 ways of doing it on Win32. :-) - Jonathan

I/O Layer Changes & config.h :: 1st November 2003
Now 0.1 is well out of the way, the grafting on 0.2 can commence. Today I made a big start on that by sorting out the first two items on the list - adding a config.h file and moving to a function pointer model for the I/O layer. It's now much more scalable, and adding DirectSound support is probably going to be the next step to take. Don't expect that to be done in an evening, though. - Jonathan

AMaMP 0.1 Released! :: 29th October 2003
A couple of days ahead of schedule, the first release of AMaMP has been made. The files are available here - the source is available in ZIP and TAR/GZIP format, and there is also a binary release for Win32 complete with installer. Enjoy, and thanks to KDL for his work on the VB front end to help make this happen. - Jonathan

Pan Support And Feature Freeze :: 25th October 2003
Today I added the final feature slated to go in to 0.1 and announced a feature freeze. I set a provisional release date of Friday 31st.

Custom Output Chains :: 23rd October 2003
Implemented, tested and checked in a patch that implements custom output chains. Also fixed stuff relating to 8-Bit I/O and tested on-the-fly channel, bit-depth and sample rate conversion on output. - Jonathan

Some Of 0.1 Task List Complete :: 18th October 2003
Checked in patches by myself (Jonathan) that sorts out the previous poor implementation of errors and corrects the vast majority of the buffer overflow issues in the Parser (hopefully, all of them). I moved a couple of #define's in the parser to the structures header file, which means they won't be forgotten when they are moved to a config.h file after the 0.1 release, and introduced a #define for the maximum identifier length. Also "accidentally" added support for StartSample and EndSample to the parser, which was supposed to be a 0.2 feature. That leaves two major features to go in before the 0.1 release - pan support (fairly simple) and custom output chains (slightly more difficult, but still not bad - they are already supported by the engine, so the parser just needs patching). After that, it's test and release. :-)

Crucial, But Small Core Bugfixes & VB Frontend News:: 14th October 2003
Today I tracked down a few more bugs in the core that affected mixing down in certain cases. They turned out to be in the engine, and not the read/write routines where the problem showed up. I've also written some VB code that outputs an AMaMP core input file (it was very quick and easy to do) and so long as amamp.exe is in the same folder as the VB app (or in the system path) it should do what is required. It's not properly tested yet - I can only confirm that it generates a valid output file. I tested by manually feeding that to AMaMP. I also implemented the Volume keyword in the Placement chunk (only a couple more lines in the parser). Finally, a few bits of the site have been updated.

The First Successful Output :: 13th October 2003
At last, after hours of hacking at the AMaMP source while I should probably be doing other things (e.g. sleeping), I've got it to deliver output! The good news is that while I've only given it a very light testing, it appears that on my test system it could mix at least 30 simultaneous steams of CD quality audio in real time. That's providing I haven't done anything stupid in the implementation that results in certain parts of the system having exponential order (I can't think of any areas where that might happen). This far outstrips the performance of the VB engine, and my next job will be getting the VB front end to emit an AMaMP input file. But that's for another time. CVS checkout and have fun. :-)

IO Layer & Engine Nearly There! :: 12th October 2003
Finished and fixed up I/O stuff, which is now working apart from a bug in the output writing function which causes a segfault (thus calls to it are currently commented out) and the writing of the wave header in the output close function. Also lots of work on the engine itself, meaning that once the I/O layer is fixed up we should be close to having the first generated output. Wow!

Latest Updates In CVS :: 11th October 2003
I've just checked in my latest work, which adds amamp_io.c and amamp_io.h. I decided to make the I/O stuff nice and abstract from the start, so the mixdown engine isn't bloated with it. The main mixdown loop has a break statement in to it exits after the first iteration; that's a temporary measure to allow testing to be done while other things get worked on that the mixdown loop is dependent on.

New Site And CVS Set Up :: 9th October 2003
I've created and uploaded this site, and put the current core and VB front end GUI source into CVS. Details at the SourceForge Project Page. Any previous news is here for historical interest.

Core Development Started :: Early October 2003
I got the O'Reilly Practical C Programming book, and went from C newbie to writing a tokenizer and parser for the AMaMP core. In fact, at the time this site was done and this was written, the very preliminary, but working version of the core looked to be at least 50% complete.

AMaMP Goes GNU :: Summer 2003
I decided to publish AMaMP under the GNU license, and continue its development. A page was set up on my personal site, with a plan to move to SourceForge (as you can see, it happened). The plan for the C core was also announced.

AMaMP Is Born :: Late 2002 - Summer 2003
AMaMP started out as the A Level computing project of Jonathan Worthington (see developers page). It was to be written entirely in VB ('cus teacher said so). As it turns out, it got me a very, very good mark. Good enough that I barely needed to do the final exam to pass the course with a Grade A.