A software MIDI synthesizer for Windows, which functions as a VSTi plugin. Supports both the Yamaha XG and the Roland GS extensions, which is a unique feature of the S-YXG50. The VSTi was a part of the Yamaha SOL2 package. Yamaha discontinued support of this software synthesizer in 2003. As it is abandonware now, a portable version of the VSTi was created (installation and registry keys are not required). It uses embedded (into DLL resources) official 4MB wavetable files, which is the best version of wavetable files for the S-YXG50.
Download: yamaha_syxg50_vsti.7z (3.0MB).
What's new in this patch
- Installation isn't required. SYXG50.DLL reads files from its directory.
- Wavetable files are decrypted and stored in the resources of the DLL file.
- If you remove them from the resources, VSTi will find them in its directory (SXGBIN41.TBL, SXGWAVE4.TBL).
- Antidebug, S/N checking and trial mode code is removed.
- Hidden settings are read from the ini file with the same name as the dll file, but with the ini extension.
- Polyphony limit is 128 by default.
- More frequent updates of information in the GUI.
- Help button will be hidden if SYXG.CHM is not present.
- VST meta information is stored in the resources (String Table), so it can be changed easily if it is needed.
- GUI can be disabled and GUI resources can be removed, as the result this VSTi will work as the SGP.DLL.
The patch doesn't affect sound synthesis of the original VSTi. It was tested on hundreds of MIDI files to ensure that the output is bit-identical to the original S-YXG50 VSTi with the same settings.
How to use
You have to set up some VST host to play MIDI using this synth. It can be your favorite player, but you need to find a plugin, which allows to play MIDI files through VSTi. Some instructions are provided below. Use the bi2_polkovnik.mid (35KB) for checking your setup, it has to sound exactly as the bi2_polkovnik_syxg50.ogg (2.0MB).
VSTi MIDI Driver (as a system MIDI synth)
VST MIDI Driver allows to use any VSTi as a global system MIDI synth. In this case every game or MIDI player, which uses the default system MIDI synth, will use Yamaha S-YXG50.
- Install the Falcosoft VSTi MIDI Driver.
- If you are on Windows 8 or newer, also install the Coolsoft MIDI Mapper.
- Copy the syxg50.dll from the yamaha_syxg50_vsti.7z into any directory.
- Open VSTi MIDI Driver settings, click “Load VSTi” button and choose the syxg50.dll.
- Open MIDI Mapper, choose “VST MIDI synth” as the default MIDI synth.
- Ready! Now Yamaha S-YXG50 VSTi will be used as the default system MIDI synth.
Yamaha S-YXG50 WDM (an official driver for the Windows XP only)
VSTi MIDI Driver supports Windows XP/Vista/7+, but on the Windows XP it is better to use the official Yamaha S-YXG50 WDM driver, which you can download from the Microsoft Windows Update servers: 4MB version (better quality, consumes more RAM), 2MB version (worse quality, consumes less RAM). This WDM driver can be installed manually using Add Hardware master in the Control Panel. Don't forget to set Yamaha S-YXG50 as the default system MIDI synth in the Sound settings. VSTi version of this synth is not needed when Yamaha S-YXG50 WDM is used.
foobar2000 (the best player for ones who loves music)
foobar2000 doesn't use the system MIDI synth, but it is not a disadvantage. It allows to use Yamaha S-YXG50 VSTi witout installing any system drivers, which is much more safe.
- Download and install the foo_midi plugin from the foobar2000 website.
- Create a new subdirectory in the foobar2000 directory and name it “vsti”. Copy the syxg50.dll from the yamaha_syxg50_vsti.7z into that directory.
- Open foobar2000, Preferences → Advanced → Playback → MIDI Decoder → VSTi search patch, and set the full path to your vsti subdirectory. Apply changes and reopen the Preferences window.
- Preferences → Playback → Input → MIDI synthesizer host. Choose “Yamaha S-YXG50” in the “plug-in” combobox. Apply changes.
- Ready! Now foobar2000 will play MIDI files using the Yamaha S-YXG50 synth.
Links
- yamaha_syxg50_vsti.7z (3.0MB) — a version with the embedded 4MB wavetable, for general usage.
- yamaha_syxg50_vsti_ext.7z (4.0MB) — a version with external 2MB and 4MB wavetables, for experiments.
- bi2_polkovnik.mid (35KB) and bi2_polkovnik_syxg50.ogg (2.0MB) — demo MIDI file and how it has to sound.
Me again! It seems I was able to get this running reasonably well using a tool called VSTHost along with the loopback. A bit more involved to get it set up and running than the Falcosoft solution, but I'm getting good results.
Still not as ideal as being able to simply get the VST running using a VST midi driver, so if anyone has a solution to that, please let me know.
Thanks!
I absolutely love this synthesiser, thank you for releasing an unofficially modified version! <3
How do you select an instrument in this VST?
The 'Data List' was «shipped» with XGPlayer – file named "Syxgctrl.hlp". To view it on Vista, 7, 8, 8.1 you have to find KB917607 update (that restores old winhlp32) and install it. In this help-file click "MIDI" — "XG Normal Voice List" or "XG Drum Voice List", if General Synthesis mode – "TG300B Normal Voice List" or "TG300B Drum Voice List". Also XGPlayer has these files: Syxg53h.txt (XG50 Voice list for MA-52W), Syxg101w.txt (XG100 voice list for MA-52W), Tg300b.txt (TG300B Voice List for MA-51W).
Or read posts #63 and #64
What happened to VST MIDI Driver?
I already have a version of it installed, but I'd like to know what happened to it. It's not on kode54's website anymore, and the github repository is gone.
I don't know. I guess it is better to ask kode54 himself.
If anyone has issues getting this to work in a 64 bit DAW (in my case Ableton Live 10), get jBridge to convert the S-YXG50 vst to 64 bits and it will work. jBridge is a paid software but it is cheap ($19 as of this writing) and it works great.
The vst midi host download link doesn't work. Would you mind sending it to my email instead? Or anything so I could download it again.
Don, kode54 told that he lost the latest source code of the driver. There are some links to old versions of the driver in that topic, but as far as I remember they had some issues. So, I would suggest to use foobar2000 with foo_midi plugin, or some other solution if installing S-YXG50 as a system-wide synthesizer is a must. Unfortunately, I didn't try to use any other solutions, but I saw people suggesting some alternatives somewhere in the comments.
I'm gonna second the "how do you change instrument" question above
I haven't done much with MIDI before, and I tried using this as an instrument in Reaper which seems to work EXCEPT I have no idea how to change instruments. I can find stuff about how to change "MIDI banks" but that just lets me get other "Windows defaults", and somehow when I did that on a track it changed my keyboard's input into a standard organ, but the MIDI item editor into drums from the VST? Very much lost
FIGURED IT OUT
So: I downloaded this https://www.kvraudio.com/forum/viewtopic.php?t=486318 (which VEG helpfully mentioned in comment 63 in this thread, I googled in case there was a more up to date version though)
I looked up this https://reaperblog.net/2015/06/quick-tip-how-to-install-js-plugins/ to see how to install it
Then I put it ahead of the VST in FX for a track, and now we're cooking
Joakim, didn't know about that thread, thank you for the link. If you're registered on that message board, don't forget to say "thank you" to the author of the control panel ;)
Hey there, eveybody.
VEG, I just recently discovered your VST for the Yamaha S-YXG50, and I have managed to get my Cakewalk Music Creator software to recognize it as a plug in. I'm playing the synth from a Yamaha S80 keyboard, and thus far, I've been able to access the 128 sounds that are available in Bank 0 of the S-YXG50, but I haven't been able to access any of the sounds in any of the other banks. I've tried using the " insert bank/program change" command in Cakewalk, but Cakewalk shows Bank 0 as being the only available bank. I'm wondering if there's something I haven't done with respect to configuring the softsynth. I'd appreicate any inisght you or anyone else might be willing to offer. Thanks very much for creating this great-sounding VST!
Lee Todd, unfortunately, I'm not a music creator, so I don't know the tools for creation of music, I use S-YXG50 just for listening.
I heard that you can use Shiru's control panel for the S-YXG50 to switch instruments in the Reaper. Unfortunately, I don't know if there is such panel for the Cakewalk Music Creator, or it should be created by somebody. As far as I understand, there should be possibility for switching instruments using raw SysEx messages from any music editor, and you can find S-YXG50 manual on the internet for details.
Hey there, VEG.
Thank you for responding so plromptly.
I figured it out!
Per your suggestion, I searched online for an owner's manual. My search led me to discover this very helpful website:
https://battleofthebits.org/lyceum/View/Yamaha+XG/
In addition to mentioning some critical points regarding CC messages for selecting the various banks on the S-YXG50, the site also includes a link to a user manual published by Yamaha UK, which includes a comprehensive voice list.
https://web.archive.org/web/19970630045815/http://www.yamaha.co.uk/download/syxg50/sxg5095.exe
For folks who are trying to get the S-YXG50 to run in Cakewalk, I can tell you what worked for me. At the beginning of the "event list" for the one and only track in my piece (a simple organ composition) I inserted the following messages in the following order:
Hallo Leute, wie Ihr sicher schon bemerkt habt, gibt es für die WIN 10 Versionen >2004 keinen funktionierenden VST Midi Driver mehr.
Ich habe glücklicherweise mit Herrn Herman Seib einen Programmierer gefunden der den Treiber so abgeändert hat, dass er unter den neueren Win10-Versionen 21h1 und Höher sowie WIN11 ablauffähig ist. Diesen Treiber hat er unter folgendem Link bereitgestellt: https://github.com/Arakula/vstdriver/releases/tag/v1.0.0-alpha3 Momentan überlegt er sich noch weitere Verbesserungen die er gegebenenfalls einfach unter https://github.com/Arakula/vstdriver Weitere Releases ablegt. Bitte nicht erschrecken, dieser Treiber wird bei der Installation zunächst abgelehnt, da er Schaden anrichten könne und muß dann über die übliche Routine, dass man der Software vertraut freigegeben werden.
Meine Bitte an euch ist, dass ihr dem Entwickler nach dem herunterladen und ausprobieren eine kleine Spende zukommen lasst, damit er uns gegebenenfalls weiterhin unterstützt, wenn der Treiber wieder wegen erneuter WIN Sicherheitsupdates nicht mehr funktioniert. Die beiden möglichen Spendenadressen in PayPal.com sind - him@hermannseib.com oder office@hermannseib.com
Ich selbst habe Herrn Seib eine etwas größere Spende zukommen lassen, da ich nicht zufrieden war mit den alternativen Lösungen wie LoopMidi in Verbindung mit dem Midiplayer60 oder auch foobar2000 mit dem SYXG50 Treiber sowie VirtualMidiSynth. Diese Spende hat mit Sicherheit nicht die Kosten gedeckt die man bei einem offiziellen Auftrag hätte zahlen müssen. deshalb hiermit nocheinmal mein Dank an Herrn Hermann Seib an dieser Stelle.
Hello friend's, as you have probably already noticed, there is no longer a functioning VST midi driver for the WIN 10 versions> 2004.
Fortunately, in Mr. Herman Seib I found a programmer who modified the driver so that it can run under the newer Win10 versions 21h1 and higher as well as WIN11. He has made this driver available under the following link: https://github.com/Arakula/vstdriver/releases/tag/v1.0.0-alpha3 He is currently considering further improvements which he can simply go to https://github.com/Arakula/vstdriver stores more releases. Please do not be alarmed, this driver is initially rejected during installation because it could cause damage and must then be released via the usual routine of trusting the software.
My request to you is that you send the developer a small donation after downloading and trying it out so that he can continue to support us if the driver no longer works again due to another WIN security update. The two possible donation addresses in PayPal.com are - him@hermannseib.com or office@hermannseib.com
I myself made a somewhat larger donation to Mr. Seib because I was not satisfied with the alternative solutions such as LoopMidi in connection with the Midiplayer60 or foobar2000 with the SYXG50 driver and VirtualMidiSynth. This donation certainly did not cover the costs that would have been paid for an official order. therefore I would like to take this opportunity to thank Mr. Hermann Seib once again.
The vstdriver uses BASS DLL to output sound. It causes issues when a midi player itself uses another version of the BASS DLL. If the author of the fork is going to develop the driver further, he could try to replace BASS to an own built-in WASAPI renderer, to avoid any issues and improve compatibility with various players.
He will ;-)
... but that will take some time. In theory, it should easy, since the driver already passes the MIDI events to a separate VST hosting program, so you "only" need to transfer the complete sound generation and output from the driver to the VST hosting program. That would automatically provide process isolation so that different BASS DLL versions could be used.
It goes without saying that in practice this is not exactly a piece of cake. Plus, I strongly dislike the dependency on the BASS library, which is a MASSive overkill for the VST driver's purpose. So I will presumably replace it with my own audio output routines ... I got some experience with that, at least with MME and ASIO. WASAPI shouldn't be too hard either. But, sa said ... this will take some time.
Glad to hear that. A couple of years ago, I had an idea to make a fork of the vstdriver to untie it from the BASS DLL, but it was left untouched in my list of ideas, and I'm really happy that somebody decided to do this.
BTW, I was using your SAVIHost for development and testing of this patched version of the S-YXG50 VSTi. Thank you =)
Thanks a lot for working on the VST driver again! The S-YXG50 is my favorite MIDI synth in Doom and Duke3D. The fact that it works on recent Win10 versions once again is a real joy!
New preliminary version for testing here.
Would anyone have any further information on the lookup table yamaha uses? The decrypted audio wavetable itself looks like it's Delta 16-bit PCM (0-65535 sample values?) but the lookup table sxgbin41.tbl is binary and a mystery to me? Can it be edited / understood? I was wondering how difficult it would be to take the wavetable and implement it in a different VSTi or even the existing wavetable soft synths that allow custom wavetables?
S-YXG50 is more complicated than just playing specific samples from the wavetable file. It has a lot of additional processing and effects. It will be hard to recreate authentic sound in other synth engines with support of all XG features.
I see, thanks for the reply Veg - that is what I feared otherwise I assume we might have seen an emulation of the Yamaha MU & QY series of synths by now if it wasn't too complex. It sounds like someone would need to reverse engineer the .dll too in order to understand it which is far beyond my programming skills haha!
It's possible to crack S-YXG2006LE? Can you change polyphony limit to 128?
It is possible to change anything, but I don't plan any patches for the S-YXG2006LE in the near future.
Hermann Seib,
Does the midi driver have Midi in? it loads the vst but how to play it?
To get this VSTi-plug in to work with basically anything that supports external MIDI devices I have been using LoopMIDI ( https://www.tobias-erichsen.de/software/loopmidi.html ) to create a virtual MIDI port and savihost ( https://www.hermannseib.com/english/savihost.htm ) to host the VST. Keep in mind that this plug-in is 32-bit thus you need savihost32 to host it.
Steps to get it to work:
1. Download the plug-in VST
2. Download savihost32
3. Download loopMIDI
4. Extract loopMIDI
5. Install loopMIDI (I just use the default settings)
6. Extract the Plugin to a folder where you can easily find it
7. Extract savihost32 to the same folder as where you extracted the plug-in
8. Rename savihost32 to the name of the plug-in dll (in this case syxg50) WARNING!!! DO NOT REMOVE THE .exe FROM SAVIHOST AND DO NOT INCLUDE THE .dll (so the file you end up with is called syxg50.exe)
9. Create a shortcut to syxg50.exe on your desktop (for easy access)
10. Start loopMIDI and at "New port-name" at the bottom choose a name for the port (I use Yamaha S-YXG50 as the name but it can be anything) and then click the "+" at the bottom-right to create the port.
11. Start the shortcut from your desktop that you made for the plug-in and in the menu-bar at the top select "Devices" and then "MIDI..." and next to "input port" select the name of the port that you created in step 10 and click "OK"
12. Now your virtual Yamaha S-YXG50 is properly set up to receive MIDI from your favourite MIDI application, to find out how to send MIDI from your application to an external device I will have to refer you to the documentation of said application.
13. After a restart of your computer all you have to do is restart loopMIDI and then the plug-in from the shortcuts on your desktop.
This guide will work for any VST that accepts MIDI-input, all you have to keep in mind is to select the correct savihost architecture for your plug-in (32-bit or 64-bit) and to rename the savihost executable to the exact name that the plug-in has, create a MIDI-port in loopMIDI for it and select that port for the input port as stated in step 11.
small sidenote!!!!! This is a VST2 plug-in so you need the savihost for VST2 plug-ins!!!!
Hi,
I would like to intoduce a re-booted VST Midi driver fork that cured the main problems of previous ones (ie. dependency on Bass libraies, non-working saving/loading of plugin settings, bad Midi timing/precision etc.)
https://github.com/Falcosoft/vstdriver/wiki
Releases/changelog:
https://github.com/Falcosoft/vstdriver/releases
Great news! Looks really good, thanks! Maybe one day in the future it will support native WASAPI too =)
I updated the manual on this page with links to your VSTi MIDI Driver and Coolsoft MIDI Mapper.
BTW, the Cannot load plugin settings! error on first load is confusing, I would just silently use defaults.
Hi,
1. What would be the advantages of WASAPI output compared to the existing ones (WaveOut, ASIO)? The obvious disadvantage is that it only works on Vista+ so if I want to support older OS versions I can only use dynamic imports for all WASAPI related functions. Also first versions of WASAPI do not support internal/automatic resampling and multi-cahnnel output is also more complicated depending on the default speaker configuration selected by the user. Moreover ASIO4ALL uses WASAPI on Vista+ so indirectly you can already use it if you want :)
2. Yep, it seems that check is actually not that necessary. I just wanted to avoid the problem of previous forks that could not save/load plugin settings but the user was not informed at all about the problem.
Falcosoft,
Well, WASAPI is native for modern versions of Windows, WaveOut is just a legacy wrapper for it. It opens the doors to all the modern features like low latency shared mode. All the new audio related features supported by modern Windows are added to WASAPI only.
S-YXG50 has native versions for Windows 98 (VxD driver) and XP (WDM driver), and I was always considering the VSTi MIDI Driver as a tool to use S-YXG50 on Windows Vista and newer. I must admit that there are other VSTi MIDI synths too, so support of older versions of Windows is still useful.
WASAPI is 100% COM based, so it uses just standard COM functions that are as ancient as Windows NT. You'll just need to handle returned errors of creation of WASAPI objects.
Are you talking about Vista? AFAIK, the AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM and AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY were added in Windows 7. To make things reasonably simpler, Vista could use legacy WaveOut, and WASAPI output could require Windows 7+.
WASAPI is not a must-have, it's just a nice-to-have feature.
Hi,
My question was meant to be a little more pragmatic. Let me re-phrase it a little. What would be the advantage of WASAPI in the context of VST Midi driver features?
I mean in terms of latency you cannot go lower with WASPI than with ASIO. And ASIO also works on leagacy OS versions. With ASIO4ALL it can work on any cards/OS.
I know that WinMM Waveout is a just an emulation layer on modern Windows but in terms of functionality I feel it can do anything that VST MIDI driver needs.
1. It supports any sample rates and any sample formats (even modern 32-bit floats).
2. It supports multi channel streams with proper speaker assignments.
3. It can follow default output device changes the sane way as WASAPI when MS Sound Mapper is selected.
4. It's latency is not a problem for every day usage. If you need really low latancy for real-time jamming even shared mode WASAPI is not good enough.
5. It works anything from NT4 to Win 11 without any problems. No special workarounds needed for different Windows versions.
BTW, just for fun: The fork of Arakula (Hermann Seib) that used Bass/BassWasapi had a terrible 500(!)ms latency due to some misconfiguration and seemingly no one cared about it.
WaveOut can produce absolutely stable output with 60-80ms buffers.
Depending on hardware and drivers, WASAPI can be better than ASIO. But yeah, for most use cases 60-80ms is good enough.
Thanks Veg for making this available!
I still have my DB-50XG board and every now and then I connect it to listen to the XG Midi files that I collected in the 90's (and later). It was only this week that I found out about the VST plugin. I only knew the VXD and of course that one is no longer usable. Very happy to be able to play the XG files now with Foobar2000 :-D
I did some validation and checking with MusicScope (after converting to FLAC) and I noticed that the True Peak Level of some of the XG Midi files (e.g. the Yamaha XGTechno songs) go beyond 0 dB peak (1 or 2 dB over). The distortion is noticeable. I found out that I had to turn down the output level in the S-YXG50 setup dialog to -8 dB to prevent clipping. You might want to add a small warning that the default level of 0 dB can lead to some distortion with a number of XG songs.
I believe the DB-50XG has a 20 bit audio stage and a bit more dynamic headroom, but I could not find that back in the manual, so I might be wrong there.
best regards,
Peter
Yeah, I heard from other people too that S-YXG50 can produce sound with some clipping. Maybe in the future I'll add an ini-setting where default volume could be changed to something lower.
Huge thanks to Veg for creating this very useful tool . It is worth noting that this website has most accurate knowledge and description of Yamaha S-YXG50. I can attest to it as I am was using the original software from 1999. I use your plugin with Reaper. And as I use Windows XP less and less if I just want to listen to the xg files I use the FalcoSoft MidiPlayer also appreciated his valuable contribution.
Though I agree with Peter re volume distortion. IMO the control over effects should be even more prioritized . Specially reverb control since by default there is too much reverb.
I am wondering if adding effects values/sliders to vst would be possible without much hassle?
Adding new features is possible, but it's not easy because there is no source code and no documentation how this synth works, so any changes require a lot of reverse engineering and making patches directly in x86 machine code.
I want to release a small update for this patch in the future, but I don't plan to add new major features. I want to expose default volume in the ini-file and make a few other minor things, but I'm not sure when I find enough free time even for this. I have too many hobby projects and too few weekends =(
Is anybody using this in combination with OneManBand?
I wonder what the right settings are. I now have,
XG
bank 0
lsb 0
I was first using the coolsoft midi mapper but, I seem to not need that. Can select VST Midi directly.
Some styles sound fine, others not so due to incorrect instrument mapping.
Anybody know what this Bank and least significant bit setting do for the XYG50?
Thanks for releasing this btw, it is awesome
For anyone using this synth in Reaper, I modified Shiru's JSFX control panel and added new features such as an "Editor" tab to change common parameters (filter, envelope, vibrato, portamento, etc), also added default values for each of the effects (obtained from the XG Specifications manual).
Download & Source code:
https://github.com/samlletas/syxg50-control-panel
Hi, firstly I am also grateful for VEG for making this excellent plugin available. Some time ago I downloaded the Yamaha XG Works program only to find that it won't recognize and load the S-YXG50 plugin on current OS, and therefore is not much use. Unfortunate, because otherwise it is a fantastic application.
So, I started to write a plugin host program for the S-YXG50 and it is coming along quite nicely. Can select sounds, play midi files, and manipulate some of the effects. I made videos about it, if interested see here: https://youtu.be/akmwmGiQU-c
You can also download the source code if you feel like messing around with it.
Re distortion: indeed, I also found that some midi songs generate >1.0 output. Currently, in my program I just use a simple limiter, but some form of (non-linear?) compression would be nice.
samlletas, I had a look at the control panel for Reaper and it is fantastic! Everything I tried worked wonderfully ... except for variations. I had a look at the code and I can see where you 'set variation connection to system', and so when increasing the level of 'Send' (on the UI) it should make a real difference, but for me it didn't. Does it work for you? Am I missing something?
George Pauka, thanks for testing it! The variation connection to system is sent once after instantiation so the order in which the FX chain is created matters:
- Drag the S-YXG50 plugin into the FX chain.
- Drag the control panel before the S-YXG50 plugin.
I'll update the readme with these steps, when I find the time I will try to improve this so that the steps mentioned above become unnecessary.
samlletas - thanks, I followed your instructions and it worked. Great!
(I didn't know of the discussion on the KVR forum)
George Pauka, Nice, glad you got it working!
samlletas, Thank you very much for the plugin! Helps a LOT!!! The only thing missing is a button to switch between XG / GS mode.
XG Mode:
GS Mode:
Thanks Again!
Santiago, In order to properly support GS mode it would be needed to remap every instrument (bank selection numbers LSB/MSB in GS are different from XG), not sure if variation effects sysex would work in GS mode as well. I'm mostly interested in XG mode so there are no plans to support GS mode for the time being, however I would be open to pull requests :)
samlletas, Oh sorry, I didn't know about that. Thanks for responding me. You did a great job with your plugin!!
Best regards!
Santiago, Thanks! I don't deserve all the credit though, the original plugin was made by Shiru, I just updated it and added new stuff, but I'm glad people are finding it useful!
samlletas, I have a question. Is there a way that the plugin detects the names of the instruments per channel/part like the sound canvas vst do?