VinsCool
[Original] Race Against a Cathode Ray (Atari TIA, Recorded from Real Hardware)
updated
Apparently the solution for my original music to sound good is to transpose it up by 2 semitones.
Amazing.
The music was played back using a hacked version of Dn-FamiTracker I made some time ago and kinda forgot about it.
The NTSC 2A03 Table was generated with my DUMB Soundchip Bruteforcer program, the exact same one I used for bruteforcing the "Optimal" POKEY tuning, as well as some other tables, a notable example is a Gameboy Table that was created for a Mega Man ROMhack, for the sake of improving the sound quality.
Also yes, I may have played a couple tunes multiple times by accident, I have the memory and attention span of a goldfish, sorry about that :D
If there's 1 thing the 15khz mode is good at, it's the really thicc bass.
There is a lot of work being done with RMT, and I promise this will not disappoint compared to the bloated mess I have done before.
Here, I demonstrated that it is absolutely possible to play this legendary song perfectly directly in the tracker, making use of a modified version of the RMT 1.25 Patch3 (Instrumentarium) driver, to which I added my Two-Tone toggle hack from my bloated Patch16 driver hack.
Currently, 5 driver patches could be switched from the settings, on the fly, without a hiccup, this one was the last of the few I had brought back into RMT.
This is only the beginning, because even more ambitious ideas are in the work.
I might share some Prince of Persia tunes the same way later today, stay tuned.
This demonstration is specifically for the NTSC POKEY.
For the PAL POKEY, tuning a little closer to 441Hz, or specifically, 440.83751645933Hz.
Each ones of the optimal A-4 frequencies will generate the exact same tuning tables, and they will always work for both PAL and NTSC regions.
Why is it bad to use 440Hz for such a limited range of 256 frequencies?
Well, it's a bit complicated to explain, but essentially, the notes must be in harmony between each others as much as possible, else, they will sound out of tune, and just stick out of the bunch for the wrong reasons.
If your ears cannot tell the difference, look over the Registers View, and see how much cents are off between the 2 different tunings.
One of them, 440Hz, is much worse than the other, and this is precisely what contributed to the reputation of the POKEY soundchip being detuned.
The real problem is the interval between notes, not the 440Hz tuning by itself.
As soon as you can stick to the best compromise, the problems become a less noticeable, and this ultimately makes the POKEY chiptune music sound a lot better.
The (de)tuning problems are grossly exaggerated, as shown in this video ;)
That kind of nay saying will only motivate said individual to work 10x harder, just to prove you are wrong.
Never underestimate the creativity in a person who might look dumbfounded in front of a difficult project, or sound clueless with their ambitious ideas that seem unrealistic at first.
And most importantly, you should never assume the worst in someone's potential, because when (not if, but *when*) they figure their way around something, they might be the one who will laugh back at you for being a stubborn ass, who immediately brushed away any dumb ideas that happened to actually work out, on the long run.
So yes, working on projects with a driving passion for several years will ultimately culminate into something, and that's the journey where the efforts pay off the most.
I told you, I was going to make it happen, it was only a matter of time.
Never tell me again that I can never make something that looks impossible to you.
Having a sliver of chance for being possible, means it WILL be done regardless of the roadblocks that might appear disproportionately big compared to the determination you may also have wrongly assumed to be worthless.
So you suggested me that I made my own researches, and built my own project for my own use, and that's exactly what I did do.
Thanks for making me become a better person, seriously.
By dismissing my own skills, I realised I had absolutely nothing to lose, and so I invested a lot of my limited free time into improving myself by experimenting in my own little corner, and learned a lot from this, still all by myself.
And honestly? It was well worth it.
I would do it again, at any time.
Because I love when I ultimately get to prove my point, especially when I am being challenged to dare trying in the first place.
So, yes.
Yes, indeed.
I did it.
Booyah!
Relevant changelog: github.com/VinsCool/RASTER-Music-Tracker/commit/afef1ec7013ab080d6d53d29477469a77716ea4f
VUPlayer will also get updated, eventually.
RMT2LZSS cannot export multiple tunes to a single .xex, that stand alone tool will essentially become fully obsolete once all this stuff is fleshed out at the fullest.
Also displaying some debugging infos during the compression procedure, but this is only for making sure everything worked as intended.
There is also another significant performance boost from the cleaned up LZSS export from very fast SAP-R registers dump, which is also a major speedup for that whole thing.
Feels good to prove a point :D
This could become pretty significant for better compression with SAP-R stream dumps, considering this was only a test, it already shows the potential for greater memory savings.
Timing was not handled using the linked 6502 CPU emulation to the POKEY emulation, but directly by RMT via a hacked sa_pokey gateway procedure.
I used the full 65535 bytes for sound buffer, but there are still some slowdowns, mainly caused by Screen Recording setup rather than RMT or the Atari emulation itself.
Enjoy.
RMT: forums.atariage.com/applications/core/interface/file/attachment.php?id=988791&key=444f3d06573da3ea4f0f1804d58ff7f2
XEX: forums.atariage.com/applications/core/interface/file/attachment.php?id=988792&key=9a3eb5cf54a2e869e7d9fe6ee7cd1244
I have made a cover of the much better SNES version of the same tune, but I will release it another time.
The phase shift gets "locked" into a very stable position, which is very nice for creating a chorusing effect, in this case.
I really like how the output sound doesn't get "cancelled" at random, unless an interval of 0 semitone is used between the 2 channels.
This is certainly something worth experimenting further!
Anyway, I mainly played around in this video, so don't bother watching past the 2 first minutes, unless you wanted to hear cool modulations.
Also, this is a tune I haven't yet finished transcribing.
If anyone wondered, the tune is Yoshi's Theme, from Tetris Attack (SNES).
Added more robust Filter manipulation tricks, but this is still experimental programming.
No tracker available for the driver yet, the tune was still made in Assembly code.
The music driver is pretty stable in its current form, however.
Hopefully, I may be able to adapt RMT to export data compatible to it somewhere in the future.
There is a lot to do, still, much of the improvements are needed to reduce the CPU cycles usage, as well as the memory being eaten away due to redundancy.
The module format is still a work in progress, the Instrument routine is 100% written from scratch now, there is no longer any code borrowed from the RMT routines, it's no longer needed since DUMB is taking a very different direction, a lot of the differences reside in the timing and AUDCTL management, as well as the entire pattern/instrument structure, they are very different things now, there is still a bit of backwards compatibility in the exported data planned, however. More on that in due time, there is a lot to do before I could even attempt converting RMT modules to DUMB modules, and vice-versa.
Swaping between CH2 and CH4 does virtually no difference, although I have a feeling something is very slightly off, but I am not sure if that's just my ears tricking me.
I would totally make some banging tunes but the lack of actually using a tracker makes it much harder right now lol
Maybe I should try adding a Pitch bend up/down command for some kickass 16-bit drums.
No idea how to implement that for now.
- initial 16-bit support for pitch shifting
$02 - $03 - Instrument Retrigger
$04 - $05 - Instrument Continue
A full tune can be played back in DUMB without any visible problem for now.
Music composed by PG, for the game Bunny Hop, which is used in-game.
I transcribed the original .rmt module by hand using the Macro Assembly Pseudocode I wrote in the meantime, to make the process a lot easier for me when I am trying to flesh out some tunes for tests.
The module format I am designing for the DUMB Music Driver is still work in progress, and as such, it is very likely to change later.
I have yet to set in stone the Instrument structure I plan to use.
For now, I've used the RMT instrument data format directly, which was ported into my own routines with a lot of changes to make it compatible to a degree, but a lot of the original Assembly code used in the RMT driver was thoroughly rewritten just to get the bare minimum compatible with this tune.
I am finally wrapping my head around the original unrolled, uncommented routines Raster wrote almost 2 decades ago, and it's honestly some really good stuff, so I can't wait to design my own ideas using a similar structure later!
A lot is missing, but the minimum is working already!
CMD Axy Set Volume Fade (very crude envelopes finally!)
Fixed a lot of bugs related to processing Effect Commands
Fixed a big timing bug related to Songlines Goto routine
4 Effect Commands can be set at once per channel, and the Music Driver didn't sweat it all that much!
So yes the big CPU usage spike was entirely due to 3 channels spamming a ton of effect commands all at once! lol
The point was to prove it could be done!
Take that haters!
Now it can support between 0 up to 255 commands in 1 row, but this is purely accidental, I will still put a cap to 4, unless someone of course really wants to put more commands than that, lol
This is still FAR from usable for everyone, but it's getting somewhere now :3
It only played flat silence for the last 2 weeks until 10 minutes ago before I ran to a screen capture of it being tested in real time, there was no plan with the video recording, I was literally testing it in real time at the moment I pressed record.
I must say, I am amazed this even works as good as it does right now, the very first attempt I made around 2 months ago at the same time I worked on DUMB PONG, was absolutely catastrophic, just the worst kind of spaghetti programming full of bugs, I'm glad I deleted the first attempt and restarted everything at ground zero, this time with much more promising results already!
It's a lot of work still, but my goal is to be able to use it as an alternative to the driver used with Raster Music Tracker, with functionalities and flexibility in mind.
More will come... sometime soon...
It's mostly playable.
The CPU programming is smart enough to be able to play all by itself.
More informations and download on Atari Age:
forums.atariage.com/topic/341857-wip-dumb-pong
Pretty happy of the results, honestly.
RMT: forums.atariage.com/applications/core/interface/file/attachment.php?id=964445&key=da14fcb9a4943576f1ee324e370ff2c1
XEX: forums.atariage.com/applications/core/interface/file/attachment.php?id=964444&key=07a316712730267e69d8323960aae453
The module was created with Raster Music Tracker 1.34+ (Latest Git build), then exported with the XEX-LZSS format, and played back in Altirra 4.10 Test-17.
Thanks for watching.
Also showcasing further progress in the RMT's newer screen rendering code I have been working on during my spare time.
All the .rmt modules shown in ths video are available here: atariage.com/forums/topic/328790-release-raster-music-tracker-v13400/?do=findComment&comment=5091831
Enjoy, if you want to.
Thanks for watching.
More work under the hood coming, currently working on making the UI code better, and also trying to make the Bitmap rendering better and faster.
Enjoy the tune!
This is one of the rare times I post some music I did not make, but I think this can be forgiven just for the smooth experience alone :D
The newest Ocarina of Time Triforce% showcase reminded me I made this cover some time ago, but never released it, so here is it.
Cover made with Raster Music Tracker 1.34.00.
XEX: atariage.com/forums/applications/core/interface/file/attachment.php?id=952004
RMT: atariage.com/forums/applications/core/interface/file/attachment.php?id=952003
Also, go watch this video about the exploit setup, it's great stuff!: youtube.com/watch?v=qBK1sq1BQ2Q
So yes, there was a lot of memory that could be to saved, I was RIGHT!
Download: atariage.com/forums/applications/core/interface/file/attachment.php?id=936506
XEX size (including the LZSS subtunes, the driver itself, and the VUPlayer data): 33.2 kB (33,185 bytes).
Not bad, eh?