Monday, July 14, 2008

About my YM3812 emu ...

well, I've read a lot of stuff about the yamaha chips, and also some patents.
Some patents also contained some schematics ... and while thinking about them, I solved
a small problem with some sounds in my emu.
There has been many stuff about the Hunting Phenomena and how they fixed it (using a 32 step shift register in an averaging circuit) ... this should work like a low-pass. (They seem to use this shift-register-averaging circuit on everything: operator outputs, feedback, phase modulation input)
So I've implemented another (right now integer) leaky-integrator inside the PM path and voila: sounds just like my AWE64^^

Sunday, July 13, 2008

Ok, system runs stable, Win and SuSE are configured again. No data loss.

I've done an emulation of the YM3812 during the last days (melody mode only). This will be used in my Dune2 remake, to play the original .ADL sound files directly from the .PAK archives. (The .ADL is also ready, and I play those old Dune2 ingame tunes over and over again :) (linux, portaudio (and jack))

Some infos about my emulation:
I'm not doing bit-correct YM3812 emulation, but sound-alike emulation. I'm using a 21 bit phase counter, 16 bits fine sine-tables, but YM3812 volume calculation (well, I don't use this strange floating-point implementation, but 12 bits fixed point).
My EG implementation also differs from the one seen in fmopl.c. I don't use those strange step-tables, but a 24 bit EG counter and simple integer-step values -> (4+(0 to 3)) << (rate - 1).
Another major difference to the fmopl.c YM emu is: My emu always runs at the real chip timings. Sound output is done by 'sampling' the emu's output. (In fact: a ring-buffer and linear interpolation). So my emulation always sounds identical, no matter what samplerate you use (fmopl.c sounds different (and strange) depending on the samplerate). Well, a(n) (dis-)advantage of this method is: The cpu consumption doesn't change with samplerate.^^
Finally a 12.7kHz lossy-integrator 24dB low-pass is applied.
I've checked the output of my emu against the recordings of the Dune2 music, done using my old Soundblaster AWE64 Gold: Output is close enough to the original.
(Here's the source, if you want to take a look (still under development) neo_ym3812.cpp neo_ym3812.h )
And now I've got an idea: I'll write a YM3812 VSTi ... a simple one channel version, polyphonic. (My full nine channel emulation uses about 2% to 3% cpu on my 3.2GHz P4, so the VSTi will also have good performance.)
It will contain no anti-aliasing stuff, just pure aliasing-like-hell, retro PM sound.

But first, the final version of CetoneSynth2 will be relased ... and maybe a GUI for CetoneOrg ... but I've still no idea how it should look.

Stay tuned^^