Chip Player JS, an online music player
Technical discussion about the VGM format, and all the software you need to handle VGM files.
Moderator: Staff
Chip Player JS, an online music player
Hi friends,
I want to share a project I have been working on. Chip Player JS, a web-based music player:
https://mmontag.github.io/chip-player-js/
It supports NSF, NSFE, SPC, VGM, VGZ, XM, MOD, S3M, IT, AY, KSS, SGC, and last but not least, MID.
It includes a large music catalog, and also provides drag and drop playback. The player supports tempo control and channel muting across all formats. It's meant to function as a long-session music player similar to Spotify.
I am excited to get some feedback on the project and invite your suggestions.
Thanks,
matt
I want to share a project I have been working on. Chip Player JS, a web-based music player:
https://mmontag.github.io/chip-player-js/
It supports NSF, NSFE, SPC, VGM, VGZ, XM, MOD, S3M, IT, AY, KSS, SGC, and last but not least, MID.
It includes a large music catalog, and also provides drag and drop playback. The player supports tempo control and channel muting across all formats. It's meant to function as a long-session music player similar to Spotify.
I am excited to get some feedback on the project and invite your suggestions.
Thanks,
matt
Listen to VGM ♫ https://chiptune.app (libvgm/VGM 1.71)
Well, you're using Game_Music_Emu. Coming here and showing off your player using it is like coming to a Mac forum and demonstrating your new Windows application. Besides, as you'll notice many of the packs on vgmrips (especially ones using exotic sound chips) will play incorrectly or not at all with GME.
- ValleyBell Offline
- Posts: 4805
- Joined: 2011-12-01, 20:20:07
- Location: Germany
Hahah, nevermind showing off then.
I was attempting to support the most formats with the fewest dependencies (and smallest compiled size). Originally I wanted to go further with support for PSF/USF/GSF etc, and may get back to that if I ever figure out bundle splitting with emscripten.
Anyway, now I'm forced to wonder.
What are the most significant chips I'm missing out on with kode54's game-music-emu branch?
What does the overlap between game-music-emu and vgmplay look like?
I was attempting to support the most formats with the fewest dependencies (and smallest compiled size). Originally I wanted to go further with support for PSF/USF/GSF etc, and may get back to that if I ever figure out bundle splitting with emscripten.
Anyway, now I'm forced to wonder.
What are the most significant chips I'm missing out on with kode54's game-music-emu branch?
What does the overlap between game-music-emu and vgmplay look like?
Listen to VGM ♫ https://chiptune.app (libvgm/VGM 1.71)
- ValleyBell Offline
- Posts: 4805
- Joined: 2011-12-01, 20:20:07
- Location: Germany
Supported sound chips:
GME/org (4 chips) = original Game Music Emu - It has full support for VGM v1.50, because that was the current version back in 2006.
GME/k54 (24 chips) = kode54's fork - It has a fair number of changes compared to the original GME, IIRC. It supports most of VGM v1.60.
VGMPlay (41 chips) = what VGMPlay/in_vgm supports (basically everything supported by VGM v1.71, which is the current version)
Code: Select all
VGM 1.71 GME/org GME/k54 VGMPlay
SN76496 x x x
YM2413 x x x
YM2612 x x x
YM2151 x x x
SegaPCM x x
RF5C68 x x
YM2203 x x
YM2608 x x
YM2610 x x
YM3812 x x
YM3526 x
Y8950 x
YMF262 x x
YMF278B x
YMF271 x
YMZ280B x x
RF5C164 x x
32X PWM x x
AY8910 x x
GameBoy DMG x x
NES APU x
YMW258 x
UPD7759 x
OKI6258 x x
OKI6295 x x
K051649 x x
K054539 x x
HuC6280 x x
Namco C140 x x
K053260 x x
Pokey x
QSound x x
SCSP x
WonderSwan x
VBoy VSU x
SAA1099 x
ESS5503 x
ESS5505/6 x
Seta X1-010 x
Namco C352 x
Irem GA20 x
GME/k54 (24 chips) = kode54's fork - It has a fair number of changes compared to the original GME, IIRC. It supports most of VGM v1.60.
VGMPlay (41 chips) = what VGMPlay/in_vgm supports (basically everything supported by VGM v1.71, which is the current version)
Hi ValleyBell, thanks for the incredibly detailed reply.
I'll have to do some homework on these missing chips.
Another noob question: what kind of glue code is needed to use the YMF262 as a MIDI device? Any good examples you know of?
I'm looking at bisqwit's ADLMIDI [1] and malicex's opl3-synth-driver now. It looks...scary. [2]
What tool was used to produce the vgmrips of OPL3 PC games, such as Tyrian and Duke Nukem?
matt
[1] https://github.com/bisqwit/adlmidi/blob ... ay.cc#L837
[2] https://bitbucket.org/djtubig-malicex/o ... #lines-716
I'll have to do some homework on these missing chips.
Another noob question: what kind of glue code is needed to use the YMF262 as a MIDI device? Any good examples you know of?
I'm looking at bisqwit's ADLMIDI [1] and malicex's opl3-synth-driver now. It looks...scary. [2]
What tool was used to produce the vgmrips of OPL3 PC games, such as Tyrian and Duke Nukem?
matt
[1] https://github.com/bisqwit/adlmidi/blob ... ay.cc#L837
[2] https://bitbucket.org/djtubig-malicex/o ... #lines-716
Listen to VGM ♫ https://chiptune.app (libvgm/VGM 1.71)
Not really a helpful reply in itself, but that UI looks very nice!
My only concern is that the logo might look too much like Winamp's...
(Also, it's time to add Pico 4 entries to the database.)
My only concern is that the logo might look too much like Winamp's...
(Also, it's time to add Pico 4 entries to the database.)
- vampirefrog Offline
- Webmaster
- Posts: 1508
- Joined: 2014-01-28, 5:51:54
The logo is shamelessly ripped off in deference to Winamp (in a similar vein as projects like webamp.org)...but if it's not well received, I'll ditch it.Shywolf wrote:Not really a helpful reply in itself, but that UI looks very nice!
My only concern is that the logo might look too much like Winamp's...
(Also, it's time to add Pico 4 entries to the database.)
Thanks for the tip on Pico 4! I love Famicompo. (is there a similar competition for FM/Adlib chips??)
Listen to VGM ♫ https://chiptune.app (libvgm/VGM 1.71)
- ValleyBell Offline
- Posts: 4805
- Joined: 2011-12-01, 20:20:07
- Location: Germany
In order to play MIDIs on OPL2/3, you need to write an additional abstraction layer that does the conversion between MIDI commands and the OPL chip.mmontag wrote:Another noob question: what kind of glue code is needed to use the YMF262 as a MIDI device? Any good examples you know of?
I'm looking at bisqwit's ADLMIDI [1] and malicex's opl3-synth-driver now. It looks...scary. [2]
I'm afraid this is not a trivial task, as that layer has to take care a few things, like:
- choosing an "instrument" on a MIDI channel requires you to load OPL register settings from a table (or file) and write them to the chip
- MIDIs have 16 polyphonic channels, OPL chips have only monophonic channels, so you need to remap the MIDI notes to whatever OPL channel is free
- MIDI channel 10 is for drums, which require you to load separate settings per note
Those were logged with DOSBox. Most of those older logs were done by logging DRO files (with a custom DOSBox version that produces more verbose DRO logs) and converting them to VGM.mmontag wrote:What tool was used to produce the vgmrips of OPL3 PC games, such as Tyrian and Duke Nukem?
These days the recommended way to log VGMs from DOS games is to use the DOSBox VGM mod. (see the [pack] VGM Creators topic for links)
- vampirefrog Offline
- Webmaster
- Posts: 1508
- Joined: 2014-01-28, 5:51:54
I also have a simple MIDI FM toy here https://github.com/vampirefrog/fmtools
it takes MIDI, and each channel is an FM chip. It limits polyphony to whatever the chip supports.
it takes MIDI, and each channel is an FM chip. It limits polyphony to whatever the chip supports.
I went ahead with libADLMIDI. It's a very nice and configurable project.
This only increased my compiled wasm by about 90kb.
So now you can choose between SoundFonts and OPL3 for MIDI.
There are ~25 OPL3 banks included, with automatic bank selection implemented for a few games.
Here is a Descent 2 track that pushes OPL3 pretty hard:
https://mmontag.github.io/chip-player-j ... GAME02.MID
This only increased my compiled wasm by about 90kb.
So now you can choose between SoundFonts and OPL3 for MIDI.
There are ~25 OPL3 banks included, with automatic bank selection implemented for a few games.
Here is a Descent 2 track that pushes OPL3 pretty hard:
https://mmontag.github.io/chip-player-j ... GAME02.MID
Listen to VGM ♫ https://chiptune.app (libvgm/VGM 1.71)
Hey, I'd like to say that I have LOVED these classic chiptunes you are offering on your site. And when I have it hooked up to the speakers it sounds phenomenal!
I regularly come to your site to find inspiration from old video game music.
And I just realized your visualization option actually SHOWS the notes being hit! This is also very useful to me.
The only thing I would ask to change is the option to change the waves on the visualization on/off. Or at least dim it down so that I can actually study the notes without having my eyes warp things in front of me when I move away after 3 minutes of watching. Lol.
EDIT: As it turns out, the heavier songs with more noise are harder to decipher, but classic NES and Game Gear are easier to read. Can't wait to keep studying the notes that play.. it's a good way for me to learn and pick up patterns in music.
Great work, thanks. Please keep it up, I would have no idea where else to look for to get this kind of stuff other than playing the game itself VIA emulator or Console.
I regularly come to your site to find inspiration from old video game music.
And I just realized your visualization option actually SHOWS the notes being hit! This is also very useful to me.
The only thing I would ask to change is the option to change the waves on the visualization on/off. Or at least dim it down so that I can actually study the notes without having my eyes warp things in front of me when I move away after 3 minutes of watching. Lol.
EDIT: As it turns out, the heavier songs with more noise are harder to decipher, but classic NES and Game Gear are easier to read. Can't wait to keep studying the notes that play.. it's a good way for me to learn and pick up patterns in music.
Great work, thanks. Please keep it up, I would have no idea where else to look for to get this kind of stuff other than playing the game itself VIA emulator or Console.