Gauging interest for an embedded VGM player

Everything smooth? Got some comments for us? Feedback? It all goes here.
Post Reply
User avatar
Posts: 60
Joined: Tue Apr 24, 2007 11:32 am
Location: New York, NY, USA

Gauging interest for an embedded VGM player

Post by neologix »

With v1.50 VGM playback on the web nearly equal to VGMPlay/in_vgm and Game Music Emu, I'd like to gauge interest in Project2612 having an embedded on-site JavaScript VGM player. Some history (tl;dr at the bottom):

  • On SMS Power forums a few years ago, user BlackAura created the first proof of concept all-JavaScript VGM player using then-unfinalized Web Audio APIs. It could only play uncompressed SN76489-format VGMs of version 1.50 or less, but it proved Flash-free VGM playback on the web was possible!
  • After a long hiatus from web forums, I visited SMS Power and saw that thread. I downloaded that code and started working on modifying it to be more cross-browser (by replacing the audio sink with Grant Galitz's XAudioJS library) and to have the ability to dynamically load audio chip cores (what I call the "drop-in core functionality") instead of a hardcoded built-in SN76489 emulation.
  • After some work and with a lot of help from ValleyBell and Maxim, I succeeded in porting Maxim's SN76489 code from C to JavaScript to create a drop-in PSG. SN76489 is also the only chip where if a drop-in version is not present it will then fall back to the hardcoded emulation.
  • My next goal was a drop-in YM2612; before my attempts there was no previously existing JavaScript implementation of the YM2612 so I was essentially starting from scratch. My first attempt was incomplete and I left it sit for a couple of years.
  • Earlier this year (2014) I decided to drop my existing code and start over attempting to port the YM2612 from the C version in Genesis Plus GX to JavaScript.
  • Two-thirds way done with the YM2612, I'm directed to a Flash-free web MDX player and find a YM2151 implementation completely in JavaScript (presumably ported from the existing ActionScript implementation). I take this opportunity to see if I can drop in someone else's JS audio core into my highly progressed fork of the web VGM player, and to my surprise was successful almost immediately!
  • With more help from ValleyBell I finally complete the YM2612 porting and successfully match its audio output (at least, sample-wise) to not only Genesis Plus GX's but to VGMPlay's. Its performance is atrocious, however, especially when playing a YM2612 VGM with PCM (pretty much every Project2612 VGM ever).
  • Taking a break from attempting to optimize the YM2612's performance, I port the YM2413 (the last chip of VGM v1.50 spec). It has some output issues that need resolution, but it plays. I then add the last bit of v1.50 spec by adding VGZ decompression to the player.
  • Barring the issues with YM2612's performance and YM2413's off output, the JavaScript-based web VGM player now conforms to VGM v1.50 specification! To bring it inline with later VGM spec, the remainder of the audio chips need to be found existing in JS format, ported to JS from their original languages, or written completely from scratch in JS.

Along with the creation of purely JS emulations of these chips, a basic player front-end was also created, allowing use of jQuery JS to connect playback controls to VGM files. Properly done, such a player can theoretically be embedded onto any web page, though currently the VGM files would need to be found on the same site as the player (look up CORS or XSS). I've offered to SMS Power the player script and all the necessary VGM scripts to add an embedded VGM player to that site and they've accepted. I make the same offer to Project2612.

I've delayed so long in making this offer simply because the performance of the JS YM2612 (especially when PCM is present) is not yet up to par and once it is it requires the presence of a site admin who can actually touch the necessary files. SMS Power hasn't yet implemented an embedded player simply because the JS YM2413 in general isn't yet up to par. I would like two things from this thread: active site admins who can express interest or non-interest in doing the work needed to add an embedded player if one is to be embedded, and anyone (admin or not) with decent enough JavaScript skills to help me optimize and finalize the existing code.

tl;dr - I made a web VGM player that can be embedded into any web page. I offer it to Project2612 for such use, and would like to know if there are any active site admins around who'd accept the offer and be able to do the work to add it or decline the offer. I also am looking for experienced JS devs to help fix problems in the code (specifically YM2413, YM2612 performance, possibly a couple other general VGM issues).
User avatar
Been Here for a Bit
Posts: 41
Joined: Mon Feb 21, 2011 2:06 pm

Gauging interest for an embedded VGM player

Post by dissident93 »

Even though this site seems dead, we still have active admins who could implement something like this (as long as it's not too much work)

Once all the updates on the site go up (should be soon, actually..) then the admins can probably help with this.
Been Here for a Bit
Posts: 30
Joined: Sun Aug 17, 2014 4:19 pm

Gauging interest for an embedded VGM player

Post by vampirefrog »

I also vote yes, and can help with the php side of coding. :sonic: :ring: :ring: :ring: :ring:
Post Reply