MaxMod2 beta

BlitzMax Forums/BlitzMax Programming/MaxMod2 beta

REDi(Posted 2008) [#1]
The beta download of MaxMod2 is now up on the google code page!

Audio output is currently handled by RtAudio, I've decided to drop the seperate audio drivers in favour of a single cross platform library, it uses DirectSound on Windows, ALSA on Linux and CoreAudio on Mac.

I've not been able to test the Mac side of things at all, so dont be suprised if somethings dont work ;)

Currently the following formats/libs are included (as seperate modules)...

Ogg (seekable)
Mod/Xm (seekable)
Mp3 (not seekable) *EDIT* Is now!
GME (track seekable)

Check the 'examples' folder for some test code.

SetChannelRate/Depth and Pan functions are not supported at this time, I may add them later if the RtAudio streams preform well on each platform.

*Crosses fingers* ;)


xlsior(Posted 2008) [#2]
Interesting... Is it at all possible to use OpenAL on Windows, or is it completely bound to DirectSound?

(Doesn't Vista have a delay using DirectSound on some computers?)


REDi(Posted 2008) [#3]
I've got an OpenAL stream module pretty much done, but I'm hoping it wont be needed, isn't it WMM that has the delay problems?

I'd prefer that the thing "just works" on all platforms rather than having to have lots of different stream modules, but hey whatever's needed.


impixi(Posted 2008) [#4]
Awesome module, thanks REDi...

I’ve been testing the examples using numerous music files and have noticed the following:

Test system: Windows XP, Onboard sound (SoundMax HD audio drivers)

All examples compile okay under BlitzMax 1.30. However,

LoadMusic.bmx

seems to play Ogg files much faster than it should (though the other examples play the same ogg files normally). And other formats play normally.

Also, I have encountered problems when compiling under the latest BlitzMax SVN version (non-threaded).

BlitzMax SVN (6-Nov-08) DEBUG compile only, (NON-DEBUG runs without error)

GME_Test.bmx
Building GME_Test
Compiling:GME_Test.bmx
flat assembler  version 1.67.26  (969915 kilobytes memory)
3 passes, 7441 bytes.
Linking:GME_Test.debug.exe
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0x32a): undefined reference to `gme_identify_file'
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0x3fb): undefined reference to `gme_track_info'
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0xbc): undefined reference to `gme_delete'
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0xd4): undefined reference to `gme_delete'
Build Error: Failed to link C:/temp/maxmod2_beta1/maxmod2.mod/examples/GME_Test.debug.exe
Process complete


BlitzMax SVN (6-Nov-08) DEBUG compile only, (NON-DEBUG runs without error)

MiniPlayer.bmx

Building MiniPlayer
Compiling:MiniPlayer.bmx
flat assembler  version 1.67.26  (970305 kilobytes memory)
4 passes, 21022 bytes.
Linking:MiniPlayer.debug.exe
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0x32a): undefined reference to `gme_identify_file'
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0x3fb): undefined reference to `gme_track_info'
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0xbc): undefined reference to `gme_delete'
C:/blitzmax/mod/maxmod2.mod/gme.mod/gme.debug.win32.x86.a(gme.cpp.debug.win32.x86.o):gme.cpp:(.text+0xd4): undefined reference to `gme_delete'
Build Error: Failed to link C:/temp/maxmod2_beta1/maxmod2.mod/examples/MiniPlayer.debug.exe
Process complete



Intel MacBook Pro OSX results to follow…


ziggy(Posted 2008) [#5]
@impixi: Be sure to disable quickbuild when you have updated max. This is reporting a link-time bug wich usually means a problem with .o files created with a different max compiler or mods version.


Brucey(Posted 2008) [#6]
And don't forget, if you use the GME module, you'll need to release your app/game as GPL (i.e. open-sourced) :-)


REDi(Posted 2008) [#7]
Hi impixi

seems to play Ogg files much faster than it should

It doesnt seem to even load oggs for me with the LoadMusic test :/ I'll have a look into that tonight. Thanks.


impixi(Posted 2008) [#8]
Intel Macbook Pro, OS 10.5.5 results:

BlitzMax 1.30

The LoadMusic.bmx and Stream2Mem.bmx examples compile and load music files (LoadMusic playback suffers from the same speed issues for Ogg files)

The other examples fail with errors like:



@ziggy:

Be sure to disable quickbuild when you have updated max. This is reporting a link-time bug wich usually means a problem with .o files created with a different max compiler or mods version.


Yep, I'll check this when I get back on my PC shortly...

EDIT: No, my quickbuild was definitely disabled (it usually is). I also tried recompiling all the modules without the -h option and still get the same errors as stated above.


REDi(Posted 2008) [#9]
hmm interesting, I have the following imports for rtaudio on mac...
?Mac
Import "-framework CoreAudio"
Import "-framework AudioToolbox"
?

Anybody know if there is anything else I need to link with for CoreAudio?

*EDIT*
Gotta go out now, I'll have a play with it latter tonight, but in the mean time if any mac bods fancy's having a go at fixing it, feel free ;)

Thanks again impixi!


Difference(Posted 2008) [#10]
Hi REDi

It looks very interesting. As you know I'm interested in the realtime sample manipulation potential of it.

The test below errors out in debugmode with : "Debugger Error:scope stack underflow"

I seem to have narrowed it down to "ChannelPlaying(Chn)". Rem that out in the main loop, and the error goes away.




Brucey(Posted 2008) [#11]
I would guess it's probably a threading issue, with ChannelPlaying() and FillBuffer() being in use at the same time.
The standard GC doesn't play well in those circumstances.


Muttley(Posted 2008) [#12]
Looks like the MP3 part is GPL code as well, so using that would require you to GPL whatever you use it in.

Streaming OGGs is good enough for my requirements though, so I'll give the ogg part a good thrash around.

Cheers for this REDi. :)


REDi(Posted 2008) [#13]
@Peter Scheutz, I should have deleted that example until the official release of the threaded version of BlitzMax really, but if you'd like to have a go with it you could download the SVN version, works well here.

@Muttley, Hopefully I'll eventually release versions that dynamically link to the library's so you wont need to go GPL, but for now this is a quick and easy way of getting it all tested and working (plus I already have a commercial license for libmad so for me this is the way I'll use it). I'm pretty much a noob at all this C++ stuff, and getting them all built for each platform will be a bit of a mission for me, but thats the plan (offers out to anyone who fancies a job ;) )

@Brucey/other Mac legends, any idea why its not linking to CoreAudio? any help greatly appreciated, I'm at a complete loss on this one atm.

@Linux guys, anyone able to test on non ubuntu distros?

Again, Thanks for all your help/testing everyone.


REDi(Posted 2008) [#14]
.


REDi(Posted 2008) [#15]
Okay I've put up beta 2, Hopefully fixes most of the above problems.


Brucey(Posted 2008) [#16]
Mac version is now working fine :-)


REDi(Posted 2008) [#17]
YAY! Thanks Brucey


Stu_ovine(Posted 2008) [#18]
Excellent work !

My vote is for "SetChannelRate" so i can replace my current MaxMod setup :)


REDi(Posted 2008) [#19]
Unfortunately RtAudio doesn't handle things like volume, pan and frequency it just pumps stuff to the soundcard, so I'll have to write a resampler for it, should be easy enough though, and the modplayer manages it for each sample playing so the performance hit should be pretty small compared to that.

Saying that, I'm thinking there might be problems on Mac/Linux when it comes to playing more than one stream at a time, so I may end up having to write a mixer for it and have multiple streams through one output.

excuse the rambling :)


ImaginaryHuman(Posted 2008) [#20]
I think any music/sound system used for games really needs the ability to:

a) Analyze/access to the audio output stream per-channel so you can display things based on the current sound

b) Get beat timing/position information, perhaps triggering a call-back or something, for mod files, so that you can synchronize graphics with sound


tonyg(Posted 2008) [#21]
I think any music/sound system used for games really needs the ability to:

a) Analyze/access to the audio output stream per-channel so you can display things based on the current sound

b) Get beat timing/position information, perhaps triggering a call-back or something, for mod files, so that you can synchronize graphics with sound


Surely thats either a gross over-generalisation or only true if those are required features/functions of the game.


ImaginaryHuman(Posted 2008) [#22]
Well of course but it'd sure be useful.


REDi(Posted 2008) [#23]
@ImaginaryHuman, its all on my to do list mate, as well as being able to chain audio through VST's and more, but it all takes time and I don't have a lot of that, but first things first the beta is mainly about making sure the output is stable and formats are working across all platforms, and cleaning up my usually shabby coding ;)


Grisu(Posted 2008) [#24]
Looks quite useful.

Can your mod stream internet radio stations and get the meta data / tag id that is send with (such as name and current title playing) it?


Difference(Posted 2008) [#25]
I'm using beta 2 download (svn seems gone for now?), but I get different crashes when trying to write to the stream. "scope stack underflow" and some "GC write to zero mem" or something (can't reproduce right now)...


Brucey(Posted 2008) [#26]
scoep stack underflow and some "GC write to zero mem"

Usually means two threads are calling BlitzMax code at the same time (using the standard GC), which isn't good.


REDi(Posted 2008) [#27]
@Grisu, Streaming internet radio shouldn't be to hard, I'll see if I can knock something up for you when I've got some time.
*EDIT* Second thoughts, this may take some time, can anyone recommend a good open source cross platform tcp library?

@Peter Scheutz
svn seems gone for now?

Sorry mate I didnt mean MaxMod2 SVN, but BlitzMax1.30 SVN.

http://www.blitzmax.com/Community/posts.php?topic=74439


Difference(Posted 2008) [#28]
Sorry mate I didnt mean MaxMod2 SVN, but BlitzMax1.30 SVN.

I am already on the lastest BlitzMax1.30 svn version. so I don't think that's the problem.


REDi(Posted 2008) [#29]
Oh I see, do you have threading enabled in the IDE?

*EDIT* ooo, I've just had the same problem but it took a long time to happen, I'll look into it.


Brucey(Posted 2008) [#30]
Oh I see, do you have threading enabled in the IDE?

If he did, he wouldn't have the problem :-)


REDi(Posted 2008) [#31]
That's what I thought, but I've just had it bomb out on me and I had it set to threaded, something dodgy going on somewhere. (I had no problem until I added a graphics screen)


REDi(Posted 2008) [#32]
It seems the RtAudio library is using _beginthreadex instead of CreateThread, maybe the new GC isnt picking up on it, every now and then it throws a "collecting from unknown thread" error.

I'll look into it more later, gotta go to work now :(


REDi(Posted 2008) [#33]
Beta test 3 is up on the google code page!

This revision adds MP3 seeking and hopefully fixes the GC problem with threaded callback streams, I haven't had a chance to check it on linux (and of course Mac because I dont have one), but it should be ok.

All feedback/bug reports appreciated, thanks.

*EDIT*

Quick poll, I'm not sure if I'm happy about the way callback streams work ATM, do you think it'd be better (and more standard) to just supply the CreateAudioCallbackStream function with a function pointer, object pointer and sample rate etc? ie like you do with threads.


Difference(Posted 2008) [#34]
I'm afraid it still crashes for me in debugmode, this example just by moving the mouse:



REDi(Posted 2008) [#35]
hmm, works fine here with your example.

Have you rebuilt the modules (bmk makemods -h) from the command line and checked "Threaded Build" in the build options of the svn IDE?

Apologies if you have, I'm just trying to cover all possibilities.

I've had your example running for about 10mins in debug mode, no problems so far.

*EDIT* BTW what OS/Platform are you on? (still going @20 mins)


impixi(Posted 2008) [#36]
(Beta 3) I'm noticing 'recoverable frame level errors' when playing back MP3s using the examples LoadMusic.bmx and MiniPlayer.bmx. Example:



Windows XP, BlitzMax SVN (13-Nov-08), threaded build.

Other formats playback fine.

Will try on OSX soon...

EDIT:

(Beta 3) Things are not so good in OS X. This is the first time I've used BlitzMax SVN threaded version (updated 13-Nov-08) on OSX for a while so it may be something at my end, but my own programs seem to compile and run okay.

StreamToMem.bmx compiles and runs without errors.

The other examples do not compile.

Custom.bmx, ModSeeking.bmx, GME_Test.bmx:
Identifier 'Graphics' not found.

MiniPlayer.bmx:
Unhandled Exception:Attempt to access field or method of Null object
line:
Local App:TApp = New Tapp

LoadMusic.bmx:
Identifier 'PollEvent' not found.

I've run out of time for today else I'd investigate further...


Difference(Posted 2008) [#37]
Have you rebuilt the modules (bmk makemods -h) from the command line and checked "Threaded Build" in the build options of the svn IDE?


I did not have "Threaded Build" enabled, because I did not know that I had to! :-)

With "Threaded Build" enabled it seems to work great.

Is it all of Maxmod2 that requires "Threaded Build" or only when writing to the stream myself ?

In anycase this means that if I want to use maxmod2 for my realtime sound, I'll have to use the new garbage system right?


REDi(Posted 2008) [#38]
@impixi

Are you getting that amount of recoverable frame level errors with every MP3? Its normal to get one or two as the stream seeks back to the beginning and recovers after calculating the pcm length, but that amount of errors seems odd especially as it didn't pick up any on the first pass.
Does it miss any audio from the first few frames?

As for the problems on OSX, I dont know what to suggest really, they don't seem to be related to the MaxMod2 modules and the demos don't use framework so all BRL functions should be available. :/

@Peter, My apologies for not making it more clear that threaded build is required, the next release will throw an error if threading isn't enabled.

Is it all of Maxmod2 that requires "Threaded Build" or only when writing to the stream myself ?

Threaded build is only needed if your using the callback streams.

In anycase this means that if I want to use maxmod2 for my realtime sound, I'll have to use the new garbage system right?

I'm afraid so, but I think its safe to say that if you want low latency real time sound, you'll need threading enabled with any sound lib (FMOD etc).
It is possible to do event driven sound streams (no threads), but the latency will go through the roof. (the first version of maxmod does it this way if you'd like to look into that approach)


DannyD(Posted 2008) [#39]
I moved the mod to the mod folder. Then did a rebuild all modules and get this:
......
Compiling:file.cpp
Compiling:threads.cpp
/Applications/BlitzMax/mod/maxmod2.mod/music.mod/code/threads.cpp:1:70: error: brl.mod/blitz.mod/bdwgc/libatomic_ops-1.2/src/atomic_ops.h: No such file or directory
Build Error: failed to compile /Applications/BlitzMax/mod/maxmod2.mod/music.mod/code/threads.cpp
Process complete

Any ideas? Mac Os X 10.5.5


Brucey(Posted 2008) [#40]
Any ideas?

You need the "threaded" BlitzMax, which is available via the SVN repository.


REDi(Posted 2008) [#41]
hmm, I suppose I should put an #ifndef around them imports, thanks for the heads up DannyD!
*EDIT* I spoke to soon :) looks like it will have to remain SVN only for now.


DannyD(Posted 2008) [#42]
Sorry If I'm going off topic here.
I did a svn checkout --username dannyd http://blitzbasic.com:81/svn/blitzmax/dev/macos_x86/ which worked fine.

It leaves me with a macos_x86 folder with a bin and lib subfolder. So I overwrote my old bcc file and recompiled, same error.


REDi(Posted 2008) [#43]
You'll need to SVN the whole lot mate...

svn checkout --username dannyd http://blitzbasic.com:81/svn/blitzmax/dev/

And make a working copy of blitzmax in the "main" directory.
You'll also need to build the IDE from the "src" folder.


Brucey(Posted 2008) [#44]
You'll also need the modules from SVN... the bit you have is just binaries.


impixi(Posted 2008) [#45]
Are you getting that amount of recoverable frame level errors with every MP3?

I downloaded a couple of random albums from Jamendo.com and all the songs in both albums throw that many errors. Yet I tried a single mp3 from a different source and only saw one error. In any case, they sound fine. Possibly not worth worrying about…

OSX:
I can’t figure out what’s going on. I’ve tried a couple of simple threaded programs and they compile and run okay. Only MaxMod2 seems to be causing problems at the moment.

@Brucey:
Have you tried Beta 3 on OSX yet? If so, do the examples run? What version of XCode are you compiling with?


REDi(Posted 2008) [#46]
I've just tried some of the MP3's from that site and get the same errors, probably just to do with the encoding, I don't think its much of a problem, libmad seems to play them okay.

eventually I'll remove them 'recoverable' error messages, but for now they may be useful at some point.


Brucey(Posted 2008) [#47]
@Brucey:
Have you tried Beta 3 on OSX yet? If so, do the examples run? What version of XCode are you compiling with?

Interesting. The Jamendo tracks do indeed seem to have issues with those recoverable frames. My other tracks might have one of those messages at most. Also, one Jamendo track started playing at half-speed !!

On the latest OSX and XCode here (That's the XCode with iPhone compilation support)

Also, not running the "threaded" code, just the LoadMusic example.


REDi(Posted 2008) [#48]
Brucey, did they run with beta 2?


Brucey(Posted 2008) [#49]
Track one plays at half speed :-p


Brucey(Posted 2008) [#50]
Brucey, did they run with beta 2?

They play fine... (apart from the one mentioned), just lots of "errors/warnings".


REDi(Posted 2008) [#51]
hmm, libmad is responsible for detecting sample rate etc, not much I can do about that... but I'll have a play ;)


REDi(Posted 2008) [#52]
Brucey, Do you get the same error messages as impixi? ie with Graphics etc


Brucey(Posted 2008) [#53]
Do you get the same error messages as impixi

Nope. But I'm guessing, since they don't use Framework, there's a module of his which needs rebuilding. (since it includes all BRL/Pub mods otherwise, so who knows what he's got in there ;-)


REDi(Posted 2008) [#54]
@Brucey, do you get any debug verbose about why streaming isn't working?

Sorry to be a pain mate ;)

@impixi, could you try a build of all modules, both threaded and non-threaded.


impixi(Posted 2008) [#55]
I've rebuilt everything numerous times using the -a -h switches (will try a non-threaded build shortly). And like I mentioned, other threaded programs are compiling fine without explicitly requiring frameworks or imports...

If I specifically add imports (eg BRL.GLMax2D) to the MaxMod2 examples then I can get them compiling, but encounter other problems (that I suspect are also related to not having imported other required modules). But like REDi says, these explicit imports should not be necessary...

But it's also true even I don't know what I've got in there. ;)


impixi(Posted 2008) [#56]
Okay, now I'm confused. I rebuilt everything NON-threaded. The examples worked (except Custom.bmx, (and MiniPlayer which I haven't tried yet because MaxGUI isn't currently installed)). Then I rebuilt everything in threaded mode, and now the examples compile okay.

This is Custom.bmx error:



This is on a MacBook Pro, btw, so it's only simple onboard sound, so it might not support some advanced audio features.

What I'm going to do is delete BlitzMax SVN entirely and reinstall it from scratch again, because I swear there's something fishy going on. But it will have to wait until later because I have to go out for a few hours.


REDi(Posted 2008) [#57]
The threaded module build is only required for the 'custom' demo, all the others can use the non-threaded modules.

Maybe worth trying a few different tracks, the song Brucey pointed out reports to be 16000 sample rate, and I think CoreAudio might well refuse to create an output in that format.

It looks like the tracks on that site have some dodgy frame headers.


REDi(Posted 2008) [#58]
It turned out them dodgy frame headers were actually ID3 tags :)

Should be fixed now, beta 4 is on the download page.


REDi(Posted 2008) [#59]
Also, not running the "threaded" code, just the LoadMusic example.

@Brucey, do you get any debug verbose about why streaming isn't working?

Sorry to be a pain mate ;)

Did I get the wrong end of the stick? I thought you meant the streaming examples don't work, or was it that you hadn't tried them?

(I'm having a brain fart day ;) )


impixi(Posted 2008) [#60]
I have reinstalled my OSX system from scratch and patched it to version 10.5.5. Installed the latest XCode version (includes iphone support).

Downloaded the latest SVN versions of BlitzMax and MaxGUI. Installed MaxMod2 Beta 4.


Seems like the modules must be built non-threaded as well as threaded before code compiles in threaded mode. Not sure if this is normal behavior or not.

I've not been able to get Custom.bmx to run (it terminates with the error mentioned in my previous post).

Also, MiniPlayer.bmx doesn't compile. It terminates with 'Unhandled Exception:Attempt to access field or method of Null object' on:

Local App:TApp = New TApp 


Other MaxGUI code compiles without problems (including the SVN MaxIDE source).

The other MaxMod2 examples seem to run okay.


REDi(Posted 2008) [#61]
Hi impixi

I've just noticed in "MiniPlayer.bmx", could you try changing the ?Mac to ?MacOS (DOH! stupid mistake)

and in "Custom.bmx", could you have a play around the sample format, maybe try something like...

	Method New()
		SampleRate = 44100							' set required samplerate
		Channels   = 1								' set the number of channels
		Bits       = 16							' set bits per channel
	EndMethod


Thanks for your efforts in sorting this out!


impixi(Posted 2008) [#62]
Yep, that fixed both problems.


REDi(Posted 2008) [#63]
phew! :)


popcade(Posted 2008) [#64]
Is it still under development?

Dunno is it stable for production yet, I tried beta4 and it worked actually very well.


REDi(Posted 2008) [#65]
Hi yoko!

Yeah, it's still in development mate but I've got hardly any free time ATM :(

The next beta release takes over all sample playing and streaming through a single audio output, I've just got to figure out a couple of garbage collection issues first.

New commands so far: (work with both samples and music)

CueMusic
PlayMusic
GetChannelLength
ChannelSeek
GetChannelPosition
GetChannelLoop
SetChannelLoop
SetChannelLoopPoints
GetChannelLevels
SetGlobalVolume


popcade(Posted 2008) [#66]
MaxMod is very cool, the new commands sounds sounds pretty useful.

Please keep the great work going.


REDi(Posted 2009) [#67]
Yet another maxmod2 test, for those who have the time and the stomach...
http://maxmod.googlecode.com/files/MiniPlayerEx.zip

This is mainly to test the new channel effect processing, the test app will apply a Sound Touch effect to the channel allowing for time stretching and pitch shifting.

Please also let me know if you find any problems with output quality or problems opening/playing certain audio formats etc.

Thanks in advance!

*EDIT* Test application is for Windows only

Simple example of how channel effects are added and used...
SuperStrict
Framework MaxMod2.RtAudio
Import MaxMod2.SoundTouch
Import MaxMod2.MP3

SetAudioDriver "MaxMod RtAudio"

Local Channel:TChannel = CueMusic(RequestFile("",MusicExtensions()))
Local SoundTouch:TSoundTouch = New TSoundTouch
AddChannelEffect Channel,SoundTouch
SoundTouch.SetTempo 1.25
ResumeChannel Channel

While ChannelPlaying(Channel)
	Delay 10
Wend



GfK(Posted 2009) [#68]
Tested in Vista - works [almost] perfectly (See below).

Love the Tempo/Pitch stuff. Much more useful to be able to adjust the playback speed and pitch independently.

The loop option doesn't work in your test app, though. Don't know if its a problem with the module or you just didn't implement it yet so I thought it was worth mentioning.

I'd love to see this implemented as an official music module for Blitzmax.


REDi(Posted 2009) [#69]
Cool, Thanks GfK!

I hadn't noticed the looping problem, seems to only happen with some file formats, I'll look into it, Thanks.


GfK(Posted 2009) [#70]
I hadn't noticed the looping problem, seems to only happen with some file formats, I'll look into it, Thanks.
Oh... I was using an OGG file. Might have been variable bitrate, too, if it matters?


GfK(Posted 2009) [#71]
I'm surprised there hasn't been more replies about this. Do people not realise how important streaming audio is? Do they just not realise what MaxMod is?

Anyhoo... any ETA on a final release yet?


REDi(Posted 2009) [#72]
I'm surprised there hasn't been more replies about this.

I'll just take the lack of moans as a good sign ;)

Anyhoo... any ETA on a final release yet?

Probably wont release anything until the threaded version of BlitzMax is officially out I'm afraid.


GfK(Posted 2009) [#73]
Probably wont release anything until the threaded version of BlitzMax is officially out I'm afraid.

No probs, but I hope that's soon too.