VGMPlay/in vgm
Not to be confused with VGM PLAY.
VGMPlay is a standalone VGM player (natch). in_vgm is the plugin version, compatible with WinAmp and XMPlay. The most recent version of both (0.51.1, supports VGM 1.72b) can be found in the VGMPlay/in_vgm forum thread, or built from source. Although not officially supported, a Foobar component port exists and users often post about updates to it in the same thread.
The following GitHub repositories are relevant:
- https://github.com/ValleyBell/libvgm
- https://github.com/ValleyBell/vgmplay-libvgm
- https://github.com/ValleyBell/in_vgm-libvgm
A GUI exists, but is basic and abandoned. It lacks features like passing command options to VGMPlay, though it can build playlists.
VGMPlay-Specific Info
The rest of this section is a lightly-edited port of the VGM Player 0.51.1 readme, aside from the new section "Options Overview" and dropping the Credits for now.
General Usage
Drop any number of files on the executable, or open the program and type the filename.
Supported files types are:
- Video Game Music Files (*.vgm, *.vgz)
- DosBox RAW OPL Files (*.dro)
- Genecyst Sound Files (*.gym)
- T98 Sound Log Files (*.s98)
Playlist files (*.m3u) are also supported, but may only list the file types above.
Keys
You can use the following keys during all playback, including silent sound logging.
Key | Function |
---|---|
Space or P | Pause |
ESC or Q | Quit the program |
Left/Right Arrow | Seek 5 seconds backward/forward |
Ctrl+Left/Right Arrow | seek 1 minute instead |
0..9 | jump to 0%..90% of the full song play time, including MaxLoops. |
PageUp or B | Previous Track |
PageDown or N | Next Track |
R | Restart current Track |
F | Fade out |
Up/Down Arrow | increase/decrease volume by 0.2 db |
Ctrl+Up/Down Arrow | by 3.0 db |
[ or ] | decrease/increase playback speed by 1/16th |
{ or } | halve/double playback speed |
Ctrl+X | quit after the current song finishes |
Ctrl+P | pause after the current song finishes |
Options Overview
VGMPlay accepts some command line options:
Short name | Long name | Effect |
---|---|---|
-h | --help | Show the help screen (Contains the version, Usage, and this list) |
-v | --version | Show just the version |
-w | --dump-wav | Enable WAV dumping (same as using -c General.LogSound=1) |
-d | --output-device id | Output device ID (This makes it crash for me, not sure why....) |
-c | --config option | Set configuration option, format: section.key=Data |
You may use any number of these options in one command. But to use multiple config options, you must use a new -c for each.
The config options come from vgmplay.ini, usually found in the program's folder. The sections are listed in brackets, like [General]
and [SN76496]
. The keys are followed by an equal sign and then the current setting of the option.
When you use -c, VGMPlay uses the options you provide and ignores those with the same name from the .ini file. Let's say for example you set VGMPlay to loop infinitely. If this time you want it to loop twice, you don't have to change the .ini again. Just do this:
VGMPlay -c General.MaxLoops=2 insert_here_a.vgm and_optionally_perhaps_a.vgz
The .ini file is very well-documented, so just by looking through it you can understand the options. (If not, you're welcome to ask for clarification.) That said, there're many and you might wonder which ones are "most important" for game ripping activity. Aside from the two mentioned above (-w and MaxLoops), that would be the Chip Options.
For each chip, many of the options available are the same as the others. They're thus described in one block before the various chip sections. I'll copy these into the table below for convenience.
In those sections, you might be surprised to find many of the options described don't appear. That doesn't mean you can't add lines to put in Muting options and such. Some chips have additional options that aren't listed in the table below, but appear in their section.
Option | Default Data | Effect |
---|---|---|
Disabled | False | Disable the emulation of this chip |
Core | Empty (First core option named for chip) | Specify the emulation core to use, using a case-sensitive 3-4-character-code like NUKE, ADLE, or EMU. The chip's section lists any alternate cores it can use. You can see the current core by setting General.ShowChipCore=True. |
CoreSub | Empty (First core option named for chip) | Specify the emulation core of the subordinate sound chip (e.g. YM2203's SSG or YMF278B's FM). |
MuteMask | Not set (0?) | Mute channels by setting the muting bitmask |
MuteCh? | False | Mute channel ? |
Mutexxx | False | Mute channel with the name xxx (e.g. DAC, DT, BD, ...) |
PanMask | ? (No change to playback) | See details below |
PanMask details
The per-channel panning PanMask provides is only available for three sound cores: SN76496's MAXM, YM2413's EMU, and AY8910's EMU. Under those chip sections, you can find lists of the default panning values used by the chips' Channels.
To set the panning position, then, you must set one value per channel, separated by commas (e.g., 0,0,0,0 for SN76496). The value ranges extend from -1.0 (left), 0.0 (centre), and +1.0 (right).
A Litle More on Chip Muting
To mute individual channels for a chip, you can change the appropriately-numbered setting (just replace #
):
[YM3812] MuteCh# = True [YMF278B] MuteWTCh# = True
change the MuteMask setting:
MuteMask = 0x00F0 ;mute channels 4..7 MuteMask_WT = 0xFFFFFF (mute all 24 channels)
or combine the two:
MuteMask = 0x00F0 MuteCh0 = True ; mute channel 0 in addition to 4..7 above
But to do something like disable the YM2612 to check if the PSG is unused, it's quicker and easier to just disable the whole chip:
vgmplay -c YM2612.Disabled=True song_to_test.vgm
Aside from that, why would you want to mute channels, you may ask? If you're covering (i.e. recreating) a track, it makes it easier to pick out the pieces. And by making a .wav file for each channel, it can also help make it easier to find loops.
Per-folder Settings
To have VGMPlay settings that are specific to a folder, just put a custom VGMPlay.ini file in it. You can set options that're only relevant to that pack without having to undo them afterwards.
(Note that the .ini files don't combine; any options not set in a folder's vgmplay.ini return to defaults.)
in_vgm-Specific Info
- in_vgm is the ANSI version (for all Winamp versions); in_vgm_w is the Unicode version (Winamp 5.3+ (and XMPlay?) only). You should install only ONE of them, not both.
- XMPlay decompresses vgz files by itself and sends the decompressed vgms to in_vgm. In order to use in_vgm's built-in decompression, put "vgm vgz" into the "Priority filetypes" text box while the plugin is selected.