anteater - new beeper engine

utzutz
edited January 2015 in Brand new software
Just letting y'all know about a little project I did yesterday, called "Write a beeper engine in 1 day".

Download (includes XM converter)
Sound example (recorded from 48K with minimal EQ applied)

Features: nothing special, just
- 1 channel square wave, 1 channel PWM wave (like Phaser1 with mult 0, detune 1)
- 3 interrupting click drums
- manual detune
- per row tempo setting
- fairly compact size (266 bytes)

You will need Perl to use the XM converter.
For compiling the tap file, you need pasmo (or adapt the sources to an assembler of your choice, of course).

The name "anteater" is a reference to Ant Attack, which was probably the first game to use pulse interleaving beeper sound on the Speccy.
Post edited by utz on
«1

Comments

  • edited August 2014
    Good stuff.
    ZX81/ZX Spectrum/Amiga/Atari music: http://yerzmyey.i-demo.pl/
  • utzutz
    edited August 2014
    While we're at it, I've also updated the ntropic (2x square wave + noise channel) engine, hopefully fixing all the major issues with it.

    Bugfixes:
    - tuning/timing is now stable
    - IO contention workaround
    - pattern list end marker now works safely on all RAM locations

    Improvements:
    - per row tempo setting
    - now includes an XM converter (needs Perl)

    Download
    Sound example (recorded from 48K)
  • edited August 2014
    These two beeper engines are great additions to a slowly growing arsenal of ZX music tools!!... Thanks so much for creating them!!!... I especially appreciate any tools that help with conversion, like your XM converter tools!....

    Right now, Im using Windows XP (I know, I know...) with slow dialup looking for ways to download all that I might need to turn those Perl XM converter scripts into direct Windows .EXE executable files... ...If anyone out there with Perl installed on their Windows system is able to compile (or wrap for portability) those two Perl scripts and post them, Id be deeply greatful!!!!! ... :)

    Either way,

    Thank you sir for a fine contribution!!!
  • utzutz
    edited August 2014
    Thanks kgmcneil for the kind words! It means a lot to me.

    Regarding standalone executables for the converters - I've looked into it before, but ran into 2 problems: A, I can't compile Windows .exes on my Linux system (if anybody knows how to do it, let me know please). B, the executables would end up being around 3-4 MB each, which imo isn't really worth it, especially considering I'll probably write more engines/converters in the future.
  • edited August 2014
    Nice work, utz. Both interesting engines in their own right. I particularly like NTropic as there are not many (in fact, are there any??) other beeper engines that can interlace percussion like that without interrupting the tone channels. It has a unique sound.

    Both are near the top of the list for implementation in a future Beepola at some undisclosed point in the future, should I ever get the motivation to crank out another version! :)
  • edited August 2014
    Amazing sound and music.
  • edited August 2014
    Iv wrapped a tiny version of Perl around your converters and added them alongside Shiru's XM converters, then put the whole lot together using some .BAT files for DragNdrop use...

    https://dl.dropboxusercontent.com/u/33485444/Xm2Tap.zip

    Basically, if your a WindowsXP user, you can drag and drop .XM and .MOD music files on to the appropriate .BAT file and it will convert that music into several different Beeper forms (2, 3, 4, 6 & 8 channel beeper tunes... Can you can guess the names of the various beeper engines used? Ha!)...

    Its packaged in a way that is convinient for me, so I apologise if its not userfriendly enough for others, but thought I would put it here for anyone else who often finds the need to convert music for quick projects...

    :lol:

    Thanks again for creating this!!!!

    (Of course credit also goes to those behind Pasmo, SJAsm, the mod2XM converter and TinyPerl and other creative sorts who are responsible for the tools enclosed therein - all I did was put them together badly!)...
  • utzutz
    edited August 2014
    ccowley, thanks! Would be very happy to see these engines in Beepola eventually.

    MatGubbins, thanks to you, too.

    kgmcneil: Awesome! How did you get the .exes so small? And do I have your permission to package them with the engine downloads?
  • edited August 2014
    utz wrote: »
    ccowley, thanks! Would be very happy to see these engines in Beepola eventually.
    Awesome thanks!

    I might just have a crack at another Beepola release in a few weeks time, when I've finished my current little project then.
  • edited August 2014
    I used TinyPerl to wrap the perl scripts; it uses UPX compression:

    http://tinyperl.sourceforge.net/downloads.htm

    Wrapping a script is as easy as:

    tinyperl -bin script.pl script.exe

    ...You'll need to include lib.zip (262k), perl58.dll(355k) & tinyperl.exe(93k) in the same folder as your executable file to run it, but that's still a small price to pay for such a small distribution...

    And yes, take anything you like - all I did was compile it with the above and package it....

    Thanks again for your fine work there! :)

    PS: Updated it slightly to make it a little less bug free when dragging music files across from other drives... {http://dl.dropboxusercontent.com/u/33485444/Xm2Tap.zip}
  • edited August 2014
    Look forward to fiddling with this, although I might just wait for Chris to update Beepola ;)
    The comp.sys.sinclair crap games competition 2015
    "Let's not be childish. Let's play Spectrum games."
  • edited August 2014
    Iv probably asked for it already, but if Chris could add the ability to convert .XM files and maybe a few other conversion/import options into his suite, that would greatly improve its usefulness for us talentless musical types... ;)
  • utzutz
    edited August 2014
    Hi y'all,

    I've done some minor improvements to the XM converters, so it's no longer necessary to manually optimize the XMs before converting. Download addresses are the same as before.
  • edited August 2014
    kgmcneil wrote: »
    Iv probably asked for it already, but if Chris could add the ability to convert .XM files and maybe a few other conversion/import options into his suite, that would greatly improve its usefulness for us talentless musical types... ;)
    Yeah, XM import would make sense I s'pose. I'll have a look into it next time around.

    I've pretty much given up on the idea of rewriting/refactoring Beepola to tidy up all of the messy stuff that has "evolved" over time, and clean up the *.bbsong file format, as it's just too dull a prospect and seems too much like real work. So I'm just gonna keep hacking away at the existing codebase, haphazardly bolting on new things until it all collapses in a big heap :)
  • edited August 2014
    Well, Beepola works great for me :) so any improvement is welcome. But it's nice as it is, no need to reinvent the wheel.

    I only miss some selection/copy/paste tools and transpose / replace for individual channels.

    It would be nice if some sort of dumb MOD import was possible.
    Just get the note sequence and the patterns would speed things up for me.
  • edited August 2014
    Xm2Tap collection likewise updated then in light of the recent minor XM converter adjustments... New Perl scripts recompiled... Same DropBox download address at: http://dl.dropboxusercontent.com/u/33485444/Xm2Tap.zip

    Thanks again for it!..

    And Im delighted to hear that Beepola might get a few more additions before it implodes!!!!... :)
  • edited August 2014
    utz wrote: »
    Just letting y'all know about a little project I did yesterday, called "Write a beeper engine in 1 day".

    Thanks for sharing! Both engines are really neat and compact and they sound great. I just wanted to mention a couple of things: In the ntropic engine, when checking for a keypress, bit 2 of A is always set before the in a,(#fe) is done (it's either #04 or #e5), so the row Q-T is never checked for a keypress. Also, because you're using PUSH and POP a fair bit, the sound is a bit dirty because the stack is in contended memory. CLEARing to a value in the upper 32K makes things sound much better and in tune.

    Cheers!
  • utzutz
    edited August 2014
    Whoops! Thank you very much for pointing out these issues. Somehow it never occured to me that the stack would be in slow mem. I'll upload a fixed version with internal stack space soon.
  • utzutz
    edited August 2014
    Updated the ntropic engine. Download is at the usual address. The converter, xm template and readme have also been updated (sorry kgmcneil, I hope this is the last update for a while).
  • edited August 2014
    THANKS!!!... Don't be sorry!!!.. Its a delight to see these beeper engines getting the update and development love that they deserve!.. ..always a pleasure to see ZX music tools being worked on!!!...

    Xm2Tap scripts updated: Download from the same place:

    https://dl.dropboxusercontent.com/u/33485444/Xm2Tap.zip

    ...Now its my turn to apologise, Iv added some bloat, and broke the Beeper only rule by adding a YM converter...

    ...to be more precise, Iv resurrected an old old (1998 ) XM to YM converter found laying around the rubble of an Atari forum... Its a wonderful XM2YM converter without a website, without a source script and without a system now (its pre-XP, using DOS, hence the extra bloat is the addition of the DosBox application needed to run it)... Its capable of some very good conversions, but has to be scaled down to YM3b format to produce anything useful for the humble ZX (Iv bolted a YM2MYM to Tap script in there from better programmers than I, too)...

    Basically, as well as producing the usual beeper engines, it will also now output a tap using this YM engine too...

    As usual, this assemblage was written with only myself in mind, so I don't apologise if it doesn't work on anyone elses XP system... :grin:

    ...Now thats probably enough time wasted on that, I really should be doing some more nightshift paperwork... (Or perhaps make a start on Climacus level data!!!! ) ;)
    :lol:

    PS: If anyone knows of a minimal or stripped down version of DosBox that I can use to wrap around this old old dos converter tool, Id love to hear of it!!!!??
  • utzutz
    edited September 2014
    Thanks for your understanding, kgmcneil. Alas, you should've waited a day longer 'cause I got something in store for ya: :razz:

    rawp (aka reasonable accurate waveform player)

    Features:
    - 2 tone channels + interrupting hihat
    - 16 different waveforms + sampled kick drum
    - pitch slide fx (kind of...)
    - per row tempo setting
    - manual detune
    - loop point support

    download (includes XM converter)
    sound example

    In other news, unfortunately there were still some bugs in the anteater and ntropic converters. So, these bundles have been updated again.
  • edited September 2014
    This is so pro advanced awesome stuff! I really love it!

    BTW. Went up to your page to see if there is something more - just more of pure awesomeness!
  • edited September 2014
    Does sound interesting. Finally the drums are receiving some attention. All engines are laking in that aspect.
    For example, you can't play a crash cymbal along with the kick.... even if the engine has suitable sounds for that. But you need that to play drums!
  • edited September 2014
    Been trying to compile both your XM2ant & XM2NTropic updates but have say that Iv hit upon problems...

    >> xm2ant spits out problems on line 124, 135, 136... etc... Iv found the basis of those problems - namely a missing comma... If you got to line 124, you'll see the line read as follows:

    my ($rows, $cpval, $temp, $temp2 $mx, $jx, $nx);

    Notice that there should be a comma after "$temp2" above... If you insert the comma, then it compiles and works fine...

    >> xm2ntropic spits out errors on line 201,202,203 & 204.. All these errors pertain to Global symbol "$temp2"... Lines 201-204 read as follows:

    sysread(INFILE, $temp2, 1) == 1 or die $!;
    $temp2 = ord($temp2);
    if (($cpval&16) == 16 && $temp2 <= 0x20) {
    $speed[$rows] = $temp2 * 2; #setting speed if bit 4 is set

    ...basically, it doesn't like $temp2... Now Im no programmer, but if I do a simple replace all, with notepad and replace all "$temp2" with "$temp", then it compiles fine... Im guessing that probably breaks something, but for now, it seems to work...

    >> Concerning xm2rawp, I have to say, Im well pleased with that... I particularly like its ability to play samples, but I haven't put in the time to fully understand it yet.... Needless to say, no problems encountered with that...

    Concerning the xm2tap script tools, Iv updated them, but Im not able to upload them due to dropbox treating me like a leper lately!!!!... Ill figure it out in the next few days, but till then, the tool remains unchanged at the above address... :(
  • edited September 2014
    utz wrote: »

    Wow, that's fantastic!

    Just one thing, the download link on the soundcloud page is broken (you've put "rwap" instead of "rawp") ;)
    The comp.sys.sinclair crap games competition 2015
    "Let's not be childish. Let's play Spectrum games."
  • edited September 2014
    leespoons wrote: »
    (you've put "rwap" instead of "rawp") ;)

    Hahaha, a typical 'ZX person' mistake. ;)
    ZX81/ZX Spectrum/Amiga/Atari music: http://yerzmyey.i-demo.pl/
  • utzutz
    edited September 2014
    @kgmcneil: Ahhrghh! Am I really getting that old already? Thanks for pointing this out, fixed now. This whole temp2 business was introduced to fix another error - compiler would break if you'd use #0e as speed value. Seems I didn't pay attention while copying it to xm2ant/ntropic.

    @leespoons: Thanks for letting me know!

    @Yerz: Haha true. You don't want to know how many times I've mis-typed that.
  • edited September 2014
    gmblfrzz is bloody amazing!, it's a Gameboy
  • edited September 2014
    XM2TAP update now uploaded with latest bug edits from NTropic and Anteater:

    https://dl.dropboxusercontent.com/u/33485444/Xm2Tap.zip

    Also, while Im here... [Thread hijack], Ill also mention an update to ModPlug2VT, a bridging tool between Vortex Tracker and OpenModPlug... The update to that is minor - basically its been adjusted to avoid breaking compatibility with newer versions of OpenMod Tracker (it also retains compatibility with the older versions however, so will work with both old and new)...

    https://dl.dropboxusercontent.com/u/33485444/ModPlug2VT.zip

    Again, I apologise for the size of these files... Im not very efficient... and mixing up $temp with $temp2 is exactly the sort of mistake I would make!!!!

    :lol:
  • edited January 2015
    The ntropic engine in action, on BattleOfTheBits:

    - http://battleofthebits.org/arena/Entry/La+moisson+d%27hiver/16415/ (sorry for the self-promotion ;) )
Sign In or Register to comment.