Post by DrPetter on Feb 1, 2010 2:05:51 GMT 1

It's way overdue. Early porting efforts took place in 2007, and I should arguably have kept the source open since then. I like being able to work freely on my own projects without having to coordinate things with other people though, so I kept it to myself while I still felt the need and desire to work on it. It's been quite some time since I really did anything significant now though, so off to the intarwebs it goes!

Those who feel interested in working on ports or generally developing the codebase should talk amongst each other and set up suitable code repositories. I suggest you do that here, initially.

Sorry for not helping out more with the initial setup. My original plan was to clean the code up and split it neatly into native vs portable sections, but I never did, and now I definitely don't have the time or interest. The output code from that earlier effort (linux port) is included, so that might get things rolling in some way.

Have fun you strange people!

EDIT: Updated zip with MIT license statement. Why can't the default effect of not including a license be "anything goes, at your own risk"? If someone cares about preserving rights, they ought to specify that clearly or suffer the consequences...

Post by taron on Feb 3, 2010 15:44:49 GMT 1

Ok, well, now I'm getting spooked... I... 2008 I wrote my first synth. It's like...how is this possible, haha. We must somehow be universally related, pfff. I know it might all sound a bit strange, not all to easy to figure out what to make of a guy like me, bouncing in here and finding that we're doing the same kind of things. However, I don't mean to impose, really. I'm just stunned.

Eitherway, my synth is completely based on curves and I only did it to put sounds into my games without having to use samples, so it generates data which gets precomputed before the game starts. I also did that only because I'm using BlitzMax for my game experiments and can't find a good solution to do realtime synthesis, yet. I don't have enough experience with audio programming in regards to hardware and systems, yet.

Usagi, by the way, was one of my favorite little games ...was it c-64 or amiga, I forgot. But it also seems like you must come from one or both of them, haha. It just can't be that we're so similiar in regards to topics. I think, however, that you are far more organized than I am.

Anyway...wow!

S.Wave should be able to map internal instruments, too! (OMG, it's open source... muuuhhahah...nah, no worries, I'll see if I can deal with it in the first place, but then, oh, then...)And, uhm...you rock!

Post by DrPetter on Feb 3, 2010 17:47:01 GMT 1

Heh. I'd be more spooked if I was alone in the world with all these interests... I mean - it's so much fun, so someone else HAS to have discovered the same kinds of things, right?

Curves you say? Like manually plotting out a period of the waveform and then have it played back at high speed, repetitively? I made a synth like that a few years ago, with linear ramps defining the waveform. It could also morph the sound while playing. Kind of neat but limited.

I've heard of a game/character called Usagi (Yojimbo), but never played such a game unfortunately. The application name is a random acronym, tweaked to sound kind of japanese.

My serious computer interest started out when I got my A500, but I played with some friends' C64's before that. Made my first program in C64 BASIC (number-guessing games and a simple text maze, unsurprisingly).

At some point I thought about having swave automatically sample sound within the application, but I didn't stop to consider how complicated it would be in terms of interface and communication between various bits of code. There's no room for more buttons in the instrument window, so I'd need a different way of selecting which sample to record, and when to start/stop. Would be useful though, if you're making various synthetic drum noises using other instruments rather than grabbing existing samples.

Post by taron on Feb 3, 2010 18:09:19 GMT 1

Hehehe! I just realized that the hardcore c-64 times where a bit before your time, haha, but yeah, I started on the c-16 with basic and moved to assembler on c-64 and 128. Later Amiga500 then 1200.

Eitherway, a pop-up in swave where all instruments are listed and the option to load a wave might do the trick. Mouseover reveals what was chosen. In case of a wave it would show path and filename.

Ah, with curve control I meant all parameters (pitch, volume, filters, phasers and so forth). It's amazing to make melodies. I have time and pitch quantizations optional. The waveform generation is anti aliased, which is a pain in the bootey and makes it to me a bit complicated for all the morphing I have planned, but at least it pitches beautifully and has next to no aliasing. Man, I used to think sound would be easiest, after all the 2d and 3d I've programmed for. But no.HOwever, at some point I'll turn it into a complete synth where curve based morphing will be possible, too, as well as several blending and modulation types. But I really wished I was able to write realtime oscillators already. Then, oh, then...

Hey, if you'd like to see and hear some of the stuff I've been doing for fun, feel free to check out my website (which I desperately need to update!). I don't have my games up, since I havn't finished a single one, yet, but 5 started...pffff. One day it'll happen.

Post by DrPetter on Feb 5, 2010 13:53:44 GMT 1

I demand that you put up audio samples from your synth!

Screenshots from partial game projects could also be useful, since people might comment and help you decide which ones to focus on (and just generally nag you into working on any of them). Also, since the sad reality is that most hobby games don't come anywhere near being completed, some preliminary info can at least be entertaining and inspiring to look at - compared to a vague claim that "I kind of almost made something! Really!"

As for signal quality, supersampling is of course terribly simple and can work decently for 1D audio signals in terms of speed. I guess I don't actually use that in musagi though, now that I think about it... Square waveforms in xnes are antialiased in the sense that I handle signal flanks at sub-sample positions. Sample-based instruments average all sample points that are "skipped" when playing at a high rate, and use linear interpolation to make a non-aliased/continuous wave of adjacent points. 8x "dumb" supersampling would probably yield similar subjective audio quality in both cases, and I don't really know if it would be faster or slower.

Doing a silly google search for audio streaming in blitzmax gave me this - code.google.com/p/maxmod/ - not sure if it's useful in any way, but it would be great if you could get realtime synthesis going. It's so much fun to play with parameters and directly control the sound. One of those things that kill productivity due to making test runs excessively entertaining...

I enjoyed browsing your 2D gallery. Seems like you like light. And hearts. I'm a bit too restless for ambient electronic music though, especially in the context of "hey, let's see if this sounds any good". Could make for nice background sounds though, I'm sure.

3D gallery is of course impressive, though creepy. Also perhaps a bit "uneven"... I'm guessing that's due to it being rarely updated.

Post by taron on Mar 1, 2010 18:50:02 GMT 1

Oh man...how did I skip over your reply there...wild. Most've gotten distracted BY ALL YOUR OTHER PHENOMENAL STUFF! ;D

My 2d gallery has a lot of "hearts"? That I find...uhm...fascinating. It's always a little unclear, if it's unknown what you've been looking at, of course.As for music, well, I love and make all kinds of music and appreciate most directions as long as they reflect an honest mood of sorts. Yes, oh, yes, I need to update my website, but I'm damn lazy about it, that's for sure!

Post by taron on Mar 1, 2010 19:30:05 GMT 1

Amazing what I can program, considering that I'm incapable of setting up visual studio 2005 to compile your source properly. I've always been skipping the babysteps to leap straight into what mattered at the time...bizarre and annoying.Anyway, in case you have, for what ever reason, a vs solution flying around...

Post by DrPetter on Mar 2, 2010 1:56:30 GMT 1

If you have installed some version of the Visual C++ compiler (cl.exe), you should be able to simply run vc-compile.bat which is included in the musagi package, perhaps after adding appropriate paths to your environment (for cl.exe, include and lib files). You would need a source release of portaudio, with files in a "pa/" subdirectory (I think). You might also need to comment out and/or exclude any references to gin_vsti.h if you don't want to get the Steinberg SDK.

Getting other people's code to compile is always a tremendous horror, and one of the reasons I don't really like to deal with open source. Of course, once you do get it to compile you immediately face the next horror, which is making sense of and doing anything with the code

Your screenshots look really intriguing, and I will try out the download links soon enough. It's late now though.

Post by taron on Mar 2, 2010 12:45:00 GMT 1

No worries, that stuff is not running away as long as the server exists, hahaha!

AH, yes, portaudio <check>....comment out gin_vsti.h (I have to check for the Steinberg SDK). That all hopefully helps! The more I crawl into musagi, the more I get eager to help or "mess around" in it! ;D

Post by DrPetter on Mar 3, 2010 3:18:35 GMT 1

Syntaron: Neat. Are these sounds all procedurally generated from scratch? No voice samples as base or anything? I've managed to get some (mostly accidental) vocal sounds from a few of my own synths, but these were rather convincing.Here's a random collection of stupid sounds from a recent test with particle/spring dynamics for sound generation: synthdemo1.mp3 (I might use something like it for impact sounds in sfxr 2, but this particular implementation was hard to control)

GATTACATTA: Very refreshing gameplay concept. Took me a few seconds to figure it out, but it definitely works. I made it to four orbs before I gave up. Their motion is just too erratic/annoying, it gets unbearable after you've played for two minutes without ever getting close to the damn light!Controls feel "old", like a 90's game. Kind of a funny realization actually. Nowadays I'd expect something smoother, like move towards mouse cursor with some directional inertia.Could be fun if the orbs were initially very "dumb" and easy to hit/navigate, leveling up as you went along.

SirPenta: It's a black screen. Says it rendered heightmap and normals, but then nothing.

AwesomeGlassPongDude: Shiny. Sticky mouse acceleration that throws me off. The AI player looks kind of like a drunk idiot, which is a refreshing change from the machine-like opponents you normally get in these games.

Taronoid: Slick. With a good soundtrack this would have sold well on the Amiga The collisions seem a bit buggy, and I don't quite get how the ropes are supposed to work. Sometimes they collide with balls, sometimes they don't. I would probably have failed hard if they weren't there, since I often lost track of the near-invisible paddle while moving rapidly.Definitely stylish graphics though, and the level feels alive with the wiggly tiles. Level transitions are an additional thrill.

Post by taron on Mar 3, 2010 3:56:20 GMT 1

GATTACATTA: Yup, old-school, baby, I love it! Well...it's a bit too lose, just a concept-sketch, so to say. Once you understand how the orbs move, you get them easily. The obstacles, if I have them in there, are a bit annoying right now...not sure if I uploaded a clean version.

AwesomeGlassPong: Yup...it's a drunken AI that becomes a drunken master, haha. Was just my first FBO test and ATI compatibility experiment.

Taronoid: yaha...oh them good ol' days. The ropes load up with every contact of the ball with the bat. Collect magnet and brake powers to control the balls. The most I was juggling were well over 100, which is actually kinda fun. Eventually I wanted it to climb up a tower from a dungeon to the tippiditop of a scifi tower...then boost into the sky, space...planets.... endless. The balls were supposed to become currency with which you could buy upgrades and so forth. Well, hell...sketches, sketches, sketches. These things never took longer than a week, including learning the language (blitzmax). So yeah...dirty stuff.

Syntaron took a bit longer, since I had to learn how to program interfaces, deal with menu and other window stuff that I never cared about. Last but not least the audio itself, which was far more challenging than I had anticipated. For that I researched and translated quite a few things I found online on top of my own hidious ideas...but the results are quite neat not to mention that I wrote my first fileformat with it, making sounds for games with only a few bytes that would prerender like in GlassPong for example. I love small files! (damn...maybe I am old and longing for 4k intro times! I should probably get into writing full apps in C++ again. Only wrote plugins in C and C++.)

Post by anjo on May 7, 2010 0:34:38 GMT 1

I suppose rather than just posting a screenshot I should say where I'm at with the port...

Graphically, everything renders fine, though there's only one supported skin at the moment (the default). Saving songs seems to work alright. Loading... doesn't, which is kind of weird since it's basically the exact same code as saving. (UPDATE: now it does! Yay!) Audio doesn't work either, unfortunately; hitting the Play button won't even move the playing..line..thing. (UPDATE 2: Now audio works too! Double yay!) MIDI and VST support are both nonexistent. I highly doubt the latter is ever happening, but MIDI support might be a possibility when I've got all the core stuff working. Maybe.

I don't think I'll have much time to work on this for a week or so, as that is my finals week - this effort was mainly a diversion from studying, anyway. But over the summer I should have some spare time with which to attack the many problems that will haunt me.