Программный MIDI-синтезатор для Windows, который работает как VSTi-плагин. Поддерживает расширения Yamaha XG и Roland GS, что является уникальной особенностью S-YXG50. Был частью пакета Yamaha SOL2. Yamaha прекратила поддержку данного программного синтезатора в 2003 году, поэтому была создана переносимая версия этого VSTi, не требующая установки и ключей в реестре. Используется встроенная в ресурсы DLL-файла официальная 4MB-версия wavetable, лучше которого для S-YXG50 не выпускалось.
Скачать: yamaha_syxg50_vsti.7z (3.0MB).
Что нового в этом патче?
- Не требуется установка. SYXG50.DLL теперь всегда читает файлы из своей директории.
- Файлы таблиц звуковых данных расшифрованы и сохранены в ресурсах DLL-файла.
- Если же их удалить из ресурсов, то VSTi будет искать их в своей директории (SXGBIN41.TBL, SXGWAVE4.TBL).
- Полностью удалён антиотладочный код, код проверки серийного номера и код trial-режима.
- Скрытые настройки читаются из ini-файла с именем, аналогичным имени dll-файла, но с расширением ini.
- По умолчанию лимит полифонии равен 128.
- Более частые обновления информации в GUI.
- Кнопка Help будет спрятана, если нет файла SYXG.CHM.
- Мета-информация VST находится в ресурсах (String Table), поэтому при необходимости её можно легко изменить.
- GUI может быть выключено и ресурсы GUI могут быть удалены, в результате чего этот VSTi будет работать как SGP.DLL.
Этот патч никак не влияет на синтез звука оригинального VSTi. Это было протестировано на сотнях MIDI-файлов, чтобы убедиться, что вывод побитово идентичен оригинальному S-YXG50 VSTi с теми же настройками.
Как использовать
Для проигрывания MIDI при помощи этого синтезатора необходимо настроить какой-нибудь VST-хост. В качестве него может выступать ваш любимый плеер, только нужно найти соответствующий плагин. В качестве примера ниже приведено несколько инструкций. Для проверки корректности настройки послушайте bi2_polkovnik.mid (35KB) — он должен звучать идентично записи bi2_polkovnik_syxg50.ogg (2.0MB).
VSTi MIDI Driver (как системный MIDI-синтезатор)
VSTi MIDI Driver позволяет использовать любой VSTi как глобальный системный MIDI-синтезатор. В данном случае каждая игра или MIDI-плеер, которые используют стандартный системный MIDI-синтезатор, будут использовать Yamaha S-YXG50 VSTi.
- Установите Falcosoft VSTi MIDI Driver.
- Если у вас Windows 8 и новее, также установите Coolsoft MIDI Mapper.
- Скопируйте syxg50.dll из yamaha_syxg50_vsti.7z в любой каталог.
- Откройте настройки VSTi MIDI Driver, нажмите кнопку Load VSTi и выберите syxg50.dll.
- Откройте MIDI Mapper и выберите VST MIDI synth в выпадающем списке Default MIDI synth.
- Готово! Yamaha S-YXG50 VSTi будет использоваться как системный MIDI-синтезатор по умолчанию.
Yamaha S-YXG50 WDM (официальный драйвер только для Windows XP)
VSTi 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 (лучший плеер для тех, кто влюблён в музыку)
foobar2000 не использует системный MIDI-синтезатор, но это не является недостатком. Это позволяет использовать Yamaha S-YXG50 VSTi без установки драйверов в систему, что более надёжно.
- Скачайте и установите плагин foo_midi с сайта foobar2000.
- Создайте в каталоге foobar2000 подкаталог с именем vsti и скопируйте в него файл syxg50.dll из yamaha_syxg50_vsti.7z.
- Откройте в плеере настройки, Advanced → Playback → MIDI Decoder → VSTi search patch, укажите в этом поле полный путь до созданного вами подкаталога vsti, после чего примените изменения и перезайдите в окно настроек.
- Перейдите в Playback → Input → MIDI synthesizer host. В выпадающем списке plug-in выберите Yamaha S-YXG50, примените изменения.
- Готово! Теперь MIDI в foobar2000 будут воспроизводиться при помощи Yamaha S-YXG50.
Ссылки
- yamaha_syxg50_vsti.7z (3.0MB) — версия со встроенным 4MB wavetable, для обычного использования.
- yamaha_syxg50_vsti_ext.7z (4.0MB) — версия с внешними 2MB и 4MB wavetable, для экспериментов.
- bi2_polkovnik.mid (35KB) и bi2_polkovnik_syxg50.ogg (2.0MB) — MIDI и пример его корректного звучания для проверки корректности настроек вашего плеера и работоспособности самого VSTi.
Wlad, если вас интересует чтение семплов и их разрядность — то я вам уже указывал, где находится соответствующий код.
Внешняя частота дисктеризации задаётся хостом VSTi, и S-YXG50 умеет обрабатывать фиксированный список из частот дискретизации. Его можно увидеть в этой функции. А вот в этой функции можно увидеть, что для 11025 и кратных какой-то коэффициент возвращается как 44100*32=1411200, а для 48000 и кратных возвращается просто 48000. Если честно, без понятия что за оно. Но отчётливо видно, что 48000 среди поддерживаемых частот дискретизации, и он заявлен среди поддерживаемых в документации. А самое главное — 48000 вообще является стандартной частотой дискретизации в цифровом звуке. 44100 был введён Sony для CD Audio, но как правило все остальные ориентируются всё равно на 48000. У меня даже современные колонки Edifier R28000 работают ощутимо лучше, если их ресиверу отдавать звук в 48000 вместо 44100. Хотя признаю, я не знаю на какую именно частоту дискретизации ориентировалась Yamaha, это просто догадка. Разницы между 44100 и 48000 в S-YXG50 не слышу — сконвертировал MIDI в WAV с разной частотой дискретизации и провёл ABX-тест, который это показал. В спектрограмме можно увидеть, что при 48000 используются частоты со всего доступного спектра, то есть синтезатор честно синтезирует звук сразу с частотой дискретизации 48000 Гц, речи о том что это передискретизация с 44100 нет. Однако, также могу сказать, что в то же время 96000 поддерживается с ошибкой — это отчётливо слышно на bi2_polkovnik.mid, звук становится слишком глухим. Возможно, в коде для 96000 устанавливается какой-то неправильный коэффициент. Думаю как-нибудь поиграться с этим.
Возможно, мне просто медведь на ухо наступил, поэтому и не слышу разницы между отрендерёнными MIDI в 44100 и в 48000. Если вы слышите разницу — почему вы считаете, что именно в 48000 у вас вышло «получил кучу пересчётов, из за того что тон синта как раз и нарушался»?
Рекомендую отрендерить один и тот же трек с частотами дисктеризации 44100 и 48000, а потом сравнить полученные файлы на слух при помощи слепого ABX-теста, чтобы выяснить, действительно ли вы слышите между ними разницу. Чтобы избежать возможной разницы в воспроизведении звука с разной частотой дискретизации вашей аудиокартой, можно файл с частотой дискретизации 44100 дополнительно перегнать в 48000 хорошим ресемплером (например, при помощи foobar2000), и сравнивать уже два этих файла с частотой дискретизации 48000, один из которых изначально был отрендерён при помощи S-YXG50 с частотой дискретизации 44100.
Не рекомендуемая техника. Уменьшается занимаемый объём на диске в установленном виде (размер скачиваемого из интернета архива остаётся почти тем же), но замедляется загрузка и увеличивается расход оперативной памяти. Например, если конвертировать при помощи foobar2000 MIDI в WAV в 8 потоков, при использовании распакованной DLL в память реально будет загружена одна копия (Windows умеет загружать одну и ту же DLL единожды для всех процессов), плюс при необходимости сбросить какие-то страницы памяти, принадлежащие этому файлу, они не будут записаны почём зря в своп, ОС их просто прочитает из исходного файла когда понадобится. В случае же с использованием упаковщиков типа UPX все эти преимущества сходят на нет. Объёмы жёстких дисков и SSD сейчас достаточно велики, чтобы не заниматься подобной экономией ценой производительности. Тем более, что файловые системы поддерживают сжатие на лету, и если кому-то важно сэкономить пространство на диске ценой процессорного времени, могут просто включить сжатие в файловой системе ОС (под виндой поддерживается в NTFS).
Здравствуйте VEG.
По поводу упаковки файлов, я с вами согласен, я признаться не знал что Windows умеет загружать одну и ту же DLL единожды
для всех процессов, поэтому если кому нужен Sound Canvas VA v1.0.3 Portable с распакованными DLL, вот ссылка :
https://yadi.sk/d/Lqra5OOG3GPATJ
К архиву с распакованными DLL я добавил в конце букву "u", т.е. Unpack, - Sound Canvas VA v1.0.3 Portable u
VEG, хочу вас поблагодарить за подсказку с частотой дискретизации, лучше и не нужно, мне многое стало понятно, спасибо вам.
По поводу :
Я как то до этого не правильно всё это сказал, дело в том что я сами семплы в синтезатор пытался запихать 48000,
и как я только не пытался это сделать, всё сводилось к пересчётам тонов и полутонов (также и в центах), т.к. на выходе
синтезатора не зависимо от ч.д. всё равно нарушался тон, в общем это оказалось очень сложной процедурой, и мне пришлось
отказаться от этой идеи.
VEG, прошу меня простить за беспокойства, но вот всё ни как не могу понять по поводу разрядности, не сочтите за наглость, но
всё же решился спросить, как можно принудительно включить 16-бит ?, или где и от каких условий разрядность включается? ,
дело в том что какие я только условия не создавал на основе данного примера синтезатору, эта функция влияла только на время
затухания семпла, или затухание семпла вообще пропадало, к сожалению так разрядность ни как и не включилась :(,
подскажите пожалуйста нам как это сделать, и я вам обещаю что не буду больше вас беспокоить своими вопросами, а также
многие вам за это скажут спасибо.
Дело в том, что меня могут резко и неожиданно в любой момент забрать в командировку, приблизительно на пару месяцев,
и у меня на вряд ли будет пока возможность заниматься полноценно проектом, поэтому я хочу приобрести планшет на Windows
или какой нибудь нетбук, и на нём если будет свободное время, заниматься изучением движка, думаю начну сразу с подсказок,
которыми с нами поделился VEG.
Так же хочу выложить проект, на основе Ymf-724, который и будет дальше развиваться не меняя своего курса, и не будет больше
переименовываться. В этом проекте готовы практически все таблицы, и все они разделены по категориям, осталось закончить
совсем не много, и займусь схематическим представлением структуры.
В этом проекте, мы с Alexysем уже добавили три новые бас бочки и один рабочий барабан Snare H в Standart kit, так же заменил
Saw OSC (пилообразный осциллятор), на более качественный, а так же заменил и синусоиду.
Список инструментов относящихся к Saw OSC.
AnaBrs1, AnaBrs2, AnaVelBrs, JumpBrss*, PolyBrss, RezSynBr, SoftBrs, SynBras1*, SynBras3*, SynBras4*, Trmbone2, VelBras2
Bass+Lead, BigFive*, Big+Low, DigiSaw*, Dr.Lead*, DunaSaw, FifthLead*, HeavySyn, PulseSaw*, Saw2, SawLead, SeqAna, SquareLd*
ThickSaw*, VeloLead*, WaspySyn, PolySyPd*, EchoPan, EchoBell*, Hichriki, AcidBass, ClaviBass, FastResBass, Hammer, MelloSB1,
ModularBass, RubberBass, SeqBass, SynBass2, SynBa1Dk, SynBa2Dk, TeknoBass.
*- Это микш Saw OSC с другим слоем.
Сам проект : https://yadi.sk/d/M8oUQynu3GNxkC
Wlad, хочу найти планку оперативки ддр2 на 4 гига. Стоит ли это делать? Я про б/у вариант. Какие тут могут быть подводные камни?
Wlad 2, 4гб одной планкой не советую ставить, просто ставить ее одну нет смысла, т.к. получится одноканальный режим, а для
активации двухканального режима, нужно ставить оперативку парами, например 2х2гб или 2х4гб, да и не каждая материнка
поддерживает 4-х гиговую планку, может получится так что из 4гб материнка увидит 2гб, это в лучшем случае, а в худшем
вообще не стартанёт. Так же советую устанавливать озу одной фирмы с одинаковыми таймингами (например 4-4-4-12 и т.п),
а то из за разношерстной памяти могут иногда получится довольно серьёзные глюки, например комп самопроизвольно будет
перезагружатьса не с того не с сего, появляться синий экран смерти (DSOD), а также "Память не может быть read\written"
Wlad, значит две планки по 4 гб. В Минске нашёл только одной фирмы предложение за 150 рублей новые, где-то так. А вот б/у дешевле можно найти?
Wlad 2, на счёт цен ничего сказать не могу, т.к. сам живу в России, а так в общем советую брать новые и одной серии , да, дороже,
но так в любом случае надёжнее и спокойнее будет. Раньше по дешевле брал пачками DDR2 бу из за выгодных предложений,
но увы, часть слотов долго не проработало, и в итоге себе дороже вышло, к тому же DDR2 менее надёжная чем скажем DDR3,
и тут ещё зависит от конкретной серии и производителя, в общем решать конечно тебе, но по своему опыту с DDR2 могу сказать,
что скупой платит дважды !
Да, конечно, я с тобой согласен.
Wlad, было появилось немного свободного времени, тестировал тот банк, где ты добавил Дэнс кит (28). По-началу я не заметил, а теперь вылезло. Хэт открытый (нота си бемоль) не регулируется по высоте. Иными словами, где-то ошибка по питчю и по громкости. Эти параметры выставляются в систем эксклюзив. Но, в других миди, вроде всё нормально. Я думаю, что где-то там ошибка, именно в посыле команд синтезатору.
И ещё. У друга есть спаленая ХГ карта, модель уточню в бижайшее время. Можно ли снят дапм в таком случае7
Wlad 2, будет время, покопаюсь в Дэнс кит, постараюсь отыскать где там собака зарыта, скорее всего это где то в настройках конфига самого открытого хэта. Что касается XG карты по поводу снятия дампа, если это Ymf 724, Ymf 740, Ymf 744, или Ymf 754, то дамп с неё сделать не выйдет, т.к. вся эта серия плат использует внешний банк и все остальные потроха, которые уже перенесены на софтсинт, а вот если DB50XG или SW60XG, или их аналоги, тогда конечно с этих плат дамп сделать можно, даже я бы сказал нужно, т.к. в них другой банк и настройки которые можно так же перенести на софтсинтезатор. Ну а SW1000XG, думаю на вряд ли у кого нибудь сгорит.
Wlad, сопоставил вот это:
с вот этим:
И появилась идея с чем это может быть связано. На картинке с кодом хорошо видно, что 16-битные версии функций выбираются как раз в случае когда какой-то байт равен нулю, и 8-битные версии функций выбираются когда этот байт равен 0x80.
Подумалось вот что: если взять PCM 8-bit, и начать воспроизводить его как PCM 16-bit, то мы как раз услышим, что скорость воспроизведения увеличилась в 2 раза и появился некоторый шум, поскольку каждый нечётный байт 8-битного семпла у нас будет попадать в младший байт 16-битного семпла, что и будет создавать шум. Может быть именно этот факт, что если читать 8-битный звук как 16-битный, то он будет разборчивым, но с шумом, сбил вас с толку, и вы решили, что меняется частота дискретизации? Кстати, откуда вы взяли именно 22050 и 44100 здесь, или эти цифры вы просто привели для примера, просто исходя из факта, что воспроизведение становится в 2 раза быстрее, если этот байт равен нулю?
Доброго вам вечера VEG.
Дело в том, что если в табличках поставить код 00h вместо 80h, то увеличится скорость чтения семпла ровно в двое, за счёт того
что синтезатор начинает читать семплы по два байта (не путать с 16-бит), но воспроизводит всё равно последовательно по одному
байту (8-бит), именно отсюда и получается скорость 8-ми разрядных данных вдвое выше. Соответственно разрешение семпла
всё равно составляет один байт, который равен 255-ти единицам информации, и при этом размер банка увеличивается ровно
в двое, 22050-8 *2 = 44100-8.
В случае с 16-ти бит, синтезатор должен читать семпл по два байта (что он сейчас и делает), и воспроизводить также
с разрешением в два байта (уже в 65535 единиц информации). Если сейчас синтезатору указать на 16-битный семпл, то он
воспроизведёт двухбайтное разрешение семпла последовательно по одному байту, т.к. он думает что это 8бит, что и приводит
к страшным искажением в звуке из за не правильного воспроизведения (интерпретации данных). Здесь также размер файла
увеличивается ровно в двое, но ч.д. остаётся прежней, 22050-8 * 2 = 22050-16.
Меня всё это натолкнуло на мысль, что если это не тот кусок кода который читает семплы, а нужен тот кусок кода который их
воспроизводит. Дело в том, что у Андрея Ревво две эти таблички конфигов семплов абсолютно идентичные моим
(т.к. это один и тот же синтезатор), а другие таблицы им не затронуты, т.е. он указал синтезатору в таблицах двухбайтное чтение
семплов (как и я), и где то в коде указал синтезатору воспроизводить семплы по два байта (с разрешением в 16-бит
в 65535 единиц информации), а в данном случае синтезатор воспроизводит всё в однобайтном разрешении в 255 единиц
информации, не зависимо от того по сколько байт он читает семплы.
Здесь https://yadi.sk/d/YIBy3KRJ3GXSg9 находится банк EXTENDED Андрея Ревво.
EXTENDED.YB0 - это и есть сам 16-ти битный банк, который идентично подходит к синтезатору YMF 724 44100
( https://yadi.sk/d/eDhLoXlJ3EERyK ) согласно таблицам, и размер у этих банков так же идентичен (44100-8 = 22050-16), его смело
можно переименовать в YmF724.smp, и услышать в синтезаторе, что семплы позиционируются правильно, также как и их циклы,
и скорость, а звук интерпретируется не правильно.
(пока это писал, вспомнил что Андрей Ревво на своём сайте пишет в FAQ, что проигрывание 8/16-бит семпла в режиме Loop.)
EXTENDED.YB1 - Он же WF_STRUCTURE (WaveForm Structure), абсолютно идентичен тому который находится в YmF724.tbl
(достаточно сравнить)
EXTENDED.YB2 - Он же DRW_STRUCTURE (DrumWave Structure), так же абсолютно был идентичен тому который находится
в YmF724.tbl, только в каждом конфиге я поставил значения фильтра 7F, а резонатора 11, что бы улучшить барабаны, это и всё
отличие от EXTENDED.YB2.
EXTENDED.YB3 - Предположительно использовался программой Power Ymf для распаковки, а также при сборке банка
(эта таблица в драйверах и в синтезаторе отсутствует)
Всем привет !
Выкладываю обновлённый проект, исправил в нём некоторые ошибки, и для пробы создал пять новых инструментов в новом
банке на основе заменённых осцилляторов. https://yadi.sk/d/SEYy9oCW3GYf3t
В общем, заменён Saw OSC, Pulse OSC, и Digi saw OSC.
Saw OSC:
AnaBrs1, AnaBrs2, AnaVelBrs, JumpBrss*, PolyBrss, RezSynBr, SoftBrs, SynBras1*, SynBras3*, SynBras4*, Trmbone2,VelBras2,Bass+Lead,
BigFive*, Big+Low, DigiSaw*, Dr.Lead*, DunaSaw, FifthLead*, HeavySyn, PulseSaw*, Saw2, SawLead, SeqAna, SquareLd*,ThickSaw*,
VeloLead*, WaspySyn, PolySyPd*, EchoPan, EchoBell*, Hichriki, AcidBass, ClaviBass, FastResBass, Hammer, MelloSB1, ModularBass,
RubberBass, SeqBass, SynBass2, SynBa1Dk, SynBa2Dk, TeknoBass.
Pulse OSC:
SqrBass, Big+Low*, Dr.lead*, Hollow, LMSquare, SoftWurl*, Square2, SquareLd*, SquarPad, SinePad, Round Glockenspiel,
Digi saw OSC:
Digital Sawtooth, Tine Pad, Bell Harp
Новые инструменты находятся в банке 123, создавал исключительно для пробы осцилляторов.
38=Synth Bass Dig, 39=Rubber Bass pulse, Digi synth Brass, Lead Pulse w, и Saw lead Ett.
P.S. Напомню, что всё считается от нуля, как банки так и патчи.
Всем доброго времени суток.
Разобрался я наконец с движком, а также и модифицировал его. Нашёл наконец то те места где включается разрядность,
оказывается для инструментов одна подпрограмма чтения семплов, а для барабанов другая, всё это делается совместно с
64-х разрядными регистрами MMX, теперь синтезатор стал 16-бит ! Прощайте искажения и шум ! :)
Также в этих же подпрограммах меняется и частота дискретизации, например movd mm0,[edx+edi*2], здесь видно что семплы
читаются по два байта, и при 16-ти битах ч.д. равна 22050, а если эту команду изменить на movd mm0,[edx+edi*4], то синт начинает
читать семплы по четыре байта, из за чего и увеличится скорость чтения/воспроизведения семпла, и в итоге мы получаем
44100 16-бит (проверено), и ко всему этому также увеличивается и длинна волны семпла ровно вдвое.
Также мне удалось увеличить размер банка до 1,5гб ,и это отличный результат для этого синтезатора, более 1,5гб движок
отказывается загружать в память, я даже смотреть не стал почему, т.к. больше и не надо. Чтобы добиться такого обьёма, пришлось
сдвинуть некоторые значения в табличках, и использовать неиспользуемые значения, при этом немного дописать код в двух
подпрограммах, что бы расширить эти два счётчика, всё это делалось в Ollybdg 2.01
Примеры изменения в таблицах :
Instrument table
00--2DF7--00--292A--00--1A7C--[2C6D72]--8000--0022 ;oreg
00--2DF7--00--292A--00--1A7C--[002C6D72]--80--0022 ;new
Drums table
3C706603335F5F7F0000017F105E4040FFFF51--0FCF--00--0C84--[242B80]--000006 ; oreg
3C706603335F5F7F0000017F105E4040FFFF51--0FCF--0C84--[00242B80]--000006 ;new
Как видно в квадратных скобках, адресация на семплы расширилась на один байт, из за чего и был перешагнут порог в 16мб.
Я бы хотел поблагодарить VEGа за подсказки, в которых было заложено начало изучения движка, и также хочу показать
где находятся функции, которые мне удалось найти.
По адресу : 1AD60h - подпрограмма чтения семпла инструментов, если код в табличке равен 00h (чтение семпла по два байта)
По адресу : 1AE30h - подпрограмма чтения семпла барабанов, если код в табличке равен 00h (чтение семпла по два байта)
В этих двух подпрограммах есть команда : mov eax,80008000h, её нужно заменить на mov eax,00000000h, и тогда ограничение
разрядности в 8-бит будет убрано. Чуть ниже будет команда : movd mm0, [edx+edi*2], которая отвечает за количество читаемых
байт.
Если код в таблице равен 80h, то уже другие две подпрограммы читают семплы которые находятся по адресам : 1ABB0h и 1AC90h,
по сути они практически идентичные предыдущим, только чтение происходит по одному байту.
Также привожу адреса где обрабатываются конфиги семплов, для инструментов и барабанов.
Чтение таблиц конфигов инструментов : 15620h
Чтение таблиц конфигов барабанов : 138F0h
По этой ссылке находится синтезатор моего проекта : https://yadi.sk/d/KoAblPkv3GtnH3
Сейчас он работает в режиме 22050-16бит, и у него заменена Дистошн гитара (бета), и Finger Bass, подробнее :
00-(33)=Electric Bass finger
18-(33)=Finger dark
27-(33)=Flange Bass
40-(33)=Bass & Distorted E.Gtr
41-(25)=SteelGtr with BodySound
43-(33)=Finger Slap Bass
45-(33)=Finger Bass 2
65-(33)=Modulated Bass
96-(35)=Synth Fretless
У меня есть вопрос к VEGу. VEG, подскажите пожалуйса, как мне на Flat Assemblere написать программку, которая бы умножала
на два трёхбайтные значения в таблице, которые находятся с шагом 0Fh как на скриншоте : 16 Wave Structure.png помеченые
красным цветом : https://yadi.sk/i/IwwLG_fH3Gtpjd
дело в том, чтобы конвертировать банк в более качественный, он увеличивается в размере, и эти значения также нужно
увеличивать в двое, т.к. это указатели на семплы, но у меня не получается с этим разобраться, и приходится всё это считать
вручную :(, на что уходит много времени, сил, а также допускаются ошибки. Напишите пример для 16 Wave Structure ?
https://yadi.sk/d/Fq26l0CD3GtpGe если согласитесь, буквально на днях выложу синт Ymf-44100-16 (родной), т.к. это
единственный недостающий инструмент в проекте без которого как без рук, а для таблицы барабанов (05 Drums Samples),
на основе вашего примера, я пойму как это делается, и сам переделаю его для второй таблицы.
Адресное пространство у 32-разрядных процессов по умолчанию ограничено 2 гигабайтами. Какие-то адреса занимает код синтезатора. Слишком большой непрерывный участок адресного пространства система просто не может предоставить синтезатору. В вашем случае система нашла непрерывный участок в 1.5 гигабайта. У кого-то другого может быть меньше в зависимости от VST-хоста (VST-хост тоже ведь находится в этом же адресном пространстве и тоже какую-то его часть занимает). То есть на полном серьёзе больше чем на гигабайт лучше не рассчитывать, чтобы с особо толстыми VST-хостами не было проблем.
Оно просто отнимает от 16-битных семплов число 0x8000. Для 8-битных семплов оно тоже отнимает 0x80. Просто конвертирует из unsigned PCM в signed PCM (или наоборот). Если у вас работало неправильно — значит вы подавали PCM не в том формате, в котором ожидал синтезатор. Например, синтезатору нужен 16-bit unsigned (беззнаковый) PCM, а вы подавали 16-bit signed (знаковый) PCM. То есть достаточно сохранить семплы в правильном формате и правок в коде не понадобится. Тем более, что 8-битные семплы хранятся так же, как и 16-битные, и к ним применяется то же преобразование.
Возможно, вас ввёл в заблуждение формат WAV, в котором наблюдается неконсистентность в этом вопросе — для 8-битного звука там используется unsigned, а для 16-битного звука там используется signed. Если вы брали сырые данные из WAV, то понятно, почему возникла проблема. Просто из-за того что WAV использует не тот формат чисел для 16 битов.
Кстати, как я уже говорил, в 4-мегабайтном банке в файле семплов, если его прослушивать напрямую, некоторые семплы, судя по всему, в 16-битном виде. Потому что при прослушивании в 8 битах там беспорядочный шум, а при прослушивании в 16 битах там появляются узнаваемые семплы. Посмотрите во второй половине файла, почти сразу после середины один участок, и в конце файла — второй участок.
И опять же, откуда вы взяли цифру 22050? Её в коде здесь нигде нет. Да, читаются семплы по 2 байта, но нет ни одного указания на частоту дискретизации (сколько раз в секунду берётся новый семпл).
*2 здесь не задаёт количество байт, оно задаёт лишь смещение, начиная с которого будет читаться байт. В edi находится номер нужного семпла откуда читаем, в edx находится начальное смещение. Добавляем к начальному смещению (edx) номер нужного семпла умноженный на два (edi*2) — и получаем смещение откуда нужно читать следующие семплы. Функция movd всегда читает по 32 байта. Просто версия функции с MMX для оптимизации обрабатывает семплы парами. Именно поэтому оно загружает и значение 0x80008000 а не просто 0x8000 — чтобы за одну инструкцию отнять это число сразу от двух семплов. В версии функции без MMX вы увидите идентичный алгоритм, но который обрабатывает семплы по одному.
Судя по коду, из-за этой операции вы скорее получите пропуск каждого нечётного семпла. То есть то же самое, если вы в исходном файле просто выбросите все нечётные семплы — правок в коде не понадобится.
Как я уже говорил, они не одни. В зависимости от возможностей процессора и настройки Process выбирается один из трёх наборов функций. Вы исследовали только один набор, который активируется при наличии MMX и выключенном Process. Если вносить правки в эти функции, то надо вносить их и в дублирующие эту функциональность функции. Однако, возможно что здесь правки и не нужны по описанным выше причинам.
Если я не ошибся насчёт знакового (signed) и беззнакового (unsigned) PCM, то здесь прям напрашивается доработка, которая позволила бы из tbl-файла выбирать не только разрядность (8bit/16bit), но и наличие знака (signed/unsigned). Чтобы движок сам по себе был более универсален. Запишу это себе в блокнот с хотелками.
Тем не менее, спасибо огромное за информацию, теперь понятно, почему функций чтения семплов по 2 штуки для каждой разрядности — одна функция для чтения барабанов, вторая для чтения обычных инструментов. Также спасибо за адреса функций что читают конфиги инструментов и барабанов.
И опять возникает вопрос, почему вы считаете, что оригинальные семплы там с частотой дискретизации 22050? Я слушаю файл семплов и слышу, что многие из них звучат с нормальной скоростью только при 11025 или 12000. Обратите внимание, например, на звук вертолёта, зажигания, тормозов, пролетающей гоночной машины или смех — тут вы можете быть уверены в том, как оно должно звучать в жизни, чтобы прикинуть, какая там реально частота дискретизации.
Где будут взяты семплы с частотой дискретизации в 2 (и более) раза выше оригинальной? Если это будет конвертация из оригинальных семплов — то смысла в этом немного. После того как качество семплов было урезано в 1996 году при создании этого набора звуков, вернуть назад его без наличия оригинальных семплов не получится.
Я думаю лучше всё же это дело оформить в виде «скрипта» на FASM, который будет собирать из кучи файлов один большой tbl-файл с конфигом и семплами. Для этого надо написать скрипт, который разобьёт файл с семплами на кучу мелких файлов (каждому семплу отдельный файл) и сгенерирует файл для сборки этих файлов обратно, но только чтобы все смещения там вычислялись автоматически. То есть замените один файл семпла — и все нужные значения в табличке пересчитаются в соответствии с его новым размером, адреса всех семплов что за ним соответствующим образом сдвинутся. Я могу это сделать. Не на FASM, писать такие вещи на таком низкоуровневом инструменте — это лишняя трата времени. Я напишу сам себе небольшой скриптик на C# Script, который разобьёт оригинальные файлы семплов на кучу маленьких и сделаю файл сборки всего этого, уже на FASM (то есть собирать обратно можно будет им). Только мне нужна точная информация где в tbl-файле находится таблица семплов и описание всех байт в каждой записи для одного семпла.
Я так понимаю, так выглядят записи для каждого инструмента или барабана. Мне нужно знать где находятся таблицы этих инструментов и барабанов в маленьком tbl-файле (номер секции, как я понимаю) и описание смысл каких байт вам известен. Эта информация поможет мне сгенерировать удобный для редактирования FASM-файл, где каждый осмысленный параметр будет удобно менять. Например, оно может выглядеть как «drumcfg 25, 80h, ...» где 25 — это номер семпла барабана (каким по счёту он подключён в файл семплов), и соответствующий макрос автоматом в нужные места подставит смещение и размер семпла, а дальше перечисляются какие-то другие параметры, связанные с этим семплом, которые тоже автоматически подставятся в нужные места.
P.S. Если не секрет, чем вызвано то, что у вас все переносы в сообщении расставлены вручную? При изменении ширины текста на сайте поплывёт же всё =( Например, сделайте размер окна браузера меньше — и вы увидите, что ваш текст из-за этого неправильно переносится. Может быть, вы для набора сообщения используете notepad.exe, и это он шалит?
Доброго вам вечера VEG.
Понятно насчёт 1,5гб ,на вряд ли конечно столько понадобится :).
Кажется я понял где допустил эти две грубые ошибки. Знать бы конечно ещё на чём конвертировать этот 16-bit unsigned формат..., в любом случае я стремился к 16-bit signed, и наконец то нашёл то что нужно, а в случае с movd mm0, [edx+edi*2], это многое обьясняет, теперь мне ясно за счёт чего появлялась увеличение скорости семпла :).
В любом случае, так как они сделали в предположительно 16-бит семплы, которые занимают много места и звучат хуже 8 бит из за уровня шума который зашкаливает, это не допустимо.
Если быть честным, то я уже в этом не уверен, похоже в этом Wavetable могут быть семплы склеены разной ч.д. и разной разрядности, но т.к. все они unsigned, похоже и видны все в одном файле.
Я даже и не знал об этом, что же вы раньше не сказали, просто у меня монитор 27дюймов https://market.yandex.ru/product--asus-vg278he/8429215 и я думал если выровнять текст, то так будет лучше, а оказалось наоборот. :), даа, я действительно часто использую блокнот, спасибо за ссылку, буду исправлять также эту ошибку.
Что касается информации, постараюсь всё сделать в лучшем виде, все назначения байт мне известны, скоро будет готово.
Там по сути дела у каждого семпла нужно просто инвертировать самый старший бит для конвертации. Получить чистый RAW-файл без заголовков в таком формате можно при помощи декодера FLAC. То есть сразу кодируете семпл в FLAC (это преобразование происходит без потерь), а затем при помощи flac.exe его можно декодировать обратно напрямую в RAW с нужным вариантом PCM. Вам нужны будут эти параметры командной строки (впрочем, запустите
flac --help
и там будет справка):Если возникнут трудности, напишу пример. Этот способ можно использовать для автоматической конвертации через bat-файл.
Вручную через GUI можно это же сделать при помощи Wavosaur. Там можно как импортировать из сырых файлов (с гибкими настройками), так и экспортировать в сырые файлы без заголовков также с указанием нужных параметров.
Действительно, я тоже слышу некоторый фоновой шум. А вы знаете какие инструменты используют эти семплы? Если эти инструменты использовать из синтезатора, слышен ли этот шум? Если нет, то возможно, мы упускаем какой-то нюанс и читаем семплы не совсем верно.
А я всё гадал чем может быть вызвано такое странное форматирование. Потом вспомнил про эту статью про блокнот — решил, может это как раз и есть результат этого форматирования :) Кстати, если нужно использовать моноширный текст — можно использовать теги
<code>код в строке</code>
или<pre>код отдельным блоком с сохранением пробелов</pre>
. Выше я как раз сделал блок при помощи<pre>
. Это по сути стандартный набор тегов HTML (некоторые из них разрешены в комментариях:a
,b
,i
,blockquote
,code
,pre
). Надо будет как-нибудь к форме комментирования кнопки прикрутить для удобной вставки этих тегов. Если честно, никогда раньше не думал, что тут в комментариях вдруг развернётся такая большая дискуссия :)Да, сделайте кнопки !! Думаю, все будут довольны.
Alexys, готово =)
Wlad, можете также заодно указать в каком порядке логичнее всего было бы указывать эти параметры в человеческом виде, и какой формат для каких из параметров более подходящий — 16-ричный, 10-тичный и т.д. Я макросами сделаю чтобы оно автоматом преобразовывалось в записи с байтами в нужном порядке. Учтите только, что я не музыкант, и какие-то названия параметров мне могут быть не ясны (но я в этом случае просто спрошу что непонятно). Задача такая — сгенерировать подробный FASM-файл, который было бы более удобно редактировать, при этом он (если без внесения изменений) должен собираться обратно в идентичный исходному tbl-файлу (или tbl-файлам).
Всем доброго вечера.
Всё понятно VEG, отлично у вас всё получилось, теперь писать станет намного удобней, спасибо вам !
VEG, я хотел у вас спросить , раз уж вы модифицируете окошко комментариев, можно ли заодно сделать так, чтобы ещё и картинку можно было бы прикрепить, ведь некоторые обьяснения удобней было бы просто нарисовать чем написать.
Над информационным материалом для таблиц сейчас работаю, думал сегодня закончу, а тут денёк какой то тяжёлый выдался, с утра бегаю весь день, только в коротких перерывах за компьютером сижу, постараюсь ночью всё сделать :).
VEG, Помогите пожалуйста найти, в коде ниже считывается из таблички счётчик из трёх байт, который находится в табличке под заголовками 6-,7-, и 8-, как видно по коду, считываются все три байта, но работают в синтезаторе реально только два, 7- и 8-, а самый старший байт 6- где то отсекается похоже в виде ограничения (длинны волны LOOP региона семпла), дело в том что сформированный счётчик из ECX перемещается куда то в память в [edx+000001D4h], и я ни как не могу понять где это (из за недостатка знаний), с 3-,4-,5- та же история, т.е. старший байт хоть и я и заполняю каким нибудь значением, но он не работает. Первый счётчик (3-4-5-) отвечает за длину первой части семпла, который читает семпл от самого начала, и до начала второго счётчика, а второй счётчик уже читает эту область семпла по кругу (LOOP регион), (я сейчас как раз работаю над этим описанием)
т.е. если убрать это ограничение, расширится длинна семпла, даже таблицы конвертировать не придётся т.к. два этих старших байта всегда в табличках равны нулю :).
Wlad, судя по коду, считываются действительно тройки байт и преобразуются в int32. Записываются в какие-то внутренние структуры синтезатора. Причин, почему старший байт не учитывается, не вижу. А если в старший байт поставить единичку (минимальное осмысленное значение) — оно даже в таком смысле не учтётся? Возможно, там первый байт используется, просто ограничение что-то типа 0x01FFFF, например.
Давайте сразу разберёмся с автоматической разборкой существующих tbl-файлов. Думаю, вам гораздо проще будет работать с разобранными tbl-файлами с возможностью автоматически собрать их обратно после изменения необходимых параметров.
Спасибо большое VEG, будет время ещё покапаюсь, да, этот байт даже с единичкой не учитывается :(.
Это конфиг одного семпла барабана, он равен всегда 30 байт, и все конфиги в табличке идут последовательно друг за другом без пробелов (нулей), находится эта табличка в секции № 5 (от нуля), у меня в проекте она называется как 05 Drums Samples.
Чтобы определить где находится семпл на примере родного банка 22050 8-бит dsxgwave.tbl, вот что нужно сделать :
Значение под заголвком N. это указатель на семпл (обычно он указывает куда нибудь на середину нужного семпла), т.е. это адрес который является истинным 1215C0h, далее определяем начало семпла, берём указатель N. и отнимаем от него значение под заголовком K. (0FCFh) , и получаем адрес начала семпла 1205F1h (1215C0h - 0FCFh = 1205F1h) , далее определяем конец семпла, берём указатель N. и теперь прибавляем к нему M. и получаем конец семпла 122244h (1215C0h + 0C84h = 122244h). (он же LOOP регион от указателя)
Это конфиг одного семпла инструмента, он равен ровно 10 байт, здесь также все конфиги в табличке идут последовательно друг за другом без пробелов (нулей), находится эта табличка в секции № 16 (самая последняя), у меня в проекте она называется как 16 Wave Structure.
Здесь всё тоже самое, указатель это значение под заголовком Pointr, что бы получить начало семпла нужно от Pointr (0809F5h) отнять значение Strt (0000), так же и конец семпла, к Pointr прибавить Loop (052Bh) и получаем конец семпла.
VEG, если есть какие то вопросы, отвечу сразу и на любой, я сегодня столько написал в блокноте (кстати исправил баг, за что вам спасибо за ссылку), для того что бы ответить сразу на всё, и в итоге только запутался, поэтому всё остальное напишу позже. Банки я перерыл абсолютно все, нет там таких мест где я бы не побывал, поэтому отвечу на любой вопрос, а также могу выдернуть с них абсолютно любую деталь если вдруг вам понадобится, и если я могу чем то вам помочь, я к вашим услугам. Единственное что я не совсем понял, вам расшифровку всех байт в конфигах описать ,или только те которые касаются семплов ?
Забыл написать, что в режиме чтения синтезатором семпла по два байта, высчитывается семпл немного по другому, т.е. Pointr остаётся также истинным адресом, а значения Strt и Loop (и для барабанов K. и M.) нужно вначале умножить их на два, а после отнимать от Pointr, и прибавлять к Pointr.
Спасибо за инфу. Этой информации хватит чтобы начать работу. Но описания остальных байтов тоже не помешает добавить, чтобы я смог адекватно их вывести для удобного редактирования в FASM-файле. И ещё я помню вы писали, что какие-то другие таблицы ссылаются на эти таблицы с описанием семплов — это тоже можете описать. Возможно, я смогу сделать и так, чтобы эти адреса тоже автоматически подставлялись, а вы могли вставлять новые записи в таблицы с конфигами семплов. Например, по коду я заметил, что, судя по всему, в 15-й таблице таблица двухбайтовых смещений в 16-й таблице. Но в чём смысл этого? :)
Вообще жалко что тут начальный адрес указывает не на начало семпла, а на его середину. Придётся думать в каком виде лучше снаружи хранить семпл. Возможно, каждый семпл стоит разбивать на 2 куска: часть до loop и собственно сам loop. Вы говорили что в WAV-файле каким-то образом может быть сохранена информация о loop. Где можно прочитать спецификации по этой части, как оно хранится в WAV-файле, и какой софт умеет эту инфу в него писать? Рассмотрю возможность парсить WAV-файл напрямую макросами, возможно не слишком сложно будет. Оно то точно можно так сделать (особенно если в WAV-файле есть вся нужная инфа, включая смещение откуда начинается зацикленный звук), чтобы напрямую из WAV-файлов читало, даже конвертацию из signed в unsigned для 16 бит можно сделать. Но это несколько нетривиальный макрос будет, то есть может оказаться всё же сильно проще подсовывать по 2 кусочка каждого семпла раздельно, ну и автоматом я сейчас в таком случае все семплы разобью в такой же вид с двумя файлами на семпл.
Доброй ночи вам VEG.
Да табличка 15 Wave Number, собирает несколько конфигов в категорию, из которых состоит целый инструмент и эта категория имеет номер, я завтра всё опишу, т.к. денёк у меня сегодня очень тяжёлый был, у меня плохо уже голова соображает, я как раз это с 15 Wave Number и планировал описать завтра.
Также я кажется знаю как маленькому Wav файлу прикрутить метаданные которые описывают регионы семплов, согласно табличкам, к тому же эти метаданные являются стандартом для всех Wav файлов, которые открываются редактором, и кстати Wavosaur их распознает, у автора программы Power ymf, при распаковки банка программой, эти метаданные генерировались согласно табличкам (добавлялись в конец файла), и в редакторе было видно, где и какие регионы находятся, завтра всё обязательно сделаю.
Также хочу с вами поделится информацией по поводу ограничения длинны волны, кое как откопал где это находится, оказывается в памяти эти значения используются в рандомном порядке, если проследить это значение в памяти и поставить на него Breackpoint, то при следующим нажатии на клавишу это значение уже находится в другом месте в памяти, и так каждый раз, пришлось довольно долго брынчать на синте, чтобы попасть хотя бы на один Breackpoint, в итоге повезло. Эти значения расширяют только длину волны инструмента, т.к. на барабаны родной длины волны и так с избытком хватает.
Если заблокированные байты задействовать, то расширятся значения Strt и Loop, т.е. перед ними заработают старшие байты, которые во всех табличках всегда равны нулю.
Пример:
Доброго всем вечера.
VEG, я разобрался с метаданными, которые находятся в Wav файле, и указывают на регионы. В этом архиве Meta data.zip находятся два Wav файла, один я сам создал, а другой взял из распакованного банка, который распаковал при помощи программы Power Ymf, скриншоты к файлам прилагаются. Что бы увидеть маркеры регионов, можно воспользоваться редактором Wavosaur. Значения в метаданных (в коде) читаются с конца в начало, а если их перевести в десятичное представление, то эти цифры совпадут с маркерами в редакторе, для этого нужно в редакторе шкалу отображение времени перевести в семплы (в Wavosaur щелкаем по шкале времени которая находится над окном семпла правой кнопкой мыши, и выбираем Sample).
Теперь 16 Wave Structure
Рассмотрим к примеру Дистошн гитару.
Vl - Velocity семпла, 0-Максимум 7F-Минимум (используется в качестве регулятора громкости данного семпла)
Tone - Истинная нота семпла, первое значение это ТОН, а второе Центы (полутон 0-FF)
Strt, Loop,и Pointr, - это уже известно.
Bt - Этот байт переключает разрядность (00h, или 80h.)
-- - В коде ни где не используется (резерв)
№ - Это уникальный код сырого инструмента, который формируется из группы или одного семпла, от 00h-FFh, где 00h это начало а FFh это конец формирования инструмента, т.е. эти семплы раскладываются по регионам клавиатуры, от какой до какой клавиши воспроизводится конкретный семпл, это можно увидеть под заголовком - ОтДо, я так же привожу таблицу, в которой можно увидеть какое шеснадцатеричное значение, какой ноте соответствует синтезатору Yamaha.
В самом первом конфиге ;1B60 4D Distorted Guitar 1, после точки с запятой находится истинный адрес данного конфига в секции tbl.
Смыл таблички 15 Wave Number , это указатель адреса на категорию конфигов из которых состоит (сырой(без обработки)) инструмент из семплов,
т.е. Дистошн гитара у нас равна коду 4Dh, значит в табличке 15 Wave Number по адресу 4Dh, будет указан адрес который указывает на категорию семплов Distorted Guitar. (я в табличке пометил адрес квадратными скобками) (в табличке в адресе вначале стоит младшее значение, а после старшее)
В табличке адрес слова, это уникальный номер готового сырого инструмента, а слово, это адрес
который указывает на группу конфигов, которые и формируют сам сырой инструмент.
Сам код потом используется при синтезе инструмента, в 13 Instrument XG и в 14 Instrument GS.
Хочу также сообщить интересную новость, VEG, вы были правы, в синтезаторе нет указания на частоту дискретизации, потому что синтезатор всегда работал в 44100 ! Просто Yamaha взяла банк 22050, и каждому конфигу семпла указала ноту на октаву выше, из за чего скорость чтения семпла стала в два раза медленней. Это можно увидеть на примере дистошн гитары как и любого другого семпла : 01 [36]00 00 11EE 00 FF34 EC692A 0000 00[2E], что мы видим, что семплу указывается нота выше, это 36-F#4, а регион воспроизведения от 00-2E (С0-Bb3), я по началу не понял, думал что у Yamahи это так надо, но всё же пробовал поставить нормальную ноту, и при этом скорость семпла возрастала, но я сразу не догадался, пока вы не сказали что в синте нет указания на ч.д., и тут мея осенило. Теперь синт читает семплы 44100 16-бит, я попробовал в ручную конвертировать пару инструментов, и всё работает отлично !
VEG, всё таки конвертер очень нужен, из одного формата таблиц в другой, руками это нереально долго, напишите пожалуйста хотя бы пример для конвертирования одной таблицы, а для другой, исходя из вашего примера я сам справлюсь, если это не сложно то можно на Fasm как сборщик табличек. По сути я уже многое выяснил, и нашёл, а вот проверить пока не могу т.к. следующий мой шаг, это конвертация таблиц, поэтому стою пока на месте, надеюсь что вы поможете, я был бы вам за это очень благодарен, а если по каким то причинам не захотите помочь, то сразу скажите, я что бы не терять время начну в ручную всё высчитывать. Сейчас по сути нужен готовый и рабочий образец, для теста и эксперимента.
В этих примерах я показал формат старых таблиц, и новых.
Если интересно, вот сам модифик движка : https://yadi.sk/d/XQVid9zI3GyrsP
Таблица расшифровки кодов конфига барабана.
1. - ??? по умолчанию 3Ch, используется от 20h по 4Ch, Не было замечено ни какого изменения в звуке.
2. - Pitch (Fine) по умолчанию 40H, и это 00H (тонкая подстройка полутоном)
3. - Volume 64h=100, 7Fh=127 max,и по умолчанию
4. - Alternate group, барабаны которые перекрывают друг-друга, Hi-hat open, pedal,closed = 1 (категория), Surdo open-close другая категория = 3
5. - Pan (40h = середина) если 00 то включается рандомность панорамы
6. - Reverb регулируется от 00 до FF
7. - Хорус регулируется от 00 до FF
8. - Variation (Всегда 7Fh)
9. - Key assign: Single-Multi Всегда =00 (Single)
A. - Note off (00 - при отпускании клавиши звук продолжается, а 01 - останавливается)
B. - Note on (Всегда и везде единица) если 00, то эта нота отключается
C. - Cuttof filter
D. - Resonator
E. - Attack time (7F - нет среза, а 00 - максимальный срез)
F. - Decay Врема звучания середины 00 - максимальная длина звучания, 7F - минимальная
G. - Release time 00 - максимальная длина звучания, 7F - минимальная
H. - пока меняется на 00h, в паре связан с Sf FFh=выкл (возможно это старшее значение Sf)
I. - Заена на другой звук (sfx) от 00h до 56h, FFh=выкл ,соответствует таблице 07
J. - Истинная нота семпла
K. - Размер Start региона семпла
L. - Резерв
M. - Размер Loop региона семпла
N. - Поинтер указывающий на семпл
O. - 80h = 8-бит, 00h = 16-бит.
P. - ????? Предпологаю, свазано с R. в GS числа рокеруются с R. Также замечено что число относится скорее к неким категориям
R. - Pitch (Coarse) По умолчанию = FCh
VEG, если что то не понятно, или есть какие то вопросы, я всегда на них отвечу.
Доброго дня VEG.
VEG, я создал картинку, которая показывает как работают функция : E. - Attack time, F. - Decay, и G. - Release time, https://yadi.sk/i/2sjmZwsN3GzaKq
можете как нибудь в виде ссылки на неё, туда прикрутить, а этот комментарий удалить, и в F. - Decay Врема, исправить опечатку.
А также : H. - пока меняется на 00h, в паре связан с Sf FFh=выкл (возможно это старшее значение Sf), на H. - Всегда 00h, включается в паре с I. FFh=выкл (возможно это старшее значение I.)
Простите, пока что нет времени заняться этим вплотную, но это в ближайших планах. Как я говорил, вы сможете с удобством решить свою задачу, когда вся таблица будет представлена в текстовом виде, и те значения, что возможно вычислить, будут вычисляться автоматически.
Опубликовал мини-альбом для YMF724:
в Google Play: https://play.google.com/store/music/album/Oleg_Karavan_Spring_33?id=Bbizd6aovbublajarlax446l42q
на YouTube: https://www.youtube.com/playlist?list=PLLei6mpaZBip1xuTNyCz43WuFzLHkOGXC
и в ВКонтакте: https://vk.com/audios317329997?album_id=83950609
Всем доброго времени суток.
VEG, огромнейшее вам спасибо, за то что откликнулись, и согласились помочь в этом не лёгком, но очень полезном деле, а также за очень полезные подсказки, и верные замечания.
Недавно вспомнил, что у меня есть программа-эмулятор старого компьютера Вектор-06ц, к счастью я ещё не совсем забыл язык Ассемблера процессора К580ВМ80 из за того что он довольно прост, и когда то вместо начального загрузчика у этого компа я прошивал в ПЗУ монитор отладчик, и эта прошивка чудом у меня сохранилась, благо таблички оказались не большого размера, и мне всё же удалось конвертировать эти две таблички в нём.
VEG, это я должен у вас просить прощение за те неудобства, которые доставил вам своей просьбой, простите за это. Т.к. таблички удалось конвертировать и работать уже можно, прога не горит, как появится у вас свободное время и настроение на неё, тогда допишите, но узнать о том что эта прога всё же выйдет в свет, это просто радует на все 5+, спасибо ещё раз вам огромное !
Хотелось бы также проинформировать всех о том, что движок успешно модифицирован !, ниже привожу его новые возможности :
Читает семплы 44100 16-бит (Signed)
Банк может быть размером до 1.5гб !
Длинна волны одного семпла 16мб+16мб (Start регион + Loop регион)
Теперь на этот движок есть возможность перенести любой засемплированый инструмент, например Ketron SD, из KONTAKT, также из VSampler, SF2, DLS, в общем практически всё из любого семплера.
Старый синтезатор Ymf-724 я решил всё же оставить (в виде семплов и таблиц как дополнение к новому), он будет включатся Sysexом. Мне также удалось выдернуть из памяти расшифрованный банк Edirol VSC Vsti v1.6 (88pro) при помощи OlyDbg вместе с таблицами, теперь появилась возможность перенести настоящий GS, на Yamahу. Также мне удалось расшифровать банк синтезатора XG2006Le, с этим оказалось правда не так просто как с VSC, он ещё был и в памяти зашифрован XOR кодом 5Ah, благо в Win HEX можно это легко исправить.
Банк Edirol VSC Vsti v1.6 : VSC.bin - полностью банк с табличками и семплами в cборке, а VSC.Wav - просто семплы, они 22050 8-бит
Банк Yamaha XG2006Le - Имеет формат 22050 16-бит
Есть у меня также ко всем такой вопрос, может кто нибудь сталкивался с таким : https://yadi.sk/i/SmZ8OlJl3HBtao
В общем клавиатура у YAMAHи может делится на несколько частей, как видно на картинке от точке к точке, и в виде огибающей (Envelope) плавно регулировать громкость, т.е. регулирует таким образом громкость самих клавиш, и эта громкость плавно переходит от одной точке к другой, и эта функция используется при синтезе любого инструмента в YAMAHе, кто нибудь видел подобное ? ,или может знает как это называется ?
Ещё это может работать так, если на ноту C0 указать громкость Vol=127, а C10 Vol=0, то громкость инструмента на клавиатуре будет плавно понижаться от C0 до С10, как на этой картинке : https://yadi.sk/i/wAs0lhwu3HDF3K
Также хочу выложить образец проекта синтезатора, в котором семплы конвертированы в 44100-16бит, и добавлено несколько новых инструментов.
Finger bass, а также к нему относятся инструменты:
00-(33)=Electric Bass finger
18-(33)=Finger dark
27-(33)=Flange Bass
40-(33)=Bass & Distorted E.Gtr
41-(25)=SteelGtr with BodySound
43-(33)=Finger Slap Bass
45-(33)=Finger Bass 2
65-(33)=Modulated Bass
96-(35)=Synth Fretless
Так же импортировал новый Acoustic Grand Piano, который состоит из 39 семплов, к нему относятся также инструменты:
Bright Acoustic Piano
Grand piano KSP
Bright piano KSP
Mellow grand piano
Piano Strings
Dream
Всем привет !
Выкладываю обновление проекта. Заменил на более качественный 53-Voice Oohs, он состоит из 19-ти качественных семплов, также к нему относятся следующие инструменты :
(85)=Lead 6 Voice
(91)=Pad 4 Choir
16-(52)=Choir Aahs 2
40-(54)=Synth Voice 2
41-(54)=Choral
64-(91)=CC Pad
68-(101)=To Heaven
sfx(msb64)-(54)=Ghost
Доброго всем дня.
Прошу меня простить за битую ссылку от 2017/04/21 в 16:19 в образец проекта синтезатора, в следующем комментарии в обновление проекта, тот же самый синтезатор 44100 16-бит, только заменён ещё один инструмент, к сожалению из за замены файла на яндекс диске, ссылка меняется.
Имеются ошибки в Loop-ах некоторых инстурментов. На мой возгляд лучше всего взвучит вот эта версия : https://yadi.sk/d/SEYy9oCW3GYf3t?force_show=1 , однако в ней есть небольшие недочёты. В Loop регионах... можете послушать , если есть желание.
https://yadi.sk/d/TgcGPlUi3HG3GT , обратите внимание что не кооректно работают луп регионы в самом начале.
То что оно Roland , не обращайте внимание , просто переведите ямаху в GS и послушайте.
Вот пример ошибок : https://yadi.sk/d/PW5Fb2O93HG4Xt
Да, ещё было бы не плохо и в S-YXG50 и в других версиях выставить Output level как -5 dB и вообще убрать настройки синтезаторов. Никто в здравом уме не будет отключать реверберацию, хорус или вариацию. Значения Output level 0 dB приводят к клиппингу и это часто. Поэтому лучше фиксировать значение Output level как -5 dB. Полифонию тоже можно убрать из настроек , оно тоже врятли кому нужно со значением менее 128. Вот если только расширить и сделать полифионию как 128, 192, 256, 384, 512 голосов... но тут я думаю движок надо будет сильно переделывать. А так в S-YXG50 я вижу что надо сделать кнопку About это если кто хочет почитать патенты и всё такое , а эффекты лучше оставить неотключаемыи.
Спасибо вам за замечания YAMAHA User, к сожалению при конвертации банка в более качественный, в некоторых инструментах луп регионы немного нарушаются, это заметно, но я думаю и работаю над этим. Синтезатор который на ваш взгляд лучше всего звучит, как уже после выяснилось, некорректно читает семплы, пропускается каждый нечётный семпл, спасибо VEGу за то что он указал мне на эту ошибку, т.к. я не мог понять в чём дело, т.е. от куда берутся хоть мало заметные но всё равно различимые искажения. По непонятным мне причинам, синтезатор конвертировал один формат звуковых данных в другой (из unsigned в signed), именно это и стало причиной заблуждения, хотя синтезатор мог бы и сразу читать нужный ему формат (signed), а не конвертировать его из другого (unsigned) (видимо это был бонус к шифрованию банка). Вот по этой ссылке https://yadi.sk/d/8zavKVvG3HG89P мне удалось добиться самой правильной обработки Луп регионов, это тот же самый банк что и Update Project Ymf-724m 1, только теперь с корректным чтением семплов 22050 16-бит.
Wlad
Гитары в оригинальном и в том который я вам показал звучат лучше.
Сравните : https://yadi.sk/d/ja1_EO7d3HGBzR первая идёт S-YXG50 оригинал со вшиты банком на 4 МБ , вторая вот ваша новая. Честно говоря, такой дряни в гитарах я не слышал со времсён AWE64... разьве это овердрайв и дисторшин гитары? Это некое подобие как например в Cowon System синтезаторе или в каком нибудь OPL4 или чём-то подобном. Даже в MS SoftSynth звучание гитар боле гитарное что-ли. Очень рекомендую вернуть точто было в оригинальном банке.
Сопоставьте :
https://www.youtube.com/watch?v=BVaxl7ntDhY
https://yadi.sk/d/AIkq0mu-3HGCkF
В архиве эта композиция как всспроизведена в редактированной версии и как в оригинальной. Я сравниваю с PSR , поэтому считаю что гитары вам надо вернуть на место.
Вот так оно звучало когда было Update 1 до модификации гитар : https://yadi.sk/d/QA_X9rnI3HGDAj
Скин предлагаю делать вот такой : https://yadi.sk/d/LZdfqvJn3HGEq9
YAMAHA User, Overdrive и Distortion это эксперементальные образцы гитар, которые будут в любом случае заменены. Distortion гитара вышла такой из за борьбы с искажениями из за 8ми бит, сами понимаете, что это не так просто, взял и заменил, к тому же ещё нужны хорошие семплы которые найти оказывается не так просто, если они у вас есть, поделитесь. Всё равно спасибо за примеры, мидишку, и сравнения с PSR 9000, обязательно учту всё это при создании гитар, теперь уже в качественном банке.
Если вас интересует оригинальный банк, то вы его можете скачать в шапке блога.
Гитары мне самому эти не очень нравятся, но на тот момент когда они создавались, была ограничена длина волны семпла, ч.д., и битность, не говоря ещё и об ограничении банка, поэтому приходилось выкручиваться по разному, и как я уже ранее говорил, не получалось то что задумывалось, а сравнение с PSR 9000 и гитары с вышеуказанными ограничениями, я считаю не корректным, сравните потом с новыми гитарами, которые будут созданы с нуля, и в равном качестве со старшей и дорогой моделью PSR.
Знаете YAMAHA User, как говорится, первый блин комом, второй лучше..., набираюсь опыта, тут ещё такой фактор, из за низкого качества семплов, их звук на выходе заметно изменялся, в одном случае появлялись искажения, в другом случае звук получался смазанным, благо в 16-бит теперь такого нет, и я разобрался в том, как YAMAHA оптимизирует свои семплы в низком качестве, которые занимают мало места, и звучат оптимально. Гитара ещё не одна будет создана под Yamahу, и какую именно оставить в качестве Overdrive и Distortion, мы решим с ребятами при помощи голосования, с которыми общаюсь по этому поводу в ooVoo. Всё же скажу, что планирую в ближайшее время гитарами заняться.
Wlad
У меня есть такая мысля... коль вы копаете SMP и BIN , как я понял это что-то типа аналога для ROM-ов для MUNT.
Так вот , может у кого есть уже не нужная DB50XG или что-то аналогичное ? Ведь они ставились как я помню на такое зверьё как MX300 и всякие там SB16 и их аналоги. Так вот всё это зверьё в современных реалиях никуда не вставить , а если и вставить - драйвера нет. Может есть возможность раскорячить прошивку DB50XG и достать оттуда качественные семплы ? Ну или из настоящий YMF724 ) Такое старьё уже в Vista и новее не поддерживается , а банк звуков там аппаратный есть.
YAMAHA User, это родной скин YAMAHA, но этот синтезатор будет другим, как и его скин, а если вы хотите родной скин, то легко можете это сделать при помощи соответствующих программ, как вы сделали в данном случае. Скин сделаю другой как будет время, и уже окончательный, т.к. задумал его уже давно.
Wlad
Вы писали что у вас есть упакованный SoundCanvas VA , если вы имели ввиду только ондин файл SoundCanvas VA - это я через old-games нашёл , а вот весь синт можно упаковать в один файл как с S-YXG50 ?
YAMAHA User, YMF724 я уже давно перенёс банк с таблицами на софтсинт, и проект который в данный момент развивается, именно на его основе, а если найдётся дамп DB50XG, я и его смогу перенести на софт движок, правда придётся немного повозится, но поколение одно и тоже, и таблицы у них идентичные, кроме одной.
По идее можно в ресурсы основного DLL это сделать, но я не знаю как.
Wlad
Вы хотите сказать что в YMF724 родная частота семплирования как раз как в сборке S-YXG50? Неужели и там тоже 22050 дискретка была? Хотя этому удивляться смысла нет, если учитывать что у SoundCanvas включая 8850 дискретка 32000. Вот подумал, если дискретка у YMF724 как раз те самые 32000, то может есть смысл нес емплировать в 44100, а вместо этого гнать сразу в 48000?
Да, именно, 22050 8-бит, и банк в YMF724 внешний, не в чипе зашит, а его таблицы в DLL драйвере, т.е. по сути это тот же софтсинтезатор, только звук чипом обрабатывается (полуапаратный).
Не всё так просто, в 48000 я изначально планировал создавать банк, но как недавно выяснилось, сам движок читает семплы ровно в 44100, и как его заставить читать 48000 неизвестно, нужно разбираться в движке, если быть честным, то меня 44100 вполне устраивает (по сравнению 22050 8), да и в 48000 не так уж часто семплы встретишь.
YAMAHA User,
Поскольку эти настройки были в оригинале, а задача стояла максимально сохранить оригинальные возможности, я думаю, что лучше всё же сохранять все оригинальные возможности, даже если кажется, что они бесполезны. Возможно, эти настройки помогут кому-нибудь на ретро-компьютере со слабым процессором снизить нагрузку, например :)
Можете привести пример midi-файла, где клиппинг заметен?
По идее можно попробовать сделать больше голосов, но тут очень просто упустить какой-нибудь нюанс. Например, где-то может быть выделен статичный массив, где хранится информация о максимум 128 проигрываемых на данный момент инструментов. Если мы поднимем лимит, но не найдём все такие моменты, когда где-то выделена память только под 128 голосов — синтезатор начнёт глючить или падать в самых неожиданных моментах. Причём это может быть сразу совсем незаметно. Но на будущее я планирую покопаться в этом и посмотреть, можно ли безболезненно поднять этот лимит хотя бы до 256.
Также ещё планирую добавить возможность изменять настройки по умолчанию через ini-файл, то есть можно будет задать громкость по умолчанию, и она будет устанавливаться для всех новых экземпляров S-YXG50.
Вот :
https://yadi.sk/d/fmpY5Iws3HGSQb
Как понятно из названия файлов - первый просто нормализованый на -1 dB , а второй с применением шумодава ещё.
YAMAHA User, я имел в виду midi-файл, который проигрывался бы с клиппингом на оригинальном S-YXG50 с 2MB или 4MB банком.
VEG
https://yadi.sk/d/LlwwY4Aw3HGSn6
https://yadi.sk/d/lRKz5Ddv3HGT2k
https://yadi.sk/d/YCSOwMh23HGT7r
Часто клииппруется , если в хосте не включен софт клиппинг, да и он редко помогает если слушать громко.
Клиппинг не сильно заметен , но он есть.
VEG
Решаемо, правда у меня решения всегда очень грубые) для этого делаем загрузку одновременно четырёх копий , так вот сделан новый MUNT кстати, по стандарту у MT-32 идут каналы 1-8 , 10 или 2-10... я разговаривал с автором и он создал обвёртку в которую загружается два синтезатора и каждый сконфигурирован так что первый принимает каналы от 1-8, а второй от 9 до 16. Это приводит к удвоению нагрузки на ЦП в теории. Поэтому можно сделать так, чтоб при выборе полифонии как 128 использовалась одна копия синтезатора но на каналы 1-16, при выборе полифонии как 256 исеользовать уже две копии синтезатора которые распределялись бы как 128 голосов на каналы 1-8 и 128 голосов на каналы 9-16... при выборе 512 голосой такая же грубость ) уже четыре копии одноги синта грузится и делятся внутри VST плагом как 128 голосов на 1-4, 128 голосов на 5-8, 128 голосов на 9-12, 128 голосов на 13-16... как следствие полияиноия будет все 512 и теряться ничего не будет. Только машине будет труднее это обсчитывать что в общем-то нормально)
YAMAHA User, извините что вмешиваюсь, но у Antonov Lunnaya Dorogka ver2-sc88-v2.mid громкости на всех дорожках выставлены на максимум, а на некоторых и Reverb = 127, разумеется будет клиппинг, а если ещё и Хоруса добавить, то вообще всё зашкалит, и это при том что у меня в плеере громкость установлена в 100, а не в 127, та же история и в Sound Canvas VA, и в других Vsti. Этот MIDI файл сделан без учёта баланса громкостей, а просто всё выставлено на максимум, отсюда вам и клиппинг, и таких файлов попадается много.
Wlad
В SoundCanvas VA такого нет , просто потому что сам SoundCanvas VA сделан так , что сэмплы записаны не с максимальной громкостью заранее. Что считаю прпвильным, потому что добавить громкость можно в синтезаторе, в самой ОС, да и на обычных АС )
Именно поэтому я предлагаю сделать нормализацию самого TBL и SMP как -2 или -3 dB ) хуже точно не станет)
YAMAHA User, те примеры банков что вы выложили, и считаете клиппингом, это не так, так задумывалось YAMAHой, и семплы даже после конвертации остаются с такой же громкостью что и в оригинальном банке, эта высокая громкость семплов (0db) была сделана YAMAHой для того, что бы избежать паразитного шума из за 8-ми бит, т.к. чем ниже громкость 8-ми битных семплов, тем сильнее слышны искажения и шум. (Я в ранних экспериментах пытался понизить громкость семплов всего банка, но это не к чему хорошему это не привело.)