Вторая мировая с китайским Vortex'ом.


 

Не прошло и пол года, после описанных в первой статье событий… Между тем, я получил уже три сотни откликов на эту статью, и просто не имея физической возможности всем отвечать, задним числом исправлю этот недостаток…

Краткая хронология (вести с фронтов)

Вначале, на сайте Aureal появились generic драйвера версии 116 (если быть точным — 4.05.1160). А вместе с ними примитивный и шумный двухполосный эквалайзер, загружающий во время своей работы центральный процессор и небольшая кнопочка Download в закладке настроек MIDI контрольной панели нашего китайского недруга. С эквалайзером все ясно — программный он, классическая свертка по 3 или 4 точкам выходного буфера. Благо можно настроить Vortex на запись результатов своей работы в память, и на последующую пересылку обработанного результата из буфера на кодек. Но, в конце концов, это все мои досужие домыслы, а вот кнопочка… "Вот это ДА!" — все что я сумел (про себя) вымолвить, нажимая на эту кнопочку. Ура, теперь есть поддержка Sound Font 2 банков и проблема, поставленная в предыдущей статье, отпадает сама собою?! Но нет, все не так хорошо, как оно есть на самом деле :-).

Да, можно выбрать файл банка, но это либо DLS, либо ARL формат. Что такое ARL я догадался сразу, тот самый "специфик" Sound Font 2 который никто из представителей программного обеспечения (кроме драйверов китайца) за Sound Font считать не желает. Что такое DLS, догадываться не надо. Беремся за дело, хватаем программу Awave (тогда версии 4.8), ищем к ней кряк и конвертируем несколько банков. Шайтан, не работают… Может поддержка DLS такая же как и Sound Font (китайская в смысле)? К счастью, в дистрибутив как раз тогда и поставленных мною 98 окошек входит DLS банк, для входящего туда же софтверного синтезатора MIDI. Уже не помню, как, но заставляю этот банк попасть из дистрибутива в директорию System32 и начинаю его пристально разглядывать. Почти 4 мегабайта, GM набор от Roland плюс несколько наборов GS ударников. Итак настал решительный момент… Да, да, грузится и играет! Хуже, правда, чем родной 5 метровый ARL, но зато без ошибок. Вот и доверяй потом Awave.

Желание жениться есть, осталось найти невесту. Но вот с DLS банками, проблема и возникла (тогда). Облазил я сеть но в пределах своей фантазии не нашел ни одного более менее приличного GM набора в DLS виде. Зато Sound Font сколько угодно. Уже тогда это должно было натолкнуть меня на печальные размышления, но не натолкнуло. Тем более, что музыку я пишу с помощью Fast Tracker (2.08), а там проблем с выдиранием инструментов из банков не существует, поскольку формат PAT программа Awave записывает достаточно корректно. Зато скаченная мною программа тестирования звуковых ускорителей "Aureal Minerva" приятно меня порадовала. Оказывается, число аппаратно ускоряемых 2D и 3D потоков звука неожиданно увеличилось. Итак, что мы имеем вообще и с новыми драйверами в частности:

  • Железо:
    • Всего 48 аппаратных и независимых каналов прямого доступа к памяти.
    • Хорус и ревер для каждого канала, а также sweep фильтр (проще говоря еще одна свертка).
    • ? Из них 16 могут быть настроены на работу в обратную сторону (чип->память).
    • Интерполяция по 6 точкам, но не линейная, а скользящей сверткой (взвешенная сумма).
    • Плавная конверсия дискретизации (с точностью до ~ 5 Герц) для любых исходных значений из допустимого диапазона пропускной способности канала (не более 100Мб в сек на все каналы совместно и не менее 5000 Гц на канал соотв.)
    • 8 и 16 бит исходные потоки, независимо от выходного формата.
  • На этом железо заканчивается, и начинаются драйвера, с версией 116 DirectSound рапортует о:
    • 1 первичном буфере (т.е. не больше одной DS программы одновременно).
    • 48 2D буферах (16 для версии 114, вот он программный упгрэйд :-)).
    • 9 3D буферов.
    • 32 Ноты (не путать с MIDI каналами) одновременно на MIDI синтезаторе.

Простая арифметика показывает, что здесь не все просто. Т.е. все не одновременно. Ну, предположим, что каналы раздаются автоматически, по требованию клиента так сказать. Надо отметить, что на один 3D канал требуется 2 аппаратных (разные частоты и фильтры для правого и левого уха). Но эксперимент показывает ужасные вещи! И одновременно с MIDI и без него доступны 8 3D каналов, зато 2D отдается 12 моно и 6 стерео без MIDI и 10 и 5 с оным. Что никак не тянет на обещанные 48 в максимуме. Ну ладно, погрешим на программу для тестирования DS способностей (Minerva) и будем верить в лучшее, благо игрушки работают довольно сносно.

Затем я купил себе RIV'у и перешел из разряда аудиалистов в мощную когорту визуалов, засим в статье следует долгая и трехмерная хронологическая пауза.

MIDI и еще раз MIDI

Ну вот, добрались и до наших дней. Благодаря стараниям Андрея Гаравского была найдена программа (Audio Compositor) способная записывать корректные (по крайней мере, с точки зрения китайца) DLS банки. Но некоторые банки конвертились хорошо, некоторые нет, и все играли хуже, чем оригинальные в SF2 формате. Что и побудило меня вернуться к изучению DLS, как он есть, и как его понимает наш китайский друг.

Итак, что можно скармливать? После нескольких часов чтения документации, нескольких дней экспериментов и нескольких ночей копания в файлах (т.е. их дампах) было выяснено, что:

  • Только стандартные (Forward) циклы.
  • Только одна артикуляция на мелодический инструмент (т.е. огибающие, LFO и т.д.), что просто неприемлемо, учитывая, что практически все мало-мальски нормальные банки содержат собственную артикуляцию для каждого региона инструмента, а попытка свести к общему знаменателю резко портит дело. Банки с более сложной артикуляцией читаются, но играются неправильно, причем поуровневая артикуляция игнорируется и сразу приводит к неприятным глюкам, а порегиональная возможна только для 16 регионов (хотя самих их может быть больше), далее нас ждут те же глюки. Но в большинстве хороших банков 16 регионами дело к сожалению не обходится.
  • Для ударных возможна порегионная артикуляция. (Что мешало сделать ее и для мелодики ?). Зато нет поинструментной и поуровневой. Понятно, там без этого не обойтись, на каждой клавише сидит свой инструмент.
  • Параметры типа относительная громкость или подтяжка необходимо задавать для каждого сэмпла по отдельности, причем везде игнорируются положительные относительные громкости (>0 Дб) и огибающие для переназначения контроллер -> параметр.
  • Одна Основная огибающая, причем только в примитивном виде (атака, спад, спад после отпуска). Т.е. не больше 3-х точек.
  • Зато регионов без артикуляции на один мелодический инструмент может быть больше 16, что является перевыполнением DLS плана :-).

Плохо! Становится ясно, что Sound Font (гусь) DLS'у (свинье) не товарищ и тем более не конкурент. Он гораздо более гибок и профессионален. Но SF2 не читается драйверами китайца, и посему, будем доводить до ума то, что имеем. Итак, как преобразовать банк в DLS c минимальными потерями:

Берем Awave, считываем ей понравившийся нам банк, в каком либо формате. Выбираем Process All, и настраиваем там следующие пункты:

  • Convert stereo to mono.
  • Convert loops (а конкретно два пункта — Reverse в Forward и Ping Pong в Forward).
  • Sort after midi bank & program number.

Остальное оставляем, как есть (Leave as is). Затем записывает все это в SF2. Да, я не оговорился, если мы начнем записывать DLS мы потеряем все сэмплы после 16-го, что и происходит в Caos банках, например с пианинами где то после 5 октавы от них ничего не остается. Также мы потеряем огибающие, а это нам пока не надо.

Затем читаем этот SF2 в Audio Compositor и там начинаем долго и мучительно доводить его руками. Выбираем артикуляцию из середины инструмента и копируем ее, делая глобальной для всего инструмента. Затем пишем банк как DLS, закрываем, открываем снова и обнаруживаем, что некоторые огибающие попортились. Меньше, конечно, чем после Awave который тупо брал первые 3 точки, но все равно иногда надо править ручками. Что и делаем еще часика два. Записываем окончательный результат и наслаждаемся. Хотя, не в обиду Vortex 1 и 2 сказано, для музыкантов лучше иметь SB Live!.

Пример подобного DLS, сделанного мною на основе GUS MAX и NewGM банков и доведенного ручками до кондиции можно скачать здесь: (файл недоступен)

Он достаточно громок, по сравнению с родным банком, поэтому рекомендую спустить движок громкости WaveTable до 10-20%. Но звучит лучше суховатого и сделанного на японский вкус Caos'а. Тогда вы избежите возможных искажений. К сожалению, в ручную указывать -10Дб громкости у 300 сэмплов нет ни времени, ни желания, ни к сожалению, (способной это сделать за меня автоматически) программы.

Это вторая модификация моего банка, теперь он идет с драйверами 1185 первого вортекса. Однако на 1185 драйверах банк звучит по прежнему не всегда правильно, хотя в отличии от предыдущей версии это не сразу заметно. Пользуйтесь 116, прикручивая к ним последние a3d*.* с сайта Aureal.

Кстати, по последним данным новые драйвера 1185 перестали автоматически различать DLS и ARL (по содержимому), зато грузят банки прямо после Awave но при этом играют их слегка неправильно, даже после Compositor :-(. Что очень печально. Руки надо оторвать программистам, писавшим драйвера.

Если у вас есть какие-то наработки (на C), для чтения формата SF2, или вы знаете, что внутри ARL — пишите, буду рад обменятся знаниями и помочь в написании конвертера SF2->ARL.

Поправка:

Как недавно выяснилось, из практики, новые драйвера (1185) не ухудшили, а улучшили ситуацию с миди. Только необходимо несколько поменять стратегию конвертации банков.

  • Вместо Per Instrument можно теперь указывать Per Region Articulation. Но только ее, не Per Layer. Что и следует делать в Process All программы AWave.
  • Все остальное (Циклы только Forward, сортировка по номерам инструментов) осталось как прежде.
  • Теперь DLS надо записывать прямо в AWave, не преобразовывая его потом в Audio Compositor.

Тогда ваши банки будут успешно читаться и играться новыми драйверами.

Но, теперь нельзя переименовывать DLS банк в aurealgm, это приведет к нестабильности системы, т.к. новые драйвера различают типы банков по именам файлов, а не по их содержимому.

 

Дополнительно

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.