<html><head>
<title>VGM input plugin documentation</title>
<script>
function showhistory()
{
document.getElementById("oldhistory").style.display = 'block';
document.getElementById("histlink").style.display = 'none';
return false;
}
</script>
<style>
body {
background: #006699;
color: white;
font-family: lucida grande, garamond, verdana, henlvetica, arial, sans-serif;
font-size: small;
width:40em;
padding:2em;
margin-left:4em;
border:1px solid black;
}
h1 {
background:#eee;
color:black;
padding:2em;
}
h2 {
padding-left:0.5em;
background:#00334c;
}
h3 {
padding-left:0.5em;
background:#004c72;
}
h4 {
padding-left:0.5em;
border-top:2px solid #004c72;
border-bottom:2px solid #004c72;
}
a {
color: white;
text-decoration: underline;
font-weight: bold;
}
.key {
color:black;
border: 2px outset #ddc;
background: #ddc;
padding-left:0.2em;
padding-right:0.2em;
white-space: nowrap;
}
.menu {
color:black;
background: #eee;
border-left: 2px outset #eee;
border-right: 2px outset #eee;
border-top: 1px dotted #eee;
border-bottom: 1px dotted #eee;
padding-left:1em;
padding-right:1em;
white-space: nowrap;
}
.button {
color:black;
border: 2px outset #ccc;
background: #ccc;
padding-left:0.2em;
padding-right:0.2em;
white-space: nowrap;
}
fieldset {
border: 2px groove #006699;
margin-top:1em;
margin-left:3em;
margin-right:3em;
padding: 0.5em;
}
legend {
}
tt {
border:1px solid black;
color:black;
background:#eee;
font-size:medium;
white-space: nowrap;
padding-left:0.2em;
padding-right:0.2em;
}
div.control {
margin-top:1em;
margin-bottom:0.5em;
}
div.quote {
border: 1px solid #555;
background: #eee;
color: #555;
padding: 0.5em;
margin-top: 1em;
margin-bottom: 1em;
font-style:italic;
}
li {
margin-top:0.5em;
margin-bottom:0.5em;
}
</style>
</head>
<body>
<h1>VGM input plugin 0.35</h1>
<h2>Table of Contents</h2>
<ul>
<li><a href=#problems>Problems</a></li>
<li><a href=#introduction>Introduction</a></li>
<li><a href=#credits>Credits</a></li>
<li><a href=#dialogueboxes>Dialogue Boxes</a></li>
<li><a href=#aaq>Actually Asked Questions</a></li>
<li><a href=#howtoplay>How to play VGM files direct from your webpage</a></li>
<li><a href=#knownissues>Known issues</a></li>
<li><a href=#history>History</a></li>
</ul>
<a name="problems"></a>
<h2>Problems</h2>
Here are the things that can go wrong, right at the start so you can
find them easily.
<ol>
<li>VGM files play too fast
<p>
If you have in_gym then disable its VGM handling. It is weird.
<p>
Look at the 50/60Hz options in the config screen - maybe you're used to 50Hz music?
<li>Anything else
<p>
Please contact me!
</ol>
<a name="introduction"></a>
<h2>Introduction</h2>
This is a <a href=http://www.winamp.com>Winamp</a> (2.xx and 5.xx) plugin for playing VGM files. VGM is a
standard for logging of SN76489/SN76496, YM2413, YM2612 and YM2151
music chip data, originated by Dave, allowing various systems' games'
music to be stored. See <a href=http://www.smspower.org/music>http://www.smspower.org/music</a> for more
information, and to download VGM music files.
<p>
Open this URL in Winamp to hear a demo:
<p>
<a href=http://www.smspower.org/music/vgm/demo/Golvellius.m3u>http://www.smspower.org/music/vgm/demo/Golvellius.m3u</a>
<p>
To use: put in_vgm.dll in Winamp's <tt>plugins\</tt> folder (usually <tt>C:\Program Files\Winamp\plugins\</tt>), and restart Winamp. If
you got the self-installing version then it should already be working.
<p>
Load .vgm or .vgz files in Winamp; go to the "File types" preferences
page to associate these extensions:
<ol>
<li>Open the Preferences dialogue box (press <span class=key>Ctrl+P</span>, or right-click and
choose Options -> Preferences...)
<li>Choose "File types" from the tree on the left (it's the second item
unless Winamp has changed since I wrote this)
<li>Make sure "vgm" and "vgz" are selected in the "Associated extensions"
list (if they aren't in the list it's because you have another buggy
plugin installed)
</ol>
Be sure to check out the file info and plugin configuration dialogues.
<a name="credits"></a>
<h2>Credits</h2>
<ul>
<li>The YM2413 emulation engine is EMU2413 by Mitsutaka Okazaki, which is
part of <a href=http://dsa.sakura.ne.jp/index.php?MSXplug>MSXplug</a>.
<li>The PSG engine is by me.
<li>The YM2612 engine is from <a href=http://gens.consolemul.com>Gens by
Stephane Dallongeville</a>.
<li>The YM2151 engine is from <a href=http://www.mame.net>MAME</a>
and was added by BlackAura.
<li><a href=http://www.zlib.org>zlib</a> decompression is by Jean-loup
Gailly and Mark Adler.
</ul>
<a name="dialogueboxes"></a>
<h2>Dialogue boxes</h2>
<h3>VGM file & GD3 tag information</h3>
To open:
<ul>
<li>In the main window, press <span class=key>Alt+3</span>; or
double-click on the track title; or right-click and choose
<span class=menu>View file info...</span>.
<li>In the playlist editor, select some files and press
<span class=key>Alt+3</span>; or right-click and choose
<span class=menu>File info</span>; or press the
<span class=button>Misc</span> button, choose
<span class=menu>File info</span> and then
<span class=menu>File info...</span>.
<li>In the media library, select some files and press
<span class=key>Alt+3</span>; or right-click and choose
<span class=menu>View file info...</span>.
</ul>
This shows you information about the file and, if it has a GD3
information tag, it shows you information from there too. It's similar
to the ID3 information box for MP3s, except that you can't edit the GD3
tag from within Winamp.
<p>
Choose <span class=radio>English</span> or <span class=radio>Japanese</span>
to display the GD3 information for that language, if available.
<p>
If you see something like "????" for a GD3 entry then your version of
Windows doesn't support Unicode, or translation from Unicode to a valid
MBCS. If that makes no sense to you, you probably don't care about it.
Windows XP is generally OK so long as you have east asian fonts installed.
<p>
Click on <span class=button>View GD3 in browser</span> to open either
"Now Playing" (the MiniBrowser in older versions of Winamp) or your
regular web browser (depending on the setting, see below), with a page
showing the GD3 tag. Chances are, if you have the necessary
fonts installed, this will be able to display the Unicode text properly
on older versions of Windows.
<p>
Click on <span class=button>Configure plugin...</span> to open the plugin configuration
dialogue box.
<p>
If you open this dialogue box for several files in the playlist editor,
it will appear once for each file. Press <span class=key>Esc</span> or
close the window using the frame controls to abort showing it once per file.
<h3>VGM plugin configuration</h3>
To open:
<ul>
<li>Open the "VGM file & GD3 tag information" dialogue box; then press the
<span class=button>Configure plugin...</span> button or press
<span class=key>Alt+P</span>.
<li>Or open the Winamp Preferences dialogue box (Right-click ->
<span class=menu>Options</span> -> <span class=menu>Preferences...</span>;
or press <span class=key>Ctrl+P</span>), choose the
Plug-ins -> Input page, then double-click on the "VGM input plugin
v0.xx [in_vgm.dll]" item, or select it and click on the <span class=button>Configure</span>
button.
</ul>
<h4>Playback tab</h4>
<fieldset><legend>Looping</legend>
<div class=control>Repeat looped section <input size=3> times</div>
Choose how many times to play the looped section in a VGM file, if
it has one. A value of 0 will play through the looped section once.
<div class=control>Then fade out over <input size=3> ms</div>
When repeating looped sections, there is no "end" to the music.
Enter a time in ms (1000ms = 1s) over which the music will fade out
after looping the desired number of times. A setting of 0 will give
no fadeout.
<div class=control><input type=checkbox>Loop forever</div>
Ignore the looping counter and loop forever. Note that this disables
seeking (in Winamp) and thus also the "<input type=checkbox>Immediate update" option.
</fieldset>
<fieldset><legend>Pause after non-looped tracks</legend>
<div class=control>Pause <input size=3> ms</div>
Even when a track does have an end, it does not sound good if the
next track follows on immediately. Enter a time in ms (1000ms = 1s)
to pause at the end of each track.
</fieldset>
<fieldset><legend>Playback rate</legend>
<div class=control><input type=radio>Recorded rate</div>
If this is selected, all VGM v1.01+ files will be played at the
rate specified in the file. VGM 1.00 files will be played at 60Hz.
<div class=control><input type=radio>50Hz<br><input type=radio>60Hz</div>
If 50Hz or 60Hz is selected, all files will be played at that rate -
50Hz corresponds to PAL/SECAM home systems used in Europe and
Australia/NZ; 60Hz corresponds to NTSC/PAL-M systems used in Asia
and the Americas.
<div class=control><input type=radio>Other: <input size=3> Hz</div>
If you choose this you can enter any rate, to play files extra
slowly or quickly. Extreme values and fractional values are not
allowed. Note that seeking is buggy with unusual rates.
<p>
The effect will only be heard when you restart the track, or when the
next track starts.
</fieldset>
<fieldset><legend>Volume, muting and panning</legend>
<div class=control><input type=checkbox>Overdrive</div>
Amplifies all sound to levels that are in danger of being clipped,
but are similar to regular MP3s so visualisations work better.
<div class=control><input type=checkbox>Keep muting when track changes</div>
If checked, per-muting will remain when the track changes; otherwise
all channels are unmuted.
<div class=control><input type=checkbox>Randomise panning on track start</div>
For channels with configurable fake stereo, this will apply a
Gaussian randomisation to the stereo panning for every channel.
</fieldset>
<h4>GD3 tags tab</h4>
<fieldset><legend>Data formatting</legend>
<div class=control><input type=checkbox>Prefer Japanese text</div>
If checked, the media library and advanced title formatting will
use Japanese text if available, otherwise English. If unchecked,
English text is used in preference to Japanese.
<div class=control><input type=checkbox>Append (FM) to game name for YM2413</div>
To make it easier to tell FM and PSG soundtracks apart, this will
make the returned game name (given as the album name) end with
"(FM)". Note that some emulators incorrectly specify an FM clock in
the VGM file, causing this to be displayed wrongly.
</fieldset>
<fieldset><legend>File Type</legend>
<div class=editbox>Return file type ID</div>
Winamp's Media Library comes by default with filtered views for
"Audio" and "Video", as well as other views for things like
recently played files. If you right-click on the tree you can edit
them and add new views for more advanced filters.
<p>
If, like me, you don't want VGMs to play mixed in with your regular
MP3s, you can use this to make it very easy to filter VGMs out of
the "Audio" view and into another. Here's the procedure:
<ol>
<li>Change the number to another value (I use <tt>262144</tt>)
<li>Add a new view to the Media Library
<li>On the advanced tab, change the query to <tt>TYPE=262144</tt> (or whatever
number you chose)
<li>Refresh your Media Library from the <span class=button>Library</span> button.
</ol>
Note that Winamp does not define meanings for values other than 0
(audio) and 1 (video). It might in later versions, so try to use a
value that is unlikely to be used in the future (2 is more likely
to be used than 262144).
</fieldset>
<fieldset><legend>Now Playing</legend>
<div class=control><input type=checkbox>Display GD3 tags as HTML in "Now Playing"</div>
If checked, displaying a GD3 tag as HTML (using the <span class=button>View in
browser</span> button described above) will use Now Playing. If unchecked,
it will use your regular web browser.
<div class=control><input type=checkbox>Display them automatically</div>
If checked, GD3 tags will automatically be displayed in Now Playing
when tracks start. This will also block most other parts of Winamp
from changing the Now Playing page while a VGM file is playing.
<div class=control><input type=checkbox>Open "Now Playing" if it is closed</div>
If checked, when auto-displaying GD3 tags, Now Playing will be
opened if it is closed.
<p>
Note that in older versions of Winamp, the MiniBrowser is the
equivalent of Now Playing. Also, in versions of Winamp since 5.22,
Now Playing does not support this feature; it may return in later versions.
</fieldset>
<fieldset><legend>Legacy title formatting</legend>
Enter text to control what title Winamp shows for the file. Enter
special codes like <tt>%t</tt> to insert various GD3 entries. If the file
has no GD3 tag then the filename will be used as the title.
<p>
Winamp 5's Advanced Title Formatting bypasses this, instead using
data from the Media Library.
</fieldset>
<h4>PSG tab</h4>
<fieldset><legend>Chip control</legend>
You can choose the relative volume of the chip (default: 100) and
globally enable/disable it.
</fieldset>
<fieldset><legend>Channel control</legend>
If the current track includes PSG data, the checkboxes will allow you
to enable and disable individual sound channels.
<p>
The trackbars allow you to apply "fake" stereo to the channels. This
can result in a more pleasing sound but is totally inaccurate :) The
original chip was strictly mono.
<p>
That is, apart from the Game Gear's extended version which allows
"digital" stereo (where the sound is either 100% left, centre or 100%
right). If the track includes such data then the "fake" stereo for the
affected channel is overridden.
<p>
Press the <span class=button>Centre all</span> button to reset all channels to a centre
position, or press the <span class=button>Randomise</span> button to position
them according to a random Gaussian distribution.
</fieldset>
<fieldset><legend>Emulation</legend>
<div class=control><input type=checkbox>Smooth PSG vol curve</div>
Applies a smooth logarithmic volume curve to the PSG volume levels;
if unchecked, values taken from a real SMS's output are used
instead. These values have reduced definition at high volume levels.
</fieldset>
<h4>YM2413 tab</h4>
<fieldset><legend>Chip control</legend>
You can choose the relative volume of the chip (default: 100) and
globally enable/disable it.
</fieldset>
<fieldset><legend>Channel control</legend>
If the current track includes YM2413 data, the checkboxes will allow you
to enable and disable individual sound channels. You can also apply
"fake" stereo as above.
</fieldset>
<fieldset><legend>Emulation</legend>
<div class=control><input type=checkbox>High quality YM2413</div>
This runs the YM2413 engine at the true clock rate and resamples to
44100Hz. The effect is marginal.
</fieldset>
<h4>YM2612/YM2151 tab</h4>
<fieldset><legend>YM2612 chip control</legend>
You can choose the relative volume of the chip (default: 25)
and globally enable/disable it.
</fieldset>
<fieldset><legend>YM2612 channel control</legend>
If the current track includes YM2612 data, the checkboxes will allow you
to enable and disable individual sound channels. "Fake" stereo is
unavailable because the YM2612 supports real stereo.
</fieldset>
<fieldset><legend>YM2151</legend>
Relative volume and global enabling as above.
</fieldset>
<h4>Bottom part of window</h4>
<div class=control><input type=checkbox>Immediate update</div>
If this is selected, the effect of changing some of the settings will
be instant, but it may introduce jumps or pauses to the sound,
depending on the output plugin and the type of VGM file playing. If
it is not selected then the effect will take the length of the output
buffer (usually two seconds) to be heard.
Note that cancelling this dialogue box does *not* restore the previous
settings for many options.
<a name="aaq"></a>
<h2>Actually asked questions</h2>
<div class=quote>
y doesnt the winamp show vgms as associted files? i always have to
select .vgm .vgz from the drop down menu.
</div>
This is a bug in Windows, at least up to XP (SP2). Try using other methods
to load your files. The Media Library is really good, try it!
<div class=quote>FM music is not based on SINE waves, is it?!</div>
Yes, it is. "Frequency modulation" means using one sine wave to change
the frequency of another, thereby producing quite complex waveforms
from two simple sine waves, a Good Thing when it comes to making cheap
sound chips. Although one source says "Note that the name 'FM' is a
misnomer; in actual fact the Yamaha chips all use phase modulation (PM)
to create their sounds." So now you know.
<div class=quote> The latest VGM plugin is much slower on my p133. The last one works
fine, but with the new one the songs stops and then continues after a
second all the time. Why?</div>
Because FM emulation is a lot more complicated than PSG emulation, so
it takes more time. You might like to get VGMTool to optimise any VGMs
with unnecessary chip data in them, or possibly re-download the files
if they've been updated with optimised versions.
<a name="howtoplay"></a>
<h2>How to play VGM files direct from your webpage</h2>
You can make it so people can click on a link and have a VGM played in
Winamp the same way as you can do it for MP3s...
<ol>
<li>Make a playlist file for the file(s) you want, listed as full URLs
<li>Link to that
</ol>
Winamp will try to make it so the playlist file is downloaded and
opened by the browser with as little prompting as possible, and in_vgm
hooks up with Winamp's downloading routines to play the files
themselves. <a href=http://www.smspower.org/music/vgm/demo/Golvellius.m3u>Try
this link for an example.</a>
<a name="knownissues"></a>
<h2>Known issues</h2>
<ul>
<li>You can choose to loop a VGM a lot of times. However, Winamp doesn't
handle extremely long track lengths very well.
<li>On my computer, turning on the equaliser will make it use 3 times as
much CPU for PSG tunes, and 1.8 times as much for FM. It also does not
process square waves well. I recommend you turn it off if you can.
<li>I tried a DSP plugin, "Dee". It crashed Winamp whenever you turn on the
3D thing, I have no idea why. So don't do that.
<li>When you apply fake panning to PSG/YM2413 channels, it is hard to
make the apparent volume stay the same. I am trying to use "equal power
panning laws" but I'm not sure I've got it quite right yet, especially since
it seems nobody agrees on what's the right way to do it.
</ul>
<a name="history"></a>
<h2>History</h2>
<h3>0.35 beta</h3>
<ul>
<li>Fixed multi-line comments (again)
<li>Updated YM2612 engine from Gens32, now supporting SSG-EG
<li>Unicode tag support for Winamp 5.25, while still supporting old Winamps
<li>All GD3 tags are now internally trimmed of leading/trailing whitespace to stop badly tagged files showing up strangely in the ML
<li>Feature death: Winamp has killed plugin control of Now Playing. You can
try <a href=http://forums.winamp.com/showthread.php?threadid=250008>this
plugin</a> but it doesn't work for me.
<li>Better support for out-of-spec GD3 dates
<li>Changed dialogues to use Tahoma font to get its better Unicode support
<li>Rewrote file info displayers to use common code underneath
<li>Fixed bug with file info when file was downloaded from a URL
<li>Fixed bugs displaying long formatted times
<li>Changed seeking method to avoid inter-thread issues - hopefully, that
means no more crashes when seeking or muting channels.
<li>Fixed fake panning to maintain equal power when panned (I think)
<li>Fixed crash reading extended file info on files with no GD3 tag
<li>Added per-chip enabling and preamplification controls
<li>Settings saving is now updated for Winamp's user profile support
<li>Added per-channel muting for YM2612
<li>Added "loop forever" option
<li>Improved HTML information display
<li>Added fake stereo randomisation
<li>Fixed Title Casing for legacy title formatting
<li>Fixed bug with port numbers in URLs in URL handler
</ul>
<h4 id=histlink><a href="#oldhistory" onClick="javascript:showhistory();">Click to show older entries</a></h4>
<div id=oldhistory style="display:none;">
<a name="oldhistory"></a>
<h3>0.34 7/12/05</h3>
<ul>
<li>Added high-pass filter for PCM to Gens sound core (by Blargg)
<li>Pausing after non-looped tracks was broken in 0.33
<li>This also broke skipping with short tracks
<li>Fixed a couple of typos in the readme
<li>Improved HTML information display
</ul>
<h3>0.33 20/11/05</h3>
<ul>
<li>Added support for YM2612 sample banks and VGM 1.50
<li>Fixed some stupid old bugs with unlooped VGMs that nobody ever noticed
<li>Updated zlib to latest version
<li>(Hopefully) removed dependency on MSVCRT*.DLL
<li>Added file sniffer functionality so it will automagically play VGM
files even if you change the extension (although that's not
recommended)
<li>Improved file info box chip usage display
<li>Added tag caching for tag queries, to speed up media library tag
retrieval
<li>Changed to NSIS installer and packed in another demo VGM
<li>Added YM2413 panning support
</ul>
<h3>0.32 30/10/05</h3>
<ul>
<li>Added icons to config dialogue
<li>Fixed issue with Now Playing loading information pages over the HTML
information display
<li>Added file length information into HTML information display
<li>Updated downloader code to use Winamp's built-in downloader instead of
using IE
<li>Added msvcrt71.dll to installer
<li>Enabled support for VGM 1.10
<li>Re-integrated and extended Charles' MAME-style SMS Plus conversion of
sn76489.c to hopefully make it more discoverable and re-usable by
others
<li>Added PSG panning support
<li>Reorganised config interface
<li>Added magical track number extraction for the Media Library by
guessing the filename of the associated playlist file and finding
which number entry it is in there - works well for most SMS Power
releases, at least
<li>Fixed Media Library year problems
<li>Improved time formatting
<li>Added YM2413 panning support
<li>Added panning Gaussian randomisation
<li>Improved emulation of non-Sega variant SN76489 for the Beeb fans
</ul>
<h3>0.31 12/12/04</h3>
<ul>
<li>Added Media Library extended title support and lots of associated
options
<li>And various other stuff too
</ul>
<h3>0.30 28/5/03</h3>
<ul>
<li>Added pause between tracks and looping fadeout options
<li>Updated to EMU2413 0.60: "Fixed HH&CYM generator and all voice datas."
<li>Unupdated back to EMU2413 0.55 - percussion sounds terrible!
<li>Added support for VGM v1.02 (custom PSG noise feedback)
<li>Replaced MAME YM2612 core with Gens 2.10
</ul>
<h3>0.29 31/10/02</h3>
<ul>
<li>Added PSG noise boost option
<li>Added PSG smooth volume curve option
<li>Fixed bug in GD3 tag display
</ul>
<h3>0.28 12/9/02</h3>
<ul>
<li>Configuration now uses a tabbed dialogue
<li>Added WinXP "visual styles" support
<li>Japanese text now shows under WinXP (hopefully)
<li>Seeking bugs fixed
<li>Cancelling the File Info dialogue box for a group of files now works
properly
<li>Improved mixing
<li>Volume levels now match better for different chips
<li>Fixed a typo which caused the YM2162 core not to be closed
<li>Added some documentation to this file
<li>Added a Help button which opens this file
</ul>
<h3>0.27 1/5/02</h3>
<ul>
<li>Fixed a bug with invalid GD3s
<li>Updated to YM2413 0.55, which included a higher quality mode (12%
higher sampling rate plus conversion). Use "High quality YM2413"
checkbox to control it.
<li>Modified PSG core to produce output similar to FM cores, ie. much
quieter
<li>Added Overdrive mode which amplifies the sound to levels similar to a
typical MP3 file. It can cause clipping, though.
</ul>
<h3>0.26 14/4/02</h3>
<ul>
<li>Added MAME YM2151 FM core thanks again to BlackAura
<li>Fixed credits in About box
</ul>
<h3>0.25 8/4/02</h3>
<ul>
<li>Fixed PSG 2-byte noise write behaviour based on chip tests
<li>Added MAME 0.36 YM2612 core thanks to BlackAura
<li>Finally fixed the seek bug
</ul>
<h3>0.24 25/3/02</h3>
<ul>
<li>Improved PSG tone channel oversampling (or rather sub-sample accuracy)
a huge amount - aliasing is gone and it sounds great. It's now always
turned on.
<li>Rewrote PSG noise simulation to be 100% accurate to how the real chip
works
<li>Reverse engineered SMS SN76489 (PSG) feedback network so noise
pattern is bit-accurate
<li>Updated to zlib 1.1.4
</ul>
<h3>0.23 17/3/02</h3>
<ul>
<li>Added PSG oversampling, hoping to reduce aliasing effects but it
doesn't.
<li>Improved channel selection, it now remembers it if you stop and re-
play a track.
<li>Released early as I had broken the self-installer last time
</ul>
<h3>0.22 12/2/02</h3>
<ul>
<li>Total/loop lengths in file info box are now to 1 decimal place,
rather than rounded down to the nearest second
<li>Added some protection for truncated (broken) files
<li>Looked into why VGZ files don't show up on the Open dialogue until
you select them from the dropdown list... it's a Winamp bug, see the
AAQ above.
<li>Worked on the internet download code a bit... note that when you
close the minibrowser, it tends to switch off IE's offline mode :(
</ul>
<h3>0.21 6/1/02</h3>
<ul>
<li>Added HTML display of GD3 information, hopefully allowing Japanese
text to be displayed on all systems
<li>Fixed a memory leak
<li>Loads of other stuff
<li>Never actually got around to releasing this one
</ul>
<h3>0.2 20/11/01</h3>
<ul>
<li>Ported the plugin to C
<ul>
<li>so now the YM2413 is emulated via EMU2413
<li>ported my SN76489 emulator
<li>ported playback engine, including variable-speed playback and
seeking
<li>Re-implemented file downloader using URLMon.dll (makes code simpler)
</ul>
<li>Implemented loop skipping when seeking, so you can seek through a
file looped a lot of times much faster than before
<li>Change title formatting - now you can display Japanese text too (if
supported).
<li>Fixed a bug when stopping/skipping just before the end of the track
<li>Moved settings to plugin.ini in the plugins folder. You can delete
the section from winamp.ini if you like. You'll have to re-set your
preferences if you don't like my defaults.
<li>Changed FM/PSG mixing so the Japanese BIOS music sounds better... if
anyone can send me a recording (from a real SMS with an FM chip) of
the Japanese BIOS music (or any game using both the PSG and FM chip)
I'd be grateful.
<li>Added some stuff to the file info dialogue
<li>Added YM2413 channel muting
<li>Updated to EMU2413 0.51, with modifications
</ul>
<h3>0.12 1/10/01</h3>
<ul>
<li>Fixed typo in About box (0.1 -> 1.0)
<li>Added user-configurable playback rate - now you can choose to play
music at the speed you remember.
<li>Made it so PSG flip-flops don't get stuck at zero frequency (made it
sound strange sometimes)
<li>Changed config dialogue to Verdana font (file info already was)
<li>Added useless icon to config dialogue. If anyone wants to design a
logo I can show it this way :)
<li>Fixed tab order in file info dialogue
<li>Added SMS Power URL button to file info dialogue
<li>Fixed a bug caused by the flip-flop fix
<li>Cleaned up source code a lot
<li>DLL is now compressed as well as WinAligned
<li>Ported EMU2413 to Delphi... but it doesn't work yet
<li>Removed the above flip-flop thing because it broke voices...
On a real SMS, quite often a channel's frequency is set to 0
without turning it off. On my simulated PSG that leaves a permanent
DC offset; on a real SMS that offset decays in a fraction of a
second. The effect of this is to make the wave appear to "move" up
and down; it has a small effect on the sound, as speakers operate
better without a DC offset. Unfortunately the same effect is used
for voices, so when I activate the code to remove the offset,
voices stop working. To see this in effect, try "Out Run 3D -
Magical Sound Shower" or "Micro Machines - Title Screen", among
others.
<li>Added HTTP downloading via WinINet.dll... which is part of IE, but
should be on almost every PC
</ul>
<h3>0.11 4/9/01</h3>
<ul>
<li>Fixed a bug in the PSG tone emulation that caused problems with Micro
Machines.
<li>Relaxed version checking, now it only insists on VGM and GD3 1.xx and
still offers to play other files.
</ul>
<h3>0.1 3/9/01</h3>
<ul>
<li>Added a button to set MIME types in the registry. If a server is set
up to descibe VGM/VGZ files as "Content-Type: audio/vgm" and these
values are set, Netscape will be able to play VGM files from URLs. IE
doesn't need it, it ignores the MIME type when it sees the file
association with Winamp and will open the file properly (after a
prompt).
<li>VGM is verging on going public, so it's reset to 1.00 and the plugin
gets out of alpha
</ul>
<h3>Alpha 13 26/8/01</h3>
<ul>
<li>Fixed a worse bug in the previous bugfix :P
<li>Added track title formatting stuff
<li>Increased play thread priority to stop skipping when the CPU is busy
</ul>
<h3>Alpha 12a 25/8/01</h3>
<ul>
<li>Fixed looping bug
</ul>
<h3>Alpha 12 25/8/01</h3>
<ul>
<li>For some reason the GZip code limited the path to 79 characters,
causing "Not an AYM file" errors on files with long paths. I fixed it.
<li>Switched to VGM instead of AYM. ****DELETE IN_AYM.DLL****
<li>Added configuration dialogue; the tone channel checkboxes have moved
there from the file info box
<li>Added looping support
<li>Updated to VGM 1.12
<li>Added loop configuration to config dialogue, saving the loop count to
winamp.ini
<li>Added a button in the file info dialogue for the config dialogue, so
you can get at it quicker
<li>Setting the loop to a high value allows me to test seeking speed. 400
minutes in 8 seconds is 3000x...
</ul>
<h3>Alpha 11 20/8/01</h3>
<ul>
<li>Synchronous noise tested against a real system. Apart from the
different sound due to the real system's imperfections, it works
properly now.
<li>Updated to use the GD3 tag location properly. Decrease the offset by
0x14 in existing files for it to work. I'm not going to code for it
to handle both, sorry...
<li>Volumes use values measured from a real SMS. I may switch to
logarithmic values, or maybe have an option eventually?
<li>Speed modifying code added. If you want to play back at 120Hz or
13.47Hz, you can. Except you can't, I commented that code out. Thanks to
Bock for pointing out how to do it.
</ul>
<h3>Alpha 10 19/8/01</h3>
<ul>
<li>It now looks for and uses the .ayz file extension. It actually
doesn't matter which extension you give a file, compressed or not.
<li>AYM 1.11, plus you can now choose to try and play versions not in the
supported range (1.08-1.11).
</ul>
<h3>Alpha 9 19/8/01</h3>
<ul>
<li>Switched to AYM instead of DYM
<li>Invalid files were displaying a track length before, they don't now
<li>Added GZip support. There are problems with the .aym.gz extension -
Winamp won't automatically pass it to the plugin, because it sees the
extension as .gz. That has been worked around. Windows won't
associate .aym.gz files with Winamp, because it too sees them just as
.gz files. I don't see any way around this. GZip also ballooned the
DLL size a bit... WinAligning makes it seem even bigger. (Was: ~42KB
-> 64KB after aligning, now it's ~75KB -> 92KB after aligning.)
</ul>
<h3>Alpha 8a 17/8/01</h3>
<ul>
<li>Fixed problem with DirectSound output plugin
<li>Fixed EQ problem
</ul>
<h3>Alpha 8 17/8/01</h3>
<ul>
<li>Fixed an error which cause all sound to be half the correct frequency
(1 octave lower than it should)
<li>That also fixed voices
</ul>
<h3>Alpha 7 16/8/01</h3>
<ul>
<li>DYM 1.10, with GG stereo port writes. It's untested because there is
no test stream yet :)
<li>Improved method of muting channels, although as far as the sound is
concerned it's the same.
<li>Tweaked volume so the (theoretical) maximum is now 98% of the
available volume. It seems this is the "right" thing to do...
<li>Since compatibility hasn't broken since DYM 1.08 (it uses default
values for older versions), the version checking now accepts a range
of values.
</ul>
<h3>Alpha 6 15/8/01</h3>
<ul>
<li>DYM 1.09, with the PSG clock rate in the header. That is all.
</ul>
<h3>Alpha 5 15/8/01</h3>
<ul>
<li>Fixed up the channel disabling, although it's still in the info box
(it'll probably end up somewhere else). Before it took until the next
volume change on that channel to mute, now it's only the output
plugin' s buffer length that stops it being instant. Noise can be
disabled too. Unmuting still needs a volume change though.
<li>DYM 1.08 already...
<li>Added noise emulation according to the MAME/Hiro-shi method. It's
terrible, completely inaccurate.
<li>Dave's Sonic DYM highlighted a problem - out of laziness, I was not
buffering the file myself, hoping that Windows would do enough. So,
every byte read was actually using quite a lot of CPU. I've now got a
32KB buffer - voices work now (almost... I'm not sure what the
problem is now, it could be an issue with DYM itself), and seeking is
incredibly fast! It took 6 seconds to seek 1 minute into the GG
Shinobi DYM before, now it's instant! Seeking nearly 3 minutes into
the Sonic DYM takes a fraction of a second. And now, CPU use is way
down. It depends on the DYM file, but it's typically around 4%, a
quarter what alpha 4 used :)
<li>I switched to my determined PSG clock speed, but it seems to cause
some problems (with voice) if it's not what the DYM creator used. DYM
1.09 addition?
<li>WinAligned DLL... it's 64KB instead of 45, but it now executes from
the disk cache on Win98 and higher.
</ul>
<h3>Alpha 4 13/8/01</h3>
<ul>
<li>Added proper file info box, without invoking Delphi's RTTI filesize
overhead. It's a lot more hassle :( but it's kept the plugin at 44KB.
<li>Rewrote tone generators to act EXACTLY like the hardware (counters
and flip-flops). The last version used another method which I thought
up based on maths and stuff like that, which sounded OK until the
sound started using vibrato, in which case it sounded terrible. Now
it sounds perfect (except for emulation of the "fading"
flip-flops...). As an added bonus it seems to be a bit faster too,
the decoding thread uses about 16.2% CPU for me now.
<li>Added VERY quick and dirty noise emulation. It's just volume*random(),
and sounds crappy. It's better than nothing though. It also accounts
for about 25% of the CPU use...
<li>Added DYM version checking, because some people were trying to play
old DYM files and crashing Winamp... :)
</ul>
<h3>Alphas 1 to 3</h3>
I didn't record what I did then...
<p>
<s>...but I ought to thank Jason for help translating the C.
<pre> while (! *((int *)b) )</pre>
is quite confusing, I think
<pre> while integer(b^)=0 do</pre>
is much more readable :) (translation: while what pointer b points to,
typecast as an integer, is zero, do...)</s>
<p>
Forget that, Jason's an asshole and I understand C now.
</div>
<p>
<hr>
Documentation by Maxim
<p>
<a href=http://www.smspower.org>http://www.smspower.org</a>
</body></html>