VGMPlay/in vgm

From vgmrips
(Redirected from VGMPlay)

Not to be confused with VGM PLAY.

VGMPlay is a standalone VGM player (natch). in_vgm is the WinAmp/XMPlay plugin version. 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:

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:

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.

Note: For options that take a "bitmask", you have to add the (hexadecimal) numbers together to get the combo you want. This is a sort of complicated concept, so if you have to use one of these options, search the web for "Bitmask" or ask in Chat about it until I figure out how to easily explain it.
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
Note: EmulatorType has been left out because it's deprecated, and thus newer options that do the same things better are preferred.

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.

Note: For Mega Drive/Genesis games, you can generate channel wave files using BlastEm's -y option. The problem there is, I don't think it's possible to make the recording wait until you reach the song you want. You'll have to make a savestate just before you start the song, relaunch BlastEm with that option, and load the state to bypass the extra gunk.

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.)