1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Программный синтезатор Yamaha S-YXG50 (MIDI XG/GS)

Тема в разделе "Мастерская", создана пользователем VEG, 10 апр 2016.

  1. Alexys

    Alexys

    Регистрация:
    20 янв 2014
    Сообщения:
    322
    - Да, и от воровства и от модификации. Раньше серьезные драчки шли за сэмплы - запись, оцифровка и обработка оригинального звука очень дорого стоила.
    я, может не то скажу, но есть такая подсистема SysEx - "байты системного исключения". И что-то мне подсказывает, что все базовые команды идут через нее, в том числе и выборка сэмплов или как оно там называется.
     
  2. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    Ой, что-то я начал переусложнять. Зачем-то думал сохранять совместимость с текущим полу-расшифрованным форматом, но ведь это не нужно :) Нужна совместимость с оригинальными зашифрованными tbl-файлами и с новым расшифрованным форматом. Текущий промежуточный вариант всё равно за пределами этого патча никогда не существовал :)

    То есть нужно найти все участки кода, где идёт «расшифровка» при помощи xor, и заменить «ключ» на 0. Одна только проблема — надо не пропустить ни одного места, иначе что-то может воспроизводиться неправильно в результате. Уже нашлось 12 мест, ещё в нескольких местах подозреваю, что код может работать с WAVE ROM, но не вижу там операций по декодированию, будем разбираться. Там есть несколько участков в WAVE ROM, которые в декодированном WAVE ROM не воспроизводятся вместе с остальными сэмплами из этого файла (то есть там воспроизводится шум, то есть либо оно как-то ещё кодировано, либо просто формат другой, возможно эти странные функции как раз работают с этими участками).

    Потом надо будет просто собрать большую пачку MIDI-файлов (например, 100 штук), отрендерить их в WAV при помощи текущей версии синтезатора, и при помощи новой версии без шифрования WAVE ROM в памяти, а потом сделать двоичное сравнение полученных WAV файлов.
     
    Последнее редактирование: 16 апр 2016
    Neitan нравится это.
  3. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    Итак, сделал действительно расшифрованный WAVE ROM. Проверил на 100 MIDI-файлах с XG и GS — вывод идентичен предыдущей версии. Новая версия в двух вариантах:
    http://veg.by/files/midisynth/yamaha_syxg50_vsti.7z — для обычного использования, со встроенным в DLL банком на 4 мегабайта.
    http://veg.by/files/midisynth/yamaha_syxg50_vsti_ext.7z — для экспериментов, с внешним банком на 4 мегабайта.

    Чтобы послушать содержимое SXGWAVE4.TBL, можно конвертировать его в FLAC командой:
    flac --force-raw-format --endian=little --channels=1 --bps=8 --sign=unsigned --sample-rate=11025 sxgwave4.tbl
    На выходе вы получите FLAC файл, в котором почти все семплы можно будет разобрать. Судя по всему, у них разная частота дискретизации (и всё это дело указано где-то в таблице голосов, то есть в мелком TBL файле), поэтому я тут указал 11025, чтобы больше семплов было разборчивыми. Во второй половине записанной записи есть несколько фрагментов, которые звучат как шум. Если кто догадается, в каком формате записаны те участки — буду очень благодарен. По идее можно играться с параметрами команды FLAC, подбирая значения, чтобы в тех промежутках появился звук вместо шума. Также можете взглянуть на эти моменты в HEX-редакторе, может быть будут идеи что это за оно.
     
  4. Alexys

    Alexys

    Регистрация:
    20 янв 2014
    Сообщения:
    322
    Возможно мое предположение не верно, но, может быть это связано с тем, что "банк" в банке не один, а 127. А формат менять не имеет смысла, он всегда PCM.
    Хватит и двух-трех мелодий. Не совсем понятна эта процедура, поскольку при полной обработке Вы однозначно получите разный набор данных. Не проще ли сравнить сами сэмплы ?
     
  5. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    SXGWAVE4.TBL не имеет никакой структуры, это просто сырые данные. И проблемных моментов там во второй половине немного. Скорее всего просто иной формат семплов. Там всего 6 минут звука получается при частоте дискретизации 11025, большая часть семплов, судя по всему, с такой частотой дискретизации и записано. Можете сами послушать.

    У PCM не один вариант, их большое множество — иной порядок байт, количество бит на семпл, количество каналов, наличие знака, целое или с плавающей запятой. И всё это PCM. И у каждого из этих PCM формат сырых данных внезапно получается разный и часто совершенно несовместимый друг с другом.
    --- добавлено 17 апр 2016, предыдущее сообщение размещено: 17 апр 2016 ---
    Я проверяю код, который работает с этим расшифрованным WAVE ROM. И мне нужно убедиться, что все ветки кода нормально отнесутся к изменившемуся формату данных (раньше оно было «зашифровано», а теперь представлено в сыром виде). Если я где-то забыл бы убрать код дешифровки во время воспроизведения (а он был в 12 местах, в разных функциях), то в каких-нибудь редких случаях звук бы сильно искажался.

    Почему? При рендеринге одного и того же MIDI с теми же настройками выходные данные идентичны. Можете проверить. И это позволяет легко тестировать изменения в коде, перегоняя сотню-другую MIDI в WAV двумя разными версиями, а затем сверяя (автоматически) полученные файлы друг с другом. Я регулярно так делаю, проверяя свои изменения.

    Даже если бы там был генератор шумов, то хороший синтезатор должен был бы каждый раз генерировать одинаковый шум при тех же входных данных (это возможно). Не знаю, есть ли в MIDI возможность генерировать шум, если и есть, то либо он здесь сделан правильно, либо у меня MIDI с использованием этих шумов нет.
     
    Последнее редактирование: 17 апр 2016
  6. Alexys

    Alexys

    Регистрация:
    20 янв 2014
    Сообщения:
    322
    Может и так, но скорее всего там всего 1,5 минуты при частоте 44100 Гц. В среднем сэмплы имеют длительность 0,2 - 0,35 секунды.
    А разве PCM - это не сырые данные ? Т.е. PCM - это не RAW ?
    Самое интересное, что это wavtable синтезатор, т.е. сам он ничего генерировать не может, он только читает и смешивает. В принципе у всей системы этой Ямахи есть генераторы огибающих форм и генераторы вибрато и тремоло, но они низкочастотные и не имеют шумовой составляющей. Насколько я помню, там только синусоида. В самой системе MIDI ничего генерировать нельзя - это всего-лишь система команд для управления "железками", например, джойстиком. Точнее от джойстика.
    И еще вопрос: я не совсем понял, удалось ли Вам извлечь из банка звуки в полноценном виде ? Я бы хотел взглянуть на них и использовать по возможности.
     
  7. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    Вы чтобы не гадать — послушали бы. Команду для получения слушабельного FLAC файла я дал. Дальше можно экспериментировать сколько угодно.
    Сырые данные без заголовков могут быть в совершенно любом формате. Если вы говорите PCM — этого недостаточно. Потому что под PCM понимается огромное количество различных форматов. Если вы скажете PCM, 16bit, little-endian unsigned integer, 44100, 2ch (L, R) — другое дело, это чётко определяет формат сырых данных. Если же вы будете, допустим, трактовать эти данные как 8bit, или как big-endian signed integer, то вы получите шум. Это всё разные форматы сырых данных. И не важно, что их в целом именуют PCM.
    Такой задачи я не ставил. Я хотел получить незашифрованный WAVE ROM, чтобы синтезатор не тратил время на расшифровку, и чтобы было проще экспериментировать тем, кому это интересно. Вы можете прослушать весь WAVE ROM целиком в сыром виде. В мелком TBL-файле где-то должна быть таблица, по каким смещениям какие семплы начинаются, какова их продолжительность, и видимо их характеристики (частота дискретизации, разрядность и т.д.). При желании можно разобраться и написать программу, которая из этих двух файлов сгенерирует пачку WAV файлов со всеми семплами.

    Меня же лишь интересует формат той части сырых данных, которые не воспроизводятся с теми параметрами, что я привёл выше. Нужно это для того, чтобы убедиться, что с этим WAVE ROM я разобрался правильно и там нет подводных камней.
    --- добавлено 17 апр 2016, предыдущее сообщение размещено: 17 апр 2016 ---
    Всё же у него есть пачка эффектов, так что он всё же не просто тупо проигрывает семплы. Плюс он даже при рендеринге с частотой дискретизации 48кГц выдаёт звук с частотами до упора (24кГц), чего используемые семплы, судя по всему, и близко не предлагают. Так что он там кодом нехило их обрабатывает.
     
  8. Alexys

    Alexys

    Регистрация:
    20 янв 2014
    Сообщения:
    322
    Кстати, да, я послушал. WaveLab открыл. Скорее всего любой другой редактор тоже откроет, если есть возможность указывать параметры wav. Оттуда же можно и сэмплы вытащить. Скорее всего они все-таки 22050 Гц.
    Не совсем тупо, конечно. Но ничего особого он не делает. Возможно что-то к чему-то незаметно подмешивает. Насчет ресемплинга тут ничего не мешает частотам быть и выше граничной, если бы было возможно. Только ничего полезного они уже не несут. Врядли есть какая-то
    постобработка. Эффекты предназначены для окрашивания общей звуковой картины и не обрабатывают сэмплы по отдельности.
     
  9. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    Оставшиеся звуки, которые шумели при интерпретации как unsigned int8, воспроизводятся при интерпретации как unsigned int16 (little-endian). Так что с этим вопросом походу закончено. Ещё пару мелочей, хорошенько протестировать, и релиз.
     
    Tigoro нравится это.
  10. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    Решил вынести всю мета-информацию о VSTi в ресурсы, чтобы если кто-то захочет что-то модифицировать, можно было бы и название компонента изменить.
    Сейчас уже из ресурсов можно свободно менять следующие вещи:
    aveg.by_z_2016_04_18_12_57_45_66d5f519.png

    Например, если кто-то сделает версию синтезатора со своим банком звуков, может понадобиться изменить эти строки, чтобы можно было использовать совместно два синтезатора (оригинальный и модифицированный).

    Есть идея генерировать Unique ID по содержимому exe-файла, тогда он будет автоматом меняться если поменять exe-файл =) Но наверное всё же лучше оставить как сейчас — возможность изменять вручную.

    Есть вопрос. Там синтезатор возвращает в каком-то случае имена SYXG L и SYXG R. По названиям я могу предположить, что это левый и правый канал. Но я не могу найти, где это дело в каком-нибудь VST-хосте отображается. Кто-нибудь видел, где эти строки вообще отображаются?
    --- добавлено 18 апр 2016, предыдущее сообщение размещено: 18 апр 2016 ---
    Ещё есть идея сделать возможность удалять ресурсы GUI (картинки, диалоги), и чтобы плагин это корректно отработал и сообщил, что он не имеет GUI (как SGP.DLL). Хотя я уже начал патчить отдельно SGP.DLL, не решил ещё, буду ли его отдельно допатчивать, или текущую версию syxg50.dll просто научу корректно работать в случае отсутствия ресурсов GUI.
    --- добавлено 18 апр 2016 ---
    Вообще те кто используют этот VSTi жалуются, что он неудобный, мол в GUI мало чего настраивается и какие-то другие косяки. Я вообще не музыкант, поэтому не особо разбираюсь в этом. Меня изначально в этом VSTi интересует возможность именно проигрывать нужные мне MIDI. Но вообще технически возможно переделать в SYXG50.DLL или дописать к SGP.DLL нужный GUI и исправить какие-то другие косяки. Например, он возвращал версию плагина 256, а по стандарту оно должно возвращать 1000 (для версии 1.0.0.0) или просто 0. Можно, в принципе, и проапгрейдить версию VST до более свежей (как я вижу, уже есть VST 3, а в этом синтезаторе VST 2.2), если там есть какие-то плюшки :)

    Правда, заниматься такими объёмными переделками я не планирую на данный момент (хотя это реализуемо за разумное время, это не такая фантастическая идея, как написать враппер для VxD драйвера S-YXG100-PVL). Но просто в TODO на будущее можно записать, может когда-нибудь и доберусь. Или может кто другой подхватит.
     
    Последнее редактирование: 18 апр 2016
    Neitan нравится это.
  11. Polsta

    Polsta

    Регистрация:
    17 апр 2007
    Сообщения:
    115
    VEG я чего-то не догоняю эта программа может проигрывать миди файлы? Если да то как?
     
  12. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    @Polsta, нужен какой-нибудь VSTi хост, само по себе оно не будет играть. Можете взять, например, плеер foobar2000, к нему плагин foo_midi, и этот плагин настроить на использование этого синтезатора (в Advanced Settings установить путь к каталогу, куда вы скопируете DLL синтезатора, и в настройках foo_midi затем выбрать в выпадающем списке S-YXG50). В результате получите отличный звук для MIDI, думаю будете приятно удивлены :)
     
  13. Alexys

    Alexys

    Регистрация:
    20 янв 2014
    Сообщения:
    322
    Что и как нужно смотреть ?
    Все там настраивается, только через контроллеры. Для того он и Music Instrument Digital Interface чтобы хост мог им управлять. Кроме того, расширенная система SysEx позволяет переназначать эффекты и их свойства. В нем есть даже Cutoff Filter с 12-ю dB на октаву. Конечно, если вывести на внешнее управление все, что он умеет - это будет не синт, а золото !!
    а не проще ли было переделать какой-нить VST-плагин, который умеет читать банки звуков, например SoundFont2 ? Ну, или Roland, KORG, AKAI ? Саундфонтных банков, полностью копирующих систему звуков существует уже довольно много. Могу поделиться своим.
     
  14. Polsta

    Polsta

    Регистрация:
    17 апр 2007
    Сообщения:
    115
    Сделал. Да разница очень существенная
     
  15. VEG

    VEG

    Регистрация:
    3 авг 2006
    Сообщения:
    631
    Я и спрашивал, где это найти, потому что не мог найти где эти строки выводятся. Но я уже нашёл это (при использовании VSTHost). Это действительно названия каналов. Так что тоже вынес в ресурсы.

    Обсуждалось выше. Покажите хоть один soundfont, на котором будет нормально звучать MIDI, активно использующее XG. В качестве примера я приводил даже MIDI-файл. Я перепробовал много звуковых шрифтов, даже по несколько сотен мегабайт, но оно везде звучало убого. Зато на S-YXG50 с банком всего 4 мегабайта — шик :)
    --- добавлено 18 апр 2016, предыдущее сообщение размещено: 18 апр 2016 ---
    Собственно, я сразу и настроил у себя в плеере проигрывание миди через звуковые шрифты, накачал штук 10 разных, слушал, сравнивал. Даже какое-то время пользовался, пока не вспомнил, что 15 лет назад крутил XG Studio (видимо всё же чип в звуковухе был от Yamaha), стало понятно, почему в некоторых именах файлов моих старых MIDI приписано xg, и S-YXG50 дал тут совсем другой звук.
     
    Последнее редактирование: 25 апр 2016
    Thyrion и K-WolF нравится это.
  16. Neitan

    Neitan

    Регистрация:
    1 дек 2007
    Сообщения:
    450
    Превосходное звучание! Проверил на Anvil of Dawn :worthy:
     
  17. Alexys

    Alexys

    Регистрация:
    20 янв 2014
    Сообщения:
    322
    Само по себе XG здесь ни при чем. Это значит, что в тех SF сами сэмплы плохого качества. А еще система воспроизведения. Видимо в самом "плеере" Ямахи правильно просчитана психоакустическая модель и верно подогнаны частоты для удачного микширования, чем он мне и нравится. Причем то же самое относится и к плеерам модульной музыки, т.е. формата MOD, S3M, XM, IT. У них какое-то свое звучание, которое не спутаешь ни с чем, но, тем не менее, неплохого качества, даже при низкой частоте дискретизации. Я считал, что это из-за алиазинга при ресемплинге - добавляется шумовая составляющая. Зато во всеми любимой FL Studio такого нет при использовании сэмплов, там также тупо как и в обычных плагинах-сэмплерах.
    Кстати, если тема с банками вызывает интерес, то могу над этим поработать, составить банк. Я как-то делал, но не полностью. В принципе, звук был приемлемый.
     
    Neitan нравится это.
  18. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    2.940
    @Alexys, не в последнюю очередь звук от музыканта зависит. Чем сложнее миди оборудование использовалось и выше уровень мастерства, с большей вероятностью midi будет звучать хорошо везде. Аналогично с трекерной музыкой, мало кто постоянные условия воспроизведения (темп ритм, прочее) активно менял для оживления механического воспроихведения.
     
    K-WolF нравится это.
  19. Alexys

    Alexys

    Регистрация:
    20 янв 2014
    Сообщения:
    322
    Я бы полностью согласился, но:
    Звук от музыканта не зависит, от музыканта зависит игра, умение прорисовывать партии или, проще говоря, накидывать ноты. Ведь многие со мной согласятся, если я скажу, что есть мидюхи, которые и на встроенном в Винду миди-устройстве звучат хорошо.
    - что и подтверждает мои слова, но, вот, только оборудование здесь уже ни при чем, поскольку, к сожалению, стоит признать, что мидюхи создаются каждая именно под свою систему. Как например рингтоны на сотовый. Послушайте их на Ямахе и будете долго смеяться. Хотя некоторые очень даже ничего.
    Я не совсем понял, что значит "условия воспроизведения", но на всякий случай скажу, что, например в MOD первых "моделей" есть всего 4 канала и постоянный темп величиной 125 уд/мин. Там нужно очень даже суметь изловчиться, чтобы что-то стоящее сыграть, поскольку максимальное количество одновременно звучащих нот - 4, но есть команда, позволяющая продолжать звучание ноты, при этом на тот же канал назначить еще одну и тогда возрастает до 8-ми. Для задания темпа тоже есть отдельная команда. Вот и превращается мелодия в набор эффектов в строках, а не просто нот. Т.е. здесь я и подчеркиваю, что основой игры являются именно изменения условий воспроизведения.
     
  20. Tigoro

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    2.940
    @Alexys, в целом - важен итоговый результат :) хороший пример - трекер edlib и группа vibrants. Все остальное, шашечки, либо умеешь либо нет. Касаемо как музыкантов, так и программ.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление