VGMPlay/in vgm
Not to be confused with VGM PLAY.
VGMPlay is a standalone VGM player. in_vgm is the plugin version, compatible with WinAmp and XMPlay.
The most recent version of both (0.52.0, supports VGM 1.72) 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 | increase/decrease volume by 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 these options on the command line. You may use any amount of them in one command. To set multiple -c-style options, add one -c for each option.
| Short name | Long name | Effect |
|---|---|---|
| -w | --dump-wav | Enable WAV dumping (same as using -c General.LogSound=1)
|
| -c | --config option | Set configuration option, format: section.key=Data |
| -d id | --output-device id | Output device ID (depends on selected audio driver) |
| -h | --help | Show the help screen (Contains the version, Usage, and this list) |
| -v | --version | Show just the version |
--config options
These options come from vgmplay.ini. It's often found in the same folder as VGMPlay. The sections are listed in brackets, like [General] and [SN76496]. The keys, or options, are followed by an equal sign and then the current setting of the option.
Options given using -c will be used over options set in the .ini file. Let's say you set VGMPlay to loop infinitely. If this time you want it to loop twice, just do this on the command line:
vgmplay -c General.MaxLoops=2 "insert_here_a.vgm" "and_optionally_perhaps_a.vgz"
The .ini file documents itself, so just by reading through it you can understand the options. (If not, you're welcome to ask for clarification.) Aside from the two options mentioned above (-w and MaxLoops), the most important for pack-making would be the Chip Options.
For each chip, many of the options are the same as for other chips. They're described in one block before the chip sections, but that info is also copied below.
Many of the options described aren't listed in vgmplay.ini. To use them, add lines for them to the correct section. Some chips have additional options not listed in the table below, but appearing in their .ini section.
| Option | Default Data | Effect |
|---|---|---|
| Disabled | False | Set to True to disable the emulation of this chip |
| Core | Empty (First core option named for chip) | Set 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 may use. You can see the current core by setting General.ShowChipCore=True. |
| CoreSub | Empty (First core option named for chip) | Set the emulation core of the subordinate sound chip (e.g. YM2203's SSG or YMF278B's FM). |
| MuteMask | 0 | Mute channels by setting the muting bitmask |
| MuteCh# | False | Mute channel # (number) |
| MuteXXX | False | Mute channel with the name XXX (e.g. DAC, DT, BD, ...) |
| PanMask/PanMask_SSG | Empty (no panning) | Per-channel panning PanMask is only available for some sound cores: SN76496's MAXM, YM2413's EMU, AY8910's EMU, and NES APU's NSFP/MAME. Under those chip sections, you can find lists of the default panning values used by their Channels.
To set the panning position, set one value per channel, separated by commas (e.g., 0,0,0,0 for SN76496). The value ranges stretch 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 disabling 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"
Muting channels can be useful for sound processing. By making a .wav file for each channel of a VGM, it can also help make it easier to find loops.
Per-folder Settings
Put a custom VGMPlay.ini file in a folder, and it will be used instead of the one in VGMPlay's folder. The options in the latter are completely ignored: Any options not set in a folder's vgmplay.ini will be set to their defaults.
By doing this, you can set options that only apply to one pack without having to edit the original .ini from your preferred settings.
in_vgm-Specific Info
Basics
in_vgmis the ANSI version, compatible with all Winamp versions.in_vgm_wis the Unicode version, compatible with Winamp 5.3+ (and XMPlay?) only.
You should install only ONE of them, not both.
If either of them fail to load, you may need to install the "Microsoft Visual C++ 2010 Redistributable Package (x86)". Version 0.50 and higher needs Visual C++ 2010 runtime DLLs.
Plugin options dialog
This applies to in_vgm itself, across all players.
- Make sure the Playback Rate is 44100 Hz
- If outputting WAV files, select the proper output format: PCM, 16 Bit, Stereo, 44.100 kHz
- Set "pause after non-looped tracks" to zero
- (Optional) Set Play Loops to 2, so WAVs created from trimmed files can be compared to raw logs easily
If you plan to output WAV files, remember to make sure the player will put them in a folder you can find.
XMPlay
- Extract XMPlay somewhere you can freely work with files
- Place in_vgm or in_vgm_w in the same folder as
xmplay.exe - Open XMPlay
- Go into Options and Stuff by pressing F9, menu-clicking on XMPlay, or clicking the wrench icon
- Go to Input
- Configure in_vgm/_w as described above
XMPlay decompresses VGZ files by itself, then sends the decompressed VGMs to in_vgm. To use in_vgm's built-in decompression, put "vgm vgz" into the "Priority filetypes" text box while the plugin is selected.
Using Winamp, the VGM input plugin and the Disk Writer output plugin
- Close Winamp if it's already open
- Place in_vgm or in_vgm_w in Winamp's plugin folder. This is likely in
C:/Users/[YourUsernameIsHere]/AppData/Roaming/Winamp/Plugins/ - If Winamp was already open, restart it
- Press CTRL+P to open the preference screen
- Go to the "Input" section
- Configure in_vgm/_w as described above