Git Product home page Git Product logo

vgmplay-legacy's Introduction

VGMPlay Build Status

The official and always up-to-date player for all VGM files.

In the future, the existing VGMPlay will be replaced by libvgm, which is currently in development.

Contact

Compile VGMPlay under Windows

Using MS Visual Studio 6.0:

  1. Open VGMPlay.dsw.
  2. Build the project.
  3. Done.

Using later versions of MS Visual Studio:

  1. Open VGMPlay.vcxproj.
  2. Build the project.
  3. Done.

Using MinGW/MSYS:

  1. open MSYS and run make WINDOWS=1 in VGMPlay's folder.
  2. Done.

Note: You can compile it without MSYS, but you need to manually create the OBJDIRS paths (or make them use the backslash ''), because mkdir fails at paths with a forward slash.

Compile VGMPlay under Linux

  1. [optional step] If you have libao installed, you can edit the Makefile to make VGMPlay use libao instead of OSS.
  2. run make in VGMPlay's folder
  3. Done. Optionally sudo make install and sudo make play_install.

Building on Ubuntu (16.04)

Requirements

The following packages are needed in order to compile the binaries

sudo apt-get install make gcc zlib1g-dev libao-dev libdbus-1-dev

Building

make

Compile VGMPlay under macOS

  1. install libao by executing the line brew install libao
  2. run make install MACOSX=1 DISABLE_HWOPL_SUPPORT=1 in VGMPlay's folder (Alternatively edit the Makefile to set those constants and just run make.)
  3. Done.

Thanks to grauw for macOS compilation instructions.

Compile VGMPlay under Android

  1. Install Termux on F-Droid or GitHub. Do not download Termux from Play Store for security and depreciation reasons
  2. Open Termux and do pkg update
  3. When you do pkg update, do pkg install clang dbus git libao make pkg-config -y
  4. After the installation is done, do git clone https://github.com/vgmrips/vgmplay
  5. After Done Cloning, do cd vgmplay/VGMPlay
  6. And then do make

vgmplay-legacy's People

Contributors

barotto avatar cecton avatar codeman38 avatar cr1901 avatar dasl- avatar eloj avatar felipesanches avatar fragag avatar gucktubeyt avatar ibara avatar jameds avatar libertyernie avatar nukeykt avatar okaxaki avatar olivierbeltrando avatar sombrabsol avatar superctr avatar superusercode avatar tatokis avatar valleybell avatar wboubi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vgmplay-legacy's Issues

Popping/Aliasing distortion in some CPS-2 games

I can hear some clipping distortion in some CPS-2 musics, like in 07 Ken Stage I of Super Street Fighter II

If I increase the 12.5 kHz and decrease other frequencies in Audacity, I can hear a 11 kHz noise almost all the time, following one instrument I think. The sample rating is 11025 Hz, so there's no way to this 11 kHz signal appears, unless it's coming from the harmonics generated by the clipping.

I can't hear this distortion in GME. The samples seems to be good, I opened the files of ssf2 in the Audacity, raw data, Signed 16-bit PCM, big-endian, 1 channel, 11025 Hz.

Edit: I was importing wrong the samples, it's 8-bit PCM, big-endian, 22050 Hz

malloc(0) and divide by zero

if we set SampleRate = 0; in vgmplay.ini will cause divide by zero
as follows

Program received signal SIGFPE, Arithmetic exception.
0x0000555555564274 in SamplePbk2VGM_I (SampleVal=0) at VGMPlay.c:3969
3969		return (INT32)((INT64)SampleVal * VGMSmplRateDiv / VGMSmplRateMul);
(gdb) bt
#0  0x0000555555564274 in SamplePbk2VGM_I (SampleVal=0) at VGMPlay.c:3969
#1  0x00005555555650a5 in InterpretVGM (SampleCount=0) at VGMPlay.c:4741
#2  0x0000555555564487 in InterpretFile (SampleCount=0) at VGMPlay.c:4178
#3  0x000055555555c427 in PlayVGM () at VGMPlay.c:1058
#4  0x000055555555a6d7 in PlayVGM_UI () at VGMPlayUI.c:2132
#5  0x0000555555556d25 in main (argc=3, argv=0x7fffffffe048) at VGMPlayUI.c:530
(gdb) p VGMSmplRateMul 
$20 = 0

if set SampleRate = 1; and commandline with -LogSound:1 will cause malloc(0) and may cause heap overflow

Breakpoint 6, __GI___libc_malloc (bytes=0) at malloc.c:3028
3028	malloc.c: No such file or directory.
(gdb) bt
#0  __GI___libc_malloc (bytes=0) at malloc.c:3028
#1  0x000055555555a96e in PlayVGM_UI () at VGMPlayUI.c:2222
#2  0x0000555555556d25 in main (argc=3, argv=0x7fffffffe048) at VGMPlayUI.c:530

vgm2wav won't find yrw801.rom unless it is in cwd

If you have a vgm file with OPL4 chip, vgmplay will load yrw801.rom if it is located in /usr/local/share/vgmplay or ~/.config/vgmplay but vgm2wav (and possibly vgm2pcm) will report:
Warning! OPL4 Sample ROM (yrw801.rom) not found!
if you put the yrw801.rom in the same dir as the vgm file and run vgm2wav in that dir it will load the samples.

Our current Makefile is not sensitive to changes in header files

I modified a header file and make thinks there's nothing to be done.
We should add a makefile rule to make *.o files dependant on their respective .c and .h files (not only .c files as we have now).

I tried that with the following rule:
$(OBJ)/%.o: $(SRC)/%.c $(SRC)/%.h

But then the build fails because VGMPlay_AddFmts.c does not have a corresponding VGMPlay_AddFmts.h file. Maybe we should create this header file just to keep the Makefile simple ?

Too many initializers; undefined references to _inp and _outp

I can't build VGMPlay with Visual Studio. The compiler returns the following error among a number of warnings:

1>VGMPlay.c(1813): error C2078: too many initializers

Examining the source code, I discovered this piece of code to be offensive to VS:

const char* CHIP_STRS[CHIP_COUNT] =
{ "SN76496", "YM2413", "YM2612", "YM2151", "SegaPCM", "RF5C68", "YM2203", "YM2608",
"YM2610", "YM3812", "YM3526", "Y8950", "YMF262", "YMF278B", "YMF271", "YMZ280B",
"RF5C164", "PWM", "AY8910", "GameBoy", "NES APU", "MultiPCM", "uPD7759", "OKIM6258",
"OKIM6295", "K051649", "K054539", "HuC6280", "C140", "K053260", "Pokey", "QSound",
"SCSP", "C64"};

Similarly, attempting to compile under MinGW/MSYS returns all of this mess:

obj/ChipMapper.o:ChipMapper.c:(.text+0x3b): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x736): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x797): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x9c9): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0xa06): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0xbd6): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0xbe9): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0xc06): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0xc26): more undefined references to _inp' follow obj/ChipMapper.o:ChipMapper.c:(.text+0xe3c): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0xee5): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0xf3d): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0xf99): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x10d3): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x111d): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x11b1): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x11fb): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x127e): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1291): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1374): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x13cc): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1475): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x14bf): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x158b): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1769): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1811): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x186b): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1945): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1a02): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1ad3): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1b22): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1c63): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1d23): more undefined references to _inp' follow obj/ChipMapper.o:ChipMapper.c:(.text+0x1e71): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1e7f): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1e94): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1ea2): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1eb0): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x1ebe): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x1ecc): more undefined references to_inp' follow
obj/ChipMapper.o:ChipMapper.c:(.text+0x35b9): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x35f1): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x3672): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x36aa): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x371c): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x3759): more undefined references to_outp' follow
obj/ChipMapper.o:ChipMapper.c:(.text+0x3b12): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x3b92): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x3c12): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x3ca2): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x3d25): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x422f): more undefined references to_inp' follow
obj/ChipMapper.o:ChipMapper.c:(.text+0x4fc8): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x5076): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x50d7): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x5188): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x51e9): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x5297): more undefined references to_outp' follow
obj/ChipMapper.o:ChipMapper.c:(.text+0x59c2): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x59ea): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x5a12): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x5b06): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x5c02): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x5c85): more undefined references to_inp' follow
obj/ChipMapper.o:ChipMapper.c:(.text+0x7964): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x7ba5): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x7bf7): undefined reference to _outp' obj/ChipMapper.o:ChipMapper.c:(.text+0x7c01): undefined reference to_outp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x7c77): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x7cc6): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x7dce): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x7ddd): undefined reference to_inp'
obj/ChipMapper.o:ChipMapper.c:(.text+0x7dec): undefined reference to _inp' obj/ChipMapper.o:ChipMapper.c:(.text+0x7dfb): more undefined references to_inp' follow
collect2.exe: error: ld returned 1 exit status
make: *** [vgmplay] Error 1

Libretro port

Could you guys port vgmplay for the libretro API?

Targeting libretro gives you access to many platforms, like windows, linux, macosx, android, iOS, blackberry, Xbox, PS3... with a proper GUI (RetroArch has 4 GUI options). XMBC/Kodi has a libretro player too, as well the Gnome desktop via Gnome Games.

Some of the documentation:

http://www.libretro.com/index.php/api/
https://github.com/libretro/libretro.github.com/blob/master/documents/libretro.pdf
https://github.com/libretro/RetroArch/blob/master/libretro.h

Thanks!

VGMPlay as a GStreamer Element / Plugin

I asked about this on the website vgmrips, but thought it might also be worth trying to ask this here.

I worked on a patch for clementine recently that added VGM playback support ( clementine-player/Clementine#6089 ) but unfortunately GStreamer currently does not support VGM to the degree that VGMplay does due to using an out of date version of libgme. I looked into alternative solutions such as updating GME to @kode54 s standard (see wyatt8740/Game_Music_Emu#5 ) but it wouldn't solve some underlying issues with GME as a Gstreamer element (unable to playback VGZ format, currently supports formats like NSF which are unsafe / unreliable, doesn't fit Gstreamers pipeline approach.)

To put it bluntly, I'm trying to look into alternative solutions for VGM playback with Gstreamer. This would not only improve clementine player but could also give QT or any Gstreamer application the ability to accurately playback VGM/VGZ files. Would it be within the scope of VGMplay to provide an option to build a gstreamer plugin for VGM files in the same way Winamp is included with the compile tools?

Error openning Sound Device!

Can't get vgmplay to play anything. It will read the data from files and give you used chips, channels, game name etc but always finishes off with "Error openning Sound Device!"

I've tried tons of different files, building from git and the aur...same same. I can't find anything on how to set or pass args to denote the output device or subsystem.

VS 2017 Compile Error

1>------ Build started: Project: VGMPlay, Configuration: Debug Win32 ------
1>ChipMapper.c
1>2151intf.c
1>2203intf.c
1>2413intf.c
1>2608intf.c
1>2610intf.c
1>2612intf.c
1>262intf.c
1>3526intf.c
1>3812intf.c
1>8950intf.c
1>adlibemu_opl2.c
1>adlibemu_opl3.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\opl.c(1276): warning C4018: '<': signed/unsigned mismatch (compiling source file chips\adlibemu_opl2.c)
1>ay8910.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\opl.c(1276): warning C4018: '<': signed/unsigned mismatch (compiling source file chips\adlibemu_opl3.c)
1>ay8910_opl.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ay8910.c(446): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ay8910.c(451): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ay8910.c(492): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ay8910.c(497): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>ay_intf.c
1>c140.c
1>c352.c
1>c6280.c
1>c6280intf.c
1>dac_control.c
1>emu2149.c
1>emu2413.c
1>es5503.c
1>es5506.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\es5506.c(591): warning C4018: '>': signed/unsigned mismatch
1>fm.c
1>fm2612.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\es5506.c(703): warning C4018: '>': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\es5506.c(807): warning C4018: '>': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\es5506.c(870): warning C4013: 'printf' undefined; assuming extern returning int
1>fmopl.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fm.c(1763): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fm.c(1798): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fmopl.c(356): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>gb.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fmopl.c(523): warning C4244: 'initializing': conversion from 'double' to 'const UINT8', possible loss of data
1>iremga20.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fmopl.c(850): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fmopl.c(1399): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fmopl.c(1402): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fmopl.c(1407): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\fmopl.c(1409): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\gb.c(1197): warning C4018: '<': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\iremga20.c(220): warning C4013: 'printf' undefined; assuming extern returning int
1>k051649.c
1>k053260.c
1>k054539.c
1>multipcm.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\k053260.c(324): warning C4018: '>': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\k053260.c(332): warning C4018: '>': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(323): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(367): warning C4244: '=': conversion from 'float' to 'unsigned int', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(562): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(578): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(580): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(597): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(599): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(608): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(610): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(634): warning C4244: '=': conversion from 'const double' to 'unsigned int', possible loss of data
1>nes_apu.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(635): warning C4244: '=': conversion from 'const double' to 'unsigned int', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(643): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(645): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(651): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(626): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\multipcm.c(650): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
1>nes_intf.c
1>np_nes_apu.c
1>np_nes_dmc.c
1>np_nes_fds.c
1>okim6258.c
1>okim6295.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\okim6258.c(118): warning C4244: 'initializing': conversion from 'double' to 'int', possible loss of data
1>Ootake_PSG.c
1>panning.c
1>pokey.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\pokey.c(550): warning C4018: '<': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\pokey.c(1278): warning C4018: '<': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\pokey.c(1314): warning C4018: '<': signed/unsigned mismatch
1>pwm.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\pokey.c(1342): warning C4018: '<': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\pokey.c(1379): warning C4018: '<': signed/unsigned mismatch
1>qsound_ctr.c
1>qsound_intf.c
1>qsound_mame.c
1>rf5c68.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\qsound_ctr.c(227): warning C4018: '<': signed/unsigned mismatch
1>saa1099.c
1>scd_pcm.c
1>scsp.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\saa1099.c(456): warning C4013: 'printf' undefined; assuming extern returning int
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\scsplfo.c(141): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data (compiling source file chips\scsp.c)
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\scsp.c(609): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\scsp.c(618): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\scsp.c(632): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\scsp.c(1077): warning C4013: 'printf' undefined; assuming extern returning int
1>scspdsp.c
1>segapcm.c
1>sn76489.c
1>sn76496.c
1>sn76496_opl.c
1>sn764intf.c
1>upd7759.c
1>vsu.c
1>ws_audio.c
1>x1_010.c
1>ym2151.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\x1_010.c(163): warning C4013: 'printf' undefined; assuming extern returning int
1>ym2413.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(575): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(684): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(712): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(724): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(734): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(736): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>ym2413hd.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(1544): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(1546): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(2079): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2151.c(2404): warning C4101: 'chn': unreferenced local variable
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2413.c(286): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>ym2413_opl.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2413.c(453): warning C4244: 'initializing': conversion from 'double' to 'const UINT8', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2413.c(723): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2413.c(1393): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2413.c(1396): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2413.c(1401): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ym2413.c(1404): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>ym2612.c
1>ym3438.c
1>ymdeltat.c
1>ymf262.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(300): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>ymf271.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(467): warning C4244: 'initializing': conversion from 'double' to 'const UINT8', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(730): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(1363): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(1366): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(1371): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(1373): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(1711): warning C4013: 'printf' undefined; assuming extern returning int
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf262.c(2563): warning C4101: 'chn': unreferenced local variable
1>ymf278b.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(519): warning C4244: 'function': conversion from 'double' to 'int', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(563): warning C4244: '=': conversion from 'INT64' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(612): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(618): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(620): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(636): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(637): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(924): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(928): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(989): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(991): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(1100): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>ymz280b.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf271.c(1103): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>pt_ioctl.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(202): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(280): warning C4244: 'initializing': conversion from 'double' to 'const INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(288): warning C4244: 'initializing': conversion from 'double' to 'const INT32', possible loss of data
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(449): warning C4018: '>': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(469): warning C4018: '>': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(492): warning C4018: '>': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(648): warning C4018: '<': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymf278b.c(669): warning C4018: '<': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(380): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(425): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(435): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(491): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(517): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(522): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(580): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(606): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(611): warning C4018: '>=': signed/unsigned mismatch
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\chips\ymz280b.c(729): warning C4018: '<': signed/unsigned mismatch
1>Stream.c
1>VGMPlay.c
1>VGMPlayUI.c
1>VGMPlay_AddFmts.c
1>g:\work\dev\cyndanera\win32\games\paradise resort\project\vs\vgmplay\vgmplayui.c(716): warning C4996: 'GetVersionExA': was declared deprecated
1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\um\sysinfoapi.h(378): note: see declaration of 'GetVersionExA'
1>zlibd.lib(gzlib.obj) : error LNK2019: unresolved external symbol __imp___snprintf referenced in function _gz_open
1>zlibd.lib(gzwrite.obj) : error LNK2019: unresolved external symbol __imp___vsnprintf referenced in function _gzvprintf
1>G:\work\dev\cyndanera\win32\games\Paradise Resort\project\vs\VGMPlay\Debug_Win32\VGMPlay.exe : fatal error LNK1120: 2 unresolved externals
1>Done building project "VGMPlay.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Add more command-line options to vgmplay

I find myself needing to specify the number of loops and the fade-out time directly on the command-line. This could be accomplished either by implementing a couple of options for that, or just an option to specify the ini file. Ideally, both.

New Stable Release, Maybes?

@ValleyBell, would issuing a new stable release be feasible at some point? More than a year has passed since the last stable release (0.40.7). A significant number of commits have been pushed in the interim... and some of those commits are probably awesome. 🎵🎼🎵🎼🎵

If not, no biggie. I suspect you're probably devoting the majority of your attention to libvgm, which would make absolute sense. A portable shared library is the next giant leap for Linux and macOS VGM junkies. I'd sacrifice video game babies to the first GitHubber to author a libvgm plugin for Music Player Daemon (MPD), my preferred audio player backend. It is special.

Relatedly, I maintain a downstream Gentoo Linux package for VGMPlay. Installation reduces to:

  • Add raiagent, my third-party overlay.

      layman -a raiagent
    
  • Unmask the most recent stable release of vgmplay.

      echo '>=media-sound/vgmplay-0.40.7' >> /etc/portage/package.accept_keywords
    
  • Install vgmplay.

      emerge vgmplay
    

Three raucous cheers for ongoing VGM goodness!

VGMPlay Not Properly Handling Spaces in Filenames When Called from Script

Hi, I'm writing a script that generates a playlist in text and then reads the file line by line and plays each song listed with a different executable depending upon the file extension of the song in question. If the song ends in .mp3, it attempts to play it through mpg123. If the song ends in .vgz or .vgm, we want to play it through VGMPlay. The problem arises whenever a vgz or vgm with a space in the file name is played from that playlist file. Despite having the filename passed along to VGMPlay quoted, VGMPlay errors out on the file. If I call VGMPlay on the command line with the same song, it works fine. mpg123 does not display this sort of issue.

The purpose of all this is to have a script that plays music in the background for a Raspberry Pi.

Example playlist, test.m3u:
/home/pigaming/bgm/03 The King of Speed.vgz
/home/pigaming/bgm/3 yes.mp3

Script for playing:
while read p; do
if [[ "$p" == *.mp3 ]]
then
mpg123 "$p"
else
/opt/retropie/ports/vgmplay/vgmplay "$p"
fi
done <test.m3u

Check usage of printc

VGMPlayUI.c: Line 1:
// TODO: Check codepage stuff (SetConsoleCP) - it looks like I don't need printc anymore

Roadmap for supporting more sound chips

There are a few chips emulated by MAME/MESS but not yet supported by the current VGM spec. Let's use this issue to map what are the pending sound chips that we would like to add to vgmplay.

Add a license

Hello,

Could you add a LICENSE for VGM Play? Preferably something permissive like MIT license but of course feel free to choose something appropriate :)

Cheers,
Chris

Feature Request: display of currently used "Emulator Type" in UI while playing

Feature Request: display of currently used "Emulator type" in UI while playing. There is no indicator as to which core/emulator type you are using.

I'd suggest something like the following, "Emulator type" being the added info:

VGM Player
----------

Playlist File:  Sword of Vermilion.m3u
Playlist Entry: 6 / 33
File Name:      06 - Village A.vgz

Track Title:    Village A
Game Name:      Sword of Vermilion
System:         Sega Mega Drive / Genesis
Composer:       Hiroshi Kawaguchi
Release:        1989/12/16
Version:        1.50      Gain: 1.00    Loop: Yes (00:43.89)
VGM by:         Matthew Dickinson
Notes:

Used chips:     SEGA PSG, YM2612
Emulator type:  Nuked OPN2

Playing 2.54%   00:01.04 / 00:43.89 seconds

Distorted sound

Listening to Track 8 - Germany (Stage 4) of this playlist:
https://vgmrips.net/packs/pack/city-connection-arcade

It sound distorted. Compiling the code and using ./vgm2wav --loop-count 1 "08 Germany (Stage 4).vgz" citycon.wav the waveform looks strange.
tracks000

The dc-offset of that track also looks off.
For reference I've attached a direct sample from a YM2203 hardware from project RE:birth
hw.zip

Potential Security Issues

Hello,

We recently received multiple vulnerability disclosures against your repository. I couldn't find an e-mail to contact or a security process to follow, so created this issue instead.

If you would like me to e-mail over the details or put them on the GitHub Issue, I'm more than happy to facilitate this for you. Otherwise, you can access the advisories here and here.

It is private to you and the discloser of the report.

If you have any questions, let me know.

-- Jamie from huntr.dev

Phantasy Star II SSG-EG or whatever issue

The SSG-EG stuff is used heavily in Phantasy Star II, especially at the title screen. This sounds wrong in "in_vgm." At least, I think it does, because I'm not able to find a hardware recording. This is how I think it's supposed to sound:

https://www.youtube.com/watch?v=24JW1lxW-2U (Correct)

This is more like how "in_vgm" sounds:

https://www.youtube.com/watch?v=zi2RuDRTIWI (Incorrect)

Notice the weird oscillations in the second video when the background pad changes? Is this an issue with the imperfection of the VGM logging format, is something wrong with "nuked," or is the second video really how it sounded on hardware?

(Linux x86_64) "No OPL Chip detected!" but I have one.

I've been wanting to try out the "hardware FM" access vgmplay has under Linux but it keeps telling me "No OPL Chip detected!" even though I have one...

It's not a true CMI8738, it's a cheap Chinese made clone (but the actual CMI8738 chip appears to be real) that operates on a card around the size of a credit card and on the PCI Express 1x slot via a bridge chip.

The OPL3 works fine via ALSA MIDI playback:

$ aplaymidi -l
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 16:0    C-Media CMI8738                  C-Media CMI8738 MIDI
 17:0    OPL3 FM synth                    OPL3 FM Port
$ cat /proc/asound/hwdep 
00-00: OPL3 FM
$ cat /sys/module/snd_cmipci/parameters/fm_port 
904,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

904 is decimal for 0x388

The following is a snippet of $ cat /proc/ioports

0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus 0000:00
  c000-cfff : PCI Bus 0000:06
    c000-c0ff : 0000:06:00.0
      c000-c0ff : r8169
  d000-dfff : PCI Bus 0000:03
    d000-dfff : PCI Bus 0000:04
      d000-d0ff : 0000:04:00.0
        d000-d0ff : CMI8738-MC6
      d100-d13f : 0000:04:00.1
  e000-efff : PCI Bus 0000:01
    e000-e0ff : 0000:01:00.0

And a snippet of lspci -v

04:00.0 Multimedia audio controller: C-Media Electronics Inc CMI8738/CMI8768 PCI
 Audio (rev 10)
        Subsystem: C-Media Electronics Inc CMI8738/C3DX PCI Audio Device
        Flags: bus master, stepping, medium devsel, latency 32, IRQ 34
        I/O ports at d000 [size=256]
        Capabilities: [c0] Power Management version 2
        Kernel driver in use: snd_cmipci

04:00.1 Communication controller: C-Media Electronics Inc CM8738 (rev 20)
        Subsystem: C-Media Electronics Inc CM8738
        Flags: medium devsel, IRQ 10
        I/O ports at d100 [size=64]
        Capabilities: [40] Power Management version 2

I've tried setting FMPort= to "0x388" and "0xD388" yet it fails. Am I doing something wrong? Is the ALSA MIDI getting in the way even though nothing is communicating to it?

Improve the project description in the vgmspec171.txt file

Current descrition reads like:

"VGM (Video Game Music) is a sample-accurate sound logging format for the Sega
Master System, the Sega Game Gear and possibly many other machines (e.g. Sega
Genesis)."

But vgmplay actually supports a whole wider set of sound chips for several kinds of machines, including most arcade machines supported by MAME. It seems like the current description was written back when the program was in its early development stage. If the original author (or someone else) could confirm that, this may be an interesting fact about the development history of the program and a mention to it could possibly be kept in the file.

MSVC2019 build fails

Summary

The current build instructions do not list a key prerequisite and this causes current MSVC versions to fail compiling later builds. Given that there have been no new releases since 2018 and significant changes have happened since then, the readme ought to be updated to reflect this common difficulty many will have (since I doubt most people are using MSVC 6.0 in 2020, the software is not free and the installation process on Windows 10 is a nightmare --> https://www.codeproject.com/Articles/1191047/Install-Visual-Studio-on-Windows).

Errors/attempts

Version used: latest commit as of today --> ead5e58

I tried both methods that were provided to me by the readme as is. Upon opening it says the 2010 build tools cannot be located. I did two tests, running it without upgrading the build tools configuration, and running it with upgrading the build tools configuration (as the prompt from MSVC2019 told me I should). Each time I unzipped a fresh folder to be sure that it was a fresh run. Here's the logs from each:

Just running "build solution" after loading the vcprojx file as instructed like normal:

1>------ Build started: Project: VGMPlay, Configuration: Debug Win32 ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(390,5): error MSB8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build using the v100 build tools, please install Visual Studio 2010 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".
1>Done building project "VGMPlay.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

With the build being upgraded as prompted by MSVC2019:

1>------ Build started: Project: VGMPlay, Configuration: Debug Win32 ------
1>ChipMapper.c
1>2151intf.c
1>2203intf.c
1>2413intf.c
1>2608intf.c
1>2610intf.c
1>2612intf.c
1>262intf.c
1>3526intf.c
1>3812intf.c
1>8950intf.c
1>adlibemu_opl2.c
1>adlibemu_opl3.c
1>ay8910.c
1>ay8910_opl.c
1>ay_intf.c
1>c140.c
1>c352.c
1>c6280.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\opl.c(1276,27): warning C4018: '<': signed/unsigned mismatch (compiling source file chips\adlibemu_opl2.c)
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ay8910.c(446,70): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ay8910.c(451,33): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ay8910.c(492,68): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ay8910.c(497,48): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\opl.c(1276,27): warning C4018: '<': signed/unsigned mismatch (compiling source file chips\adlibemu_opl3.c)
1>c6280intf.c
1>dac_control.c
1>emu2149.c
1>emu2413.c
1>es5503.c
1>es5506.c
1>fm.c
1>fm2612.c
1>fmopl.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\es5506.c(591,3): warning C4018: '>': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\es5506.c(703,3): warning C4018: '>': signed/unsigned mismatch
1>gb.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\es5506.c(807,3): warning C4018: '>': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\es5506.c(870,12): warning C4013: 'printf' undefined; assuming extern returning int
1>iremga20.c
1>k051649.c
1>k053260.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fmopl.c(356,1): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\gb.c(1197,47): warning C4018: '<': signed/unsigned mismatch
1>k054539.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\iremga20.c(220,12): warning C4013: 'printf' undefined; assuming extern returning int
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fm.c(1763,54): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fmopl.c(523,1): warning C4244: 'initializing': conversion from 'double' to 'const UINT8', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fm.c(1798,86): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fmopl.c(850,22): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fmopl.c(1399,63): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fmopl.c(1402,64): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fmopl.c(1407,59): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\fmopl.c(1409,50): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>multipcm.c
1>nes_apu.c
1>nes_intf.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\k053260.c(324,21): warning C4018: '>': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\k053260.c(332,19): warning C4018: '>': signed/unsigned mismatch
1>np_nes_apu.c
1>np_nes_dmc.c
1>np_nes_fds.c
1>okim6258.c
1>okim6295.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(323,1): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(367,34): warning C4244: '=': conversion from 'float' to 'unsigned int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(562,48): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(578,43): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(580,28): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(597,44): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(599,31): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(608,44): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(610,31): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(634,78): warning C4244: '=': conversion from 'const double' to 'unsigned int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(635,84): warning C4244: '=': conversion from 'const double' to 'unsigned int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(643,57): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(645,58): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(651,53): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(626,1): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\multipcm.c(650,1): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data
1>Ootake_PSG.c
1>opll.c
1>opm.c
1>panning.c
1>pokey.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\pokey.c(550,2): warning C4018: '<': signed/unsigned mismatch
1>pwm.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\okim6258.c(118,1): warning C4244: 'initializing': conversion from 'double' to 'int', possible loss of data
1>qsound_ctr.c
1>qsound_intf.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\pokey.c(1278,40): warning C4018: '<': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\pokey.c(1314,40): warning C4018: '<': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\pokey.c(1342,40): warning C4018: '<': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\pokey.c(1379,40): warning C4018: '<': signed/unsigned mismatch
1>qsound_mame.c
1>rf5c68.c
1>saa1099.c
1>scd_pcm.c
1>scsp.c
1>scspdsp.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\saa1099.c(456,11): warning C4013: 'printf' undefined; assuming extern returning int
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\qsound_ctr.c(227,28): warning C4018: '<': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\scsplfo.c(141,1): warning C4244: 'initializing': conversion from 'double' to 'float', possible loss of data (compiling source file chips\scsp.c)
1>segapcm.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\scsp.c(609,27): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\scsp.c(618,33): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\scsp.c(632,36): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\scsp.c(1077,12): warning C4013: 'printf' undefined; assuming extern returning int
1>sn76489.c
1>sn76496.c
1>sn76496_opl.c
1>sn764intf.c
1>upd7759.c
1>vsu.c
1>ws_audio.c
1>x1_010.c
1>ym2151.c
1>ym2413.c
1>ym2413_opl.c
1>ym2413hd.c
1>ym2612.c
1>ym3438.c
1>ymdeltat.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\x1_010.c(163,1): warning C4013: 'printf' undefined; assuming extern returning int
1>ymf262.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym3438.c(1532,128): warning C4244: '=': conversion from 'double' to 'Bit32s', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym3438.c(1533,128): warning C4244: '=': conversion from 'double' to 'Bit32s', possible loss of data
1>ymf271.c
1>ymf278b.c
1>ymz280b.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(575,17): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(684,52): warning C4244: '=': conversion from 'double' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(712,60): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(724,60): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(734,35): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(736,39): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2413.c(286,1): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(1544,65): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(1546,65): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(2079,22): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2151.c(2404,9): warning C4101: 'chn': unreferenced local variable
1>dbus_stub.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(300,1): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>mmkeys_Win.c
1>pt_ioctl.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2413.c(453,1): warning C4244: 'initializing': conversion from 'double' to 'const UINT8', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2413.c(723,22): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(467,1): warning C4244: 'initializing': conversion from 'double' to 'const UINT8', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(730,22): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(202,1): warning C4244: 'initializing': conversion from 'double' to 'const UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2413.c(1393,65): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2413.c(1396,66): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2413.c(1401,61): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ym2413.c(1404,52): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(519,48): warning C4244: 'function': conversion from 'double' to 'int', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(280,1): warning C4244: 'initializing': conversion from 'double' to 'const INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(563,63): warning C4244: '=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(612,75): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(618,82): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(618,159): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(620,78): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(620,154): warning C4244: 'function': conversion from 'UINT64' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(636,38): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(637,38): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(288,1): warning C4244: 'initializing': conversion from 'double' to 'const INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(924,80): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(928,80): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(449,22): warning C4018: '>': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(989,81): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(469,22): warning C4018: '>': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(991,81): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(492,22): warning C4018: '>': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(1100,80): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf271.c(1103,80): warning C4244: '+=': conversion from 'INT64' to 'INT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(648,17): warning C4018: '<': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf278b.c(669,16): warning C4018: '<': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(381,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(427,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(437,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(493,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(519,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(524,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(582,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(608,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(613,17): warning C4018: '>=': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymz280b.c(731,18): warning C4018: '<': signed/unsigned mismatch
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(1363,65): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(1366,66): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(1371,61): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(1373,52): warning C4244: '=': conversion from 'double' to 'UINT32', possible loss of data
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(1711,13): warning C4013: 'printf' undefined; assuming extern returning int
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\chips\ymf262.c(2563,6): warning C4101: 'chn': unreferenced local variable
1>Stream.c
1>VGMPlay.c
1>VGMPlayUI.c
1>VGMPlay_AddFmts.c
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\VGMPlayUI.c(768,2): warning C4996: 'GetVersionExA': was declared deprecated
1>zlibd.lib(gzlib.obj) : error LNK2019: unresolved external symbol __imp___snprintf referenced in function _gz_open
1>zlibd.lib(gzwrite.obj) : error LNK2019: unresolved external symbol __imp___vsnprintf referenced in function _gzvprintf
1>C:\Users\aberu\Downloads\vgmplay-master\VGMPlay\Debug_Win32\VGMPlay.exe : fatal error LNK1120: 2 unresolved externals
1>Done building project "VGMPlay.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

So the first error indicated I need to upgrade the project to be able to build it. So I did that next time, and the errors I got showed 2 linker errors (LNK2019 - https://docs.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk2019?f1url=%3FappId%3DDev16IDEF1%26l%3DEN-US%26k%3Dk(LNK2019)%26rd%3Dtrue&view=msvc-160) and 2 unresolved externals (LNK1120 - https://docs.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk1120?f1url=%3FappId%3DDev16IDEF1%26l%3DEN-US%26k%3Dk(LNK1120)%26rd%3Dtrue&view=msvc-160).

I have all of the MS VC redistributals from the chocolatey vcredist-all package which should cover all those bases. I'm now downloading and installing the Win7 SDK (https://www.microsoft.com/en-us/download/details.aspx?id=8279) just to cover my bases... and I got the same errors. Looking through the issues yields this identical problem to mine:

#44

The compilation instructions do not list zlib as a prerequisite, or any prerequisites, which can unnecessarily lead to confusion.

I'll now attempt to, as those instructions point out, compile zlib on windows 10 for use in MSVC2019 to see if I can get anywhere. If I do, I'll report back.

Error opening Sound Device!

Hi I just learned about this software today after wondering how to play vgz files I managed to build the files on linux and put them in the proper place to work. However when loading them an error appeared which was easy to get rid of by setting libao to pulse instead of alsa. But after that it still displays this error.

https://puu.sh/xAaLi/2e39f9b3d5.png

My OS is arch linux, if i'm missing something then that is probably it and if its a bug then hurray I found one I guess. Also since I built it from source it isn't an old bug.

Hope you guys can help, have a good day and I hope this is a bug as I have looked but to no avail.

Disable or Reimplement PortTalk features

Commit 705d7d0 removed PortTalk-related source files. The files were removed because their copyright holder explicitely states in the header of these files that their distribution is forbidden. Thus, our usage and distribution of those files could potentially be understood as copyright infringiment.

As a side effect, the removal of those headers seem to have broken the build for Windows. I haven't tested the windows build, but I can predict it is broken based on the usage of these functions in VGMPlay.c:

unsigned char OpenPortTalk(void);
void ClosePortTalk(void);

In order to fix the issue, we may consider eighter removing the feature or reimplementing the functionality provided by the concerning PortTalk source files.

update all Nuked FM-cores

Nuked OPL3 (YMF262) & OPN2 (YM3438/YM2612) FM-chip emulation cores
are the most accurate according to many tests on vogons.org

NukeYKT (developer) page: http://nukeykt.retrohost.net/

OPL3 emulation core, current version 1.8:
https://github.com/chocolate-doom/chocolate-doom/blob/master/opl/opl3.c
https://github.com/chocolate-doom/chocolate-doom/blob/master/opl/opl3.h
DOSBOX-ECE (Enchanced Community Edition) use it:
https://www.vogons.org/viewtopic.php?f=41&t=49327&start=20#p661417

OPN2 emulation core, current version 1.0.9:
https://github.com/nukeykt/Nuked-OPN2
Genesis-Plus-GX emulator (by EkeEke) use it too, as well, as mame core.

Any hope you'll update Nuked OPN2 and add Nuked OPL3 to vgmplay?
Thank you.

Fix proposal for malloc.h, wchar.h

Hello,

I would like to make a PR to fix some issues but, since I'm not an expert in C, I would like to know if my solutions work for you (but maybe you don't mind since you've planned to re-write it all anyway...)

  1. For OSX I got to replace all the #include <malloc.h> by #include <sys/malloc.h>. Is it okay if I fix it with a conditional #ifdef MACOSX?
  2. With some compiler (clang) I got to add #include <wchar.h> in Stream.c. Is it okay if I simply add this include in Stream.c? It works normally in gcc.

Thanks

Allow looping VGM's endlessly that do not have loop points?

vgmplay seems to just stop\exit when it hits the EOF of a song that has no loop defined in the metadata, even with MaxLoops set to 0.

Could there be a way to add it so that it loops all VGM's regardless of there being a loop or not? Are there playback concerns to address adding this feature? (e.g. continuing notes already playing or sending resets, etc)

HuC6280 Mednafen core support

First off I'd like to apologize since I wasn't sure if I should request this here since ValleyBell is already busy with the libvgm rewrite.

I was wondering if HuC6280 / HuWSG could get the Mednafen soundcore added as to my research it seems to be the most accurate soundcore for this.
Also seeing as vsu.c uses the Mednafen core for sound emulation, I think it is no strange code hopefully.

Not necessary, but the HuC6280 actually has a revision that was meant to fix some issues with sound, which is called HuC6280A. Within Mednafen's soundcode these are mentioned in PCE_PSG.cpp as well. Support for this would be nice, but not necessary as I said.

Unable to open sound device on Ubuntu/Trisquel

I can only export to wave and listen using some other sound player. I cannot listen to VGM files directly because vgmplay says it is unable to open the sound device.

I am running Trisquel GNU/Linux but ValleyBell mantions in the VGMPlay.txt file that it also does not work on Ubuntu.

On the other hand, I was able once to make it run on a computer running Ubuntu. I just don't know which specific version of the operating system it was.

I consider this issue to be critical because it significantly reduces the usefulness of the program.

vgmplay not running fine from caja/nautilus script

when i try to run vgmplay from caja/nautilus script (context menu over a vgm file in the file manager), it asks for the filename, when it was supposed to start playing automatically

below is the script i have at ~/.config/caja/scripts/ :

#!/bin/bash
filesall=""
while [ $# -gt 0 ]
  do
    files=`echo "$1" | sed 's/ /\?/g'`
    filesall="$files $filesall"
    shift
  done
killall vgmplay &
mate-terminal -e vgmplay $filesall&

do someone know what is going on there?

and previously, it was complaining about a missing .ini file - why wasn’t that .ini file automatically created when it was found missing?

thanks in advance! :)

Allow panning even for stereo-capable chips in in_vgm

Many games only use mono, even though stereo was a feature of the chip, so I'd like to be able to configure my own panning. This would require a check box to first disable any panning that could already be in a song (per-chip), and then allow the user to override. There's already a volume adjustment slider in case certain panning configurations would introduce clipping for any particular song.

Nuked OPN2 unexpected sound when plays some tracks

OS: openSUSE Tumbleweed 20190823

I've discovered a problem when uses Nuked OPN2 (not MAME or Gens) with two tracks of Rocket Knight Adventures (stage 6 and stage 7), tested with log to WAV and playback. It sounds only some sounds from a channel. Also I've discovered that happens with all the tracks of that game.

I attach a ZIP file with the .ini file when I discovered the problem with both files directly from log to WAV. And another ZIP file with the expected sound to output using MAME (log to WAV) as MP3.

NOPN2.zip
Expected sounds.zip

X-Men COTA ending music plays incorrectly with QSound HLE

This file X-Men_-_Children_of_the_Atom_(CP_System_II)\28 Ending -Love And Friendship-.vgz plays incorrectly, with cymbals playing instead of a horn/brass sample. The issue seems to affect channel 1 only.

An updated pack has been submitted to vgmrips forum but not yet published.

About OPL3 Hardware Passthrough

My computer is Windows 7 32bit and I have a YMF724 sound card installed (the drivers are installed correctly), I want to listen to OPL3 VGM using the hardware passthrough feature.
So I installed porttalk22 and used
AllowIo /a.
At this point, I added the following statements to the ini configuration files of both midiplay and vgmplay
FMPort=220
midiplay can correctly identify OPL3 hardware and play midi. (The third line of the console shows that OPL3 is recognized)
However, vgmplay does not seem to use hardware pass-through when playing the vgm of the OPL series, and there is no message similar to OPL3 being recognized, but still uses software simulation (I can see whether it belongs to pass-through by checking the volume change of the Windows mixer .)

ym2151.c clipping

Hello. When using the following voice with the ym2151 core:

{
/* AR D1R D2R  RR  D1L TL KS MUL DT1 DT2 AME */
   31,  0,  0, 15, 0,  0, 0,  1,  0,  0,  0,
   31,  0,  0, 15, 0,  0, 0,  1,  0,  0,  0,
   31,  0,  0, 15, 0,  0, 0,  1,  0,  0,  0,
   31,  0,  0, 15, 0,  0, 0,  1,  0,  0,  0,
/* CON FL OP */
   7,  0, 15
}

which is the loudest sine wave I could get, you get clipping. Try values 1,3,7 and 15 for OP (operator mask). This is due to the code:

	if (chanout[chan] > +16384)			chanout[chan] = +16384;
	else if (chanout[chan] < -16384)	chanout[chan] = -16384;

in chips/ym2151.c:1755 and chips/ym2151.c:1821

If you compare to XM6 Pro-68k, this clipping does not occur. I don't think it happens on the real OPM either.

Changing FINAL_SH doesn't help either, it just makes the signal smaller but still clipped.

Please either remove the clipping check or define it as MINOUT and MAXOUT. Either way, define it as a macro instead of raw numbers.

Thanks!

It's not currently possible to run vgmplay as background process

Steps to reproduce:
Under Linux terminal run:
vgmplay tune.vgz &

Expeted: tune.vgz should be now playing in background
Actual: vgmplay shows only pune.vgz info and then stops

VGM Player
----------

File Name:	tune.vgz

Track Title:	Title
Used chips:	YMF278B  

Warning! OPL4 Sample ROM (yrw801.rom) not found!

[1]+  Stopped                 vgmplay ./tune.vgz

Organize code into several projects

move the common code into library, called libVGM, then make vgmplay, in_vgm and later a foobar plugin and the VGM tools as well into their own little projects.

Add vgm2flac with tag support (or something similar)

Currently vgm2wav is already really nice, what would make things even better if it was possible to output to FLAC (or any other lossless format, conversion can be done afterwards) and that meta info from the vim file is written to the tags in the output file...

Load VGM Data from memory instead of a file

Hello

This is not a real issuse more a request for a needed function.

Thanks for this great library. Is there a chance that you add a function to load a VGM file from memory. Most other playback libraries offer such a thing and it is great help for a front end app. This helps with loading VGM from zipfiles.

Of course, I dont know how difficult this would be to realize but can you consider it?

Best regards
Bastian

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.