Yamaha S-YXG50

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. It is based on the trial version from the Yamaha SOL2 package. The full version of this VSTi had never been released, because Yamaha had decided to discontinue support of all its software synthesizers in 2003. Fortunately, the trial version have a full version of the S-YXG50 engine, so it is possible to remove the trial restrictions to get a full version. In addition to the removed trial restrictions this patch adds the portability (installation and registry keys are not needed), also it uses embedded into the DLL resources the 4MB official wavetable files, which is the best version of wavetable files for the S-YXG50.

Программный MIDI-синтезатор для Windows, который работает как VSTi-плагин. Поддерживает расширения Yamaha XG и Roland GS, что является уникальной особенностью S-YXG50. Основан на пробной версии из пакета Yamaha SOL2. Yamaha так и не выпустила полную версию данного VSTi, прекратив поддержку всех своих программных синтезаторов в 2003 году. К счастью, пробная версия содержит полную версию движка S-YXG50, что позволило создать полноценную версию S-YXG50 VSTi своими силами. Помимо снятых ограничений пробной версии, этот патч предлагает полную переносимость (не требуется установка и ключи в реестре), а также использует зашитую в ресурсы DLL-файла 4MB-версию официального wavetable, лучше которого для S-YXG50 не выпускалось.

## Contents

- System Requirements
- Synth Specifications
- How to use
- INI file settings
- What's new in this patch
- DLL resources
- Extensions of the Voice Table format
- History of the Yamaha's software synths

## Содержание

- Системные требования
- Спецификации синтезатора
- Как использовать
- Настройки в INI-файле
- Что нового в этом патче
- Ресурсы DLL-файла
- Расширение формата Voice Table
- История программных синтезаторов Yamaha

## System Requirements

## Системные требования

CPU | Pentium II 350MHz or higher
CPU | Pentium II 350MHz или мощнее
RAM | 32MB or over
RAM | 32MB или более
OS | Windows 98 / Me / 2000 / XP / Vista / 7 or newer
OS | Windows 98 / Me / 2000 / XP / Vista / 7 или новее

## Synth Specifications

## Спецификации синтезатора

Tone Generation | AWM2 (wavetable synthesis)
Wavetable Size | 4MB
MIDI Synth Modes | GM1 / GM2 / XG / GS (TG300B)
Maximum Polyphony | 128 notes
Multitimbrality | 16 parts
Number of Voices | 676 voices + 30 drum/SFX kits, XG: 480 voices + 20 drum/SFX kits, GS: 579 voices + 10 drum kits
Effect Processor | 11 chorus + 11 reverb + 43 variation effects
Sample Rates | 96000 / 48000 / 44100 / 22050 / 11025 Hz (don't use other sample rates!)(не используйте другие значения!)

## 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 have to sound exactly as the reference bi2_polkovnik_syxg50.ogg (2.0MB).

## Как использовать

Для проигрывания MIDI при помощи этого синтезатора необходимо настроить какой-нибудь VST-хост. В качестве него может выступать ваш любимый плеер, только нужно найти соответствующий плагин. В качестве примера ниже приведено несколько инструкций. Для проверки корректности настройки послушайте bi2_polkovnik.mid (35KB) — он должен звучать идентично записи bi2_polkovnik_syxg50.ogg (2.0MB).

### VST 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.

1. Download and install the VST MIDI Driver from this page.
2. Copy the syxg50.dll from this archive into any directory.
3. Open VST MIDI Driver settings, click “Load VSTi” button and choose syxg50.dll.
4. In the Advanced tab choose “VST MIDI synth” as the default MIDI synth.
5. Ready! Now Yamaha S-YXG50 VSTi will be used as the default system MIDI synth.

### VST MIDI Driver (как системный MIDI-синтезатор)

VST MIDI Driver позволяет использовать любой VSTi как глобальный системный MIDI-синтезатор. В данном случае каждая игра или MIDI-плеер, которые используют стандартный системный MIDI-синтезатор, будут использовать Yamaha S-YXG50 VSTi.

1. Скачайте и установите VST MIDI Driver с этой страницы.
2. Скопируйте syxg50.dll из этого архива в любой каталог.
3. Откройте настройки VST MIDI Driver, нажмите кнопку Load VSTi и выберите syxg50.dll.
4. Во вкладке Advanced выберите VST MIDI synth в выпадающем списке Default MIDI synth.
5. Готово! Сейчас Yamaha S-YXG50 VSTi будет использоваться как системный MIDI-синтезатор по умолчанию.

### Yamaha S-YXG50 WDM (an official driver for the Windows XP only)

VST 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 less resources), 2MB version (worse quality, consumes more resources). 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.

### Yamaha S-YXG50 WDM (официальный драйвер только для Windows XP)

VST MIDI Driver поддерживает Windows XP/Vista/7+, но на Windows XP лучше использовать официальный Yamaha S-YXG50 WDM-драйвер, который можно скачать с серверов Microsoft Windows Update: 4MB-версия (лучше качество, расходует больше ресурсов), 2MB-версия (хуже качество, расходует меньше ресурсов). Установка этого WDM-драйвера производится вручную при помощи мастера установки оборудования в панели управления. Не забудьте выбрать Yamaha S-YXG50 как синтезатор MIDI по умолчанию в системных настройках звука. Когда используется Yamaha S-YXG50 WDM, в VSTi версии этого синтезатора нет необходимости.

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

1. Download and install the foo_midi plugin from the foobar2000 website.
2. Create a new subdirectory in the foobar2000 directory and name it “vsti”. Copy the syxg50.dll from this archive into that directory.
3. 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.
4. Preferences → Playback → Input → MIDI synthesizer host. Choose “Yamaha S-YXG50” in the “plug-in” combobox. Apply changes.
5. Ready! Now foobar2000 will play MIDI files using the Yamaha S-YXG50 synth.

### foobar2000 (лучший плеер для тех, кто влюблён в музыку)

foobar2000 не использует системный MIDI-синтезатор, но это не является недостатком. Это позволяет использовать Yamaha S-YXG50 VSTi без установки драйверов в систему, что более надёжно.

1. Скачайте и установите плагин foo_midi с сайта foobar2000.
2. Создайте в каталоге foobar2000 подкаталог с именем vsti и скопируйте в него файл syxg50.dll из этого архива.
3. Откройте в плеере настройки, Advanced → Playback → MIDI Decoder → VSTi search patch, укажите в этом поле полный путь до созданного вами подкаталога vsti, после чего примените изменения и перезайдите в окно настроек.
4. Перейдите в Playback → Input → MIDI synthesizer host. В выпадающем списке plug-in выберите Yamaha S-YXG50, примените изменения.
5. Готово! Теперь MIDI в foobar2000 будут воспроизводиться при помощи Yamaha S-YXG50.

## INI file settings

INI file have to have the same name as the dll file, but with the ini extension. All settings have to be placed in the `[SYXG50]` section.

VoiceTable | Name of the voice table file. If not specified, SXGBIN41.TBL from the DLL resources will be used.
Process | Enables additional sound processing. The exact purpose is unknown. Disabled by default.
XGLite | If 0, Full XG will be used. If 1 or 2, restriction to the XGLite v1 or v2 will be enabled.
DebugPanel | Displays panel with detailed debug information instead of the standard user interface.
DisableGUI | Disables GUI completely. As the result VSTi works as the SGP.DLL from the Yamaha MidRadio 6.

## Настройки в INI-файле

INI-файл должен иметь имя аналогичное имени DLL-файла, но с расширением ini. Все настройки должны находиться в секции `[SYXG50]`.

VoiceTable | Имя файла таблицы голосов. Если не указано, то используется встроенный в DLL ресурс SXGBIN41.TBL.
Process | Включает дополнительную обработку звука. Точное назначение неизвестно. Выключено по умолчанию.
XGLite | Если 0, то используется Full XG. Если 1 или 2, то включается ограничение до XGLite v1 или v2 соответственно.
DebugPanel | Отображает панель с подробной отладочной инофрмацией вместо стандартного интерфейса пользователя.
DisableGUI | Полностью отключает GUI. В результате VSTi работает как SGP.DLL из Yamaha MidRadio 6.

### Template of the syxg50.ini

### Шаблон файла syxg50.ini

`[SYXG50]
VoiceTable=
Process=0
XGLite=0
DebugPanel=0
DisableGUI=0`

## What's new in this patch

## Что нового в этом патче

- Installation isn't required. SYXG50.DLL reads files from the own directory.
- Не требуется установка. SYXG50.DLL теперь всегда читает файлы из своей директории.
- Wavetable files are decrypted and stored in the resources of the DLL file.
- Файлы таблиц звуковых данных расшифрованы и сохранены в ресурсах DLL-файла.
- If you remove them from the resources, VSTi will find them in the own directory (SXGBIN41.TBL, SXGWAVE4.TBL).
- Если же их удалить из ресурсов, то VSTi будет искать их в своей директории (SXGBIN41.TBL, SXGWAVE4.TBL).
- Antidebug, S/N checking and trial mode code were removed.
- Полностью удалён антиотладочный код, код проверки серийного номера и код trial-режима.
- Hidden settings are read from the ini file with the same name as the dll file, but with the ini extension.
- Скрытые настройки читаются из ini-файла с именем, аналогичным имени dll-файла, но с расширением ini.
- Polyphony limit is 128 by default.
- По умолчанию лимит полифонии равен 128.
- More frequent updates of information in the GUI.
- Более частые обновления информации в GUI.
- Help button will be hidden if SYXG.CHM is not present.
- Кнопка Help будет спрятана, если нет файла SYXG.CHM.
- VST meta information is stored in the resources (String Table), so it can be changed easily if it is needed.
- Мета-информация VST находится в ресурсах (String Table), поэтому при необходимости её можно легко изменить.
- GUI can be disabled and GUI resources can be removed, as the result this VSTi will work as the SGP.DLL.
- GUI может быть выключено и ресурсы GUI могут быть удалены, в результате чего этот VSTi будет работать как SGP.DLL.

## DLL resources

This version of the S-YXG50 VSTi supports some modifications of the DLL resources. You can use the Resource Hacker for it.

- The RCDATA section may have embedded wavetable files that are used by default. You can replace or remove them at all. If embedded wavetable files are removed, SYXG50.DLL will use external wavetable files from the own directory.
- In the String Table section, you may edit unique VST ID (4 chars), VSTi meta information, the default name of the voice table file (which also have to be used as the name of an embedded voice table), and help file name.
- You may remove all images from the Bitmap section. In this case VSTi will use the simple debug interface. If you also remove all dialogs from the Dialog section, VSTi will report that it don't have interface and will work like SGP.DLL from the MidRadio 6.

## Ресурсы DLL-файла

Данная версия S-YXG50 VSTi поддерживает некоторые модификации в ресурсах DLL-файла, для чего можно использовать программу Resource Hacker.

- В секции RCDATA могут находиться встроенные файлы wavetable, которые используются синтезатором по умолчанию. Вы можете заменить их, или удалить вовсе. Если их удалить из ресурсов, SYXG50.DLL будет использовать внешние wavetable файлы из своего каталога.
- В секции String Table можно отредактировать уникальный VST ID (4 символа), мета-информацию VSTi, имя файла таблицы голосов по умолчанию (это имя используется и при загрузке таблицы голосов из ресурсов), и имя файла справки.
- В секции Bitmap можно удалить все картинки, в таком случае VSTi будет автоматически использовать простой отладочный интерфейс. Если же впридачу к этому удалить и все диалоги из секции Dialog, то VSTi корректно обработает это, и будет автоматически сообщать хосту, что он не имеет интерфейса, то есть будет вести себя как SGP.DLL из MidRadio 6.

## Extensions of the Voice Table format

Original S-YXG50 VSTi uses voice table from the SXGBIN41.TBL and wavetable from the SXGWAVE4.TBL, the latter file is encrypted. Portable version of the S-YXG50 VSTi adds support of the unencrypted wavetables. In this case the zeroth bit of the byte at the 0x1F offset have to be set to 1. Also it is possible to merge voice table and wavetable files into one file. To do it, set seventh bit of the byte at the 0x1F offset to 1, append wavetable file to the voice table file, set offset to the wavetable at the 0x10 (4 bytes, little-endian), and set the size of the wavetable at the 0x14 (4 bytes, little-endian).

This version of the VSTi includes already decrypted version of the wavetable. It increases the speed of initialization of the VSTi, reduces memory usage, and significantly increases the compression ratio of this VSTi in the archive (encryption greatly increases the entropy). Above mentioned information will be useful for the ones who would like to experiment with some modifications of the S-YXG50 (it needs some reverse engineering skills). Keep in mind that original encrypted wavetable files can be used as external files only. Only unencrypted version can be embedded.

## Расширение формата Voice Table

В оригинальном S-YXG50 VSTi voice table и wavetable хранятся в двух файлах: SXGBIN41.TBL (параметры голосов) и SXGWAVE4.TBL (сырые звуковые данные), причём последний зашифрован. В данной версии S-YXG50 появилась поддержка незашифрованного формата звуковых данных. Для этого в файле с параметрами по смещению 0x1F нулевой бит должен быть установлен в 1. Также возможно сохранить оба этих файла в один. Для этого нужно в файле параметров по смещению 0x1F установить седьмой бит в 1, в конец файла параметров дописать содержимое файла звуковых данных, по смещению 0x10 указать смещение до звуковых данных (4 байта, little-endian), и по смещению 0x14 указать размер звуковых данных (4 байта, little-endian).

В комплекте с данной версией VSTi идёт уже расшифрованная версия wavetable, что увеличивает скорость загрузки VSTi, экономит оперативную память, а также значительно увеличивает степень сжатия архива с полной версией VSTi (шифрование сильно повышало энтропию). Приведённая выше информация пригодится тем, кто пожелает исследовать работу S-YXG50 с целью модификации (это потребует некоторых навыков в реверс-инжиниринге). Имейте в виду, что в ресурсах DLL-файла может использоваться только вариант без шифрования. Оригинальные зашифрованные файлы могут использоваться только как внешние файлы.

## History of the Yamaha's software synths

## История программных синтезаторов Yamaha

Yamaha S-YXG50 was released in 1997. First versions were shipped with the simplified 2MB version of the wavetable, and the full 4MB version was published only in 2001. It seems that the cause of this is low amount of RAM in the computers of 90s. Both versions of the wavetable files were created in 1996 (4MB in February, simplified 2MB in July). Possibly, the full 4MB version is a dump of the WAVE ROM of the Yamaha MU80 / MU50 / QS300 / DB50XG / DB60XG / SW60XG / MU10, because the Yamaha S-YXG50 soft synthesizer is very similar to this series of hardware of 1994-1996.

Yamaha S-YXG50 был выпущен в 1997 году. Первые версии поставлялись с упрощённой 2MB-версией wavetable, и только в 2001 году была опубликована полная 4MB-версия. Скорее всего это было связано с экономией и без того скромного количества свободной оперативной памяти в компьютерах 90-х годов. Судя по датам оригинальных файлов, обе версии wavetable были созданы в 1996 году (4MB — в феврале, упрощённая 2MB — в июле), причём полная 4MB-версия, вероятно, является дампом WAVE ROM из Yamaha MU80 / MU50 / QS300 / DB50XG / DB60XG / SW60XG / MU10, потому что программный синтезатор Yamaha S-YXG50 очень похож на эту серию оборудования 1994-1996 годов.

The first software synthesizer from Yamaha was S-YG20, which was released in 1996. It allows only 22050 Hz sample rate, it supports only GM1 (General Midi level 1), and uses the 1.3MB wavetable file, which was created in July 1996, and it is obviously based on the 4MB wavetable of the S-YXG50. So, even though S-YG20 was released a year earlier than S-YXG50, the source of the wavetable is the same, and S-YXG50 offers the original 4MB version with much better quality. Variants of this set of samples had been used by Yamaha for almost 10 years in various hardware and software products. For example, a reduced version of this set of samples was used in the sound cards based on the Yamaha YMF7xx chipset series.

Первым же программным синтезатором от Yamaha был S-YG20, который был выпущен в 1996 году. У него максимальная частота дискретизации 22050 Hz, он поддерживает только GM1 (General Midi level 1) и использовует wavetable файл размером 1.3MB, созданный в июле 1996 года, который явно основан на 4MB wavetable от S-YXG50. Таким образом, хоть S-YG20 и вышел на год раньше S-YXG50, источник сэмплов у них общий, и в S-YXG50 доступен оригинал гораздо лучшего качества. Варианты этого набора сэмплов использовались Yamaha на протяжении почти 10 лет в различном оборудовании и программном обеспечении. Например, ограниченный набор использовался в аудиокартах с чипами серии Yamaha YMF7xx.

From 1996 to 2003, Yamaha also had released other software MIDI synthesizers based on the different versions of the S-YXG50 engine. In addition to the S-YG20 and S-YXG50, a little more advanced the S-YXG100 was released. It uses the same wavetable as the S-YXG50, but it offers a couple of additional sets of synthesized instruments (VL/PolyVL and SG extensions). Unfortunately, Yamaha had not ported it to the modern versions of Windows, so S-YXG100 is available only as a VxD driver for Windows 98, and it can not be used on the modern operating systems. However, the extensions of the S-YXG100 hadn't become popular, so no great loss there.

С 1996 по 2003 год Yamaha выпускала и другие программные MIDI-синтезаторы, основанные на разных версиях движка S-YXG50. Помимо S-YG20 и S-YXG50 также выпускался и немного более продвинутый S-YXG100, который использует тот же wavetable, что и S-YXG50, но при этом предлагает ещё пару дополнительных наборов синтезируемых инструментов (расширения VL/PolyVL, SG). К сожалению, Yamaha не портировала его под современные версии Windows, поэтому S-YXG100 доступен только в виде VxD-драйвера для Windows 98, и его невозможно установить на современные ОС. Однако, расширения S-YXG100 не получили большой популярности, поэтому потеря не так уж и велика.

Also two special versions of this synthesizer were created. In 1998, S-YXG70 was released for the Final Fantasy 7 game. It is just a hybrid of the S-YG20 and S-YXG50, which allows on-the-fly switching between S-YXG50 and S-YG20 modes. S-YG20 requires much less system resources, so it is used in the most dynamic game scenes. In 1999, the DM extension was released for the Final Fantasy 8. It allows using of instruments from any external DLS file. Unfortunately, both of these special versions of the synthesizer are available as VxD drivers for Windows 98 only.

Особняком стоят две специальные версии этого синтезатора. В 1998 году специально для игры Final Fantasy 7 был выпущен S-YXG70 — гибрид S-YG20 и S-YXG50, который позволяет на лету переключаться между режимами S-YXG50 и S-YG20. S-YG20 использует гораздо меньше системных ресурсов, поэтому он используется в самых насыщенных игровых сценах. В 1999 году для Final Fantasy 8 было выпущено расширение DM, которое позволяет использовать инструменты из внешнего файла в стандартном формате DLS. К сожалению, обе эти версии синтезатора доступны только в виде VxD-драйверов для Windows 98.

In 2003, Yamaha released (as a part of the Yamaha SOL2 package) a trial version of the new S-YXG50 VSTi (S-YXG50.DLL) with the changing volume every 30 seconds as a limitation, but the full version of this VSTi had never been released. Also a limited version of the S-YXG50 VSTi (XGLite only, no GUI) was used as an internal component of the Yamaha MidRadio 6 (SGP.DLL). Soon Yamaha discontinued all its software synthesizers. It seems that the rejection of the release of the already developed VSTi version of the synthesizer was motivated by decision to avoid unnecessary competition for Yamaha's hardware synthesizers. The VxD and WDM driver version of the S-YXG50 have a significant delay, which is suitable for the playing MIDI, but it is not acceptable for the writing music. VSTi-version doesn't have this problem just because VSTi-synthesizers are intended for the writing music. Fortunately, both VSTi versions of this synthesizer have a full version of the S-YXG50 engine. Thus, it is possible to remove the trial restrictions in the S-YXG50.DLL and unlock Full XG support in the SGP.DLL.

В 2003 году Yamaha выпустила (в составе пакета Yamaha SOL2) пробную версию нового S-YXG50 VSTi (S-YXG50.DLL) с изменяющейся каждые 30 секунд громкостью в качестве ограничения, но в итоге он так и не вышел в виде полной версии. Также S-YXG50 VSTi в ограниченном виде (только XGLite, без GUI) был использован как внутренний компонент Yamaha MidRadio 6 (SGP.DLL). Вскоре Yamaha отказалась от поддержки и обновления всех своих программных синтезаторов. Похоже, отказ от выпуска уже разработанной VSTi-версии синтезатора был продиктован банальным желанием не создавать конкуренцию аппаратным синтезаторам Yamaha. Все старые драйверные версии S-YXG50 имеют серьёзную задержку, что подходит для прослушивания MIDI, но непригодно для написания музыки. А вот VSTi-версия лишена этой проблемы, потому что VSTi-синтезаторы в первую очередь и предназначены для написания музыки. К счастью, обе опубликованные VSTi-версии этого синтезатора содержат полную версию движка S-YXG50. Таким образом, возможно удалить ограничения пробной версии в S-YXG50.DLL и разблокировать поддержку Full XG в SGP.DLL.

However, it seems that Yamaha continued to develop its software synthesizer for internal using. Yamaha MidRadio 7 was released in 2006, and it uses SGP2.DLL for the MIDI playback. SGP2.DLL is a VSTi synthesizer (without a GUI), which uses heavily reworked code of the S-YXG50 VSTi. Its name is S-YXG2006LE. This synth sounds much different from the S-YXG50, because it uses the new wavetable, which uses the new high quality samples. But sometimes it sounds unbalanced, and the main drawback of the S-YXG2006LE is XGLite only support. At this moment it is unknown if it is possible to unlock Full XG support in this synth.

Однако, похоже, что для внутреннего использования Yamaha продолжила разработку программной версии своего синтезатора. В 2006 году вышел Yamaha MidRadio 7, внутри которого для проигрывания MIDI используется SGP2.DLL, который в свою очередь является VSTi-синтезатором (без GUI), который работает на серьёзно переработанном коде S-YXG50 VSTi, и который именует себя S-YXG2006LE. Но этот синтезатор звучит совершенно иначе, поскольку использует новый wavetable, в котором используются сэмплы более высокого качества, но которые звучат не всегда сбалансированно. Главным же недостатком S-YXG2006LE является поддержка только XGLite, и возможно ли в нём активировать Full XG на момент написания этих строк неизвестно.