Разработка и ромхакинг > Ромхакинг
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
(1/7) > >>
SeregaZ:
не программист, французским не владею. буду писать своими словами как я это понял сам.

уже наверное месяц черепашьим темпом двигается проект специального конвертера музыки для игры Dune: The Battle For Arrakis. и занимаюсь всякой фигней для этого конвертера, вместо самой главной функции - то есть самой конвертацией. куча кода, куча глюков, половина ничего толком не работает :) а количество идей, что хотелось бы туда впихнуть не убавляется...

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

1. как известно миди состоит из тиков. а мне нужно расчитать паузу Delay для правильной скорости проигрывания. пока отбросим плавающий темп, предположим что темп константа. сама Delay, в моем случае - в миллисекундах. то есть 1 секунда = Delay(1000)

в миди есть параметр "разрешение", аналогично как в 1 сантиметре есть 10 миллиметров, только в нашем случае миди сообщает о том, сколько мидишных тиков входит в 1/4 ноту (тики это типа миллиметры, 1/4 нота - сантиметр)

так-же в миди есть параметр Delta - хотя в названии я не уверен... так вот это значение в микросекундах (не миллисекундах!!!) длительность времени, сколько должна звучать 1/4 нота.

зная эти данные нам нужно вычислить количество тиков в 1 секунду, и в соответствии с этим произвести расчет Delay в программе:
Delay = 1000 / ( 100 * ( Delta / (Resolution / 10000) ) )
1000 - это моя 1 секунда в миллисекундах для делея
10000 - это 1% от 1 000 000 - количества микросекунд в секунде
Resolution / 10000 - получение количества процентов времени звучания этой 1/4 ноты от 1 секунды
Delta / (Resolution / 10000) - получение значение 1% в... сам забыл в чем... тиках видимо. типа сколько миди тиков в 1%
100 * на 1% тиков - получение числа сколько тиков должно играть в 1 секунде
и наконец 1000 / разделить на это число тиков в секунде - получим значение паузы Delay сколько должно быть между тиками при проигрывании миди.

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


2. момент номер два. проблема в том, что минимальное значение паузы может быть Delay(1), следовательно если по предыдущей формуле я получил значение типа 0.45 - то точно играть не будет. точнее оно вообще по определению точно играть не будет, так как пауза может содержать только целые числа - но тем не менее с 0.45 это полный капец. то есть Delay(1) это очень много и грубо - песня будет звучать значительно дольше, чем в оригинале. я тогда подумал, что в данном случае можно попытаться пожать массив тиков, что предварительно прочитал из мидишки. типа массив имел 25 ячеек. 1 ячейка - единица времени.
0 0 0 0 0 0 0 4 0 0 0 2 0 0 0 1 0 0 0 0 0 5 0 2 0
и я хочу его пожать скажем кратно 5 и использовать первое попавшееся значение в этой пятерке. в итоге получается что-то типа такого:
0 4 2 1 5 (нота 5 в последней пятерке встретилась раньше ноты 2, и следовательно сожрала её)

в результате музыка конечно потеряет мелкие ноты, будет небольшое сбитие темпа местами, но по идее рассинхрона не будет (который скатина был, в первой версии проекта). хотелось бы надеяться что этот шаг кратности - 5 будет довольно мелким, чтобы серьезно повлиять на звучание песни.

однако это лишь мое мнение, и оно по определению не верное из-за моей малограмотности в данном вопросе :) посему будут ли у кого какие идеи, как можно было бы выкрутится из данной закавыки в виде слишком грубого минимального значения делей?

однако в пользу этой моей теории пожатия должно сказаться само конвертирование - а именно игра может проиграть минимальную ноту как 1/24 - то есть 1/32 или 1/64 проиграть не выйдет (только если темп увеличивать, но это уже другая история) - так что выходит все равно нужно будет пожатие массива, а следовательно будут небольшие огрехи в звучании. (ишак нюхал этих производителей с их нестандартным 1/24 решением. могли бы уж 1/32 что-ли запилить, чтоб как у людей)



п.с.: хотелось бы надеяться, что эту свою телегу я все-таки доведу хоть до какой-то степени ездовости.


*********************
26.08.2015


примерное представление о наборе функций



а тут во вложении можно даже уже какие-то функции потестировать :) пока правда они все из "проигрывательной" части... до самого конвертирования пока не дошло. чтоб проигрывало верно - следует всегда выставлять барабаны на 6 дорожку. пока еще не решил что с этими барабанами делать... плюс еще мидишки могут быть разные. мне попадалась такая, где барабаны были записаны на различных дорожках... кароче нюансов еще тонна целая. все надо предусмотреть. темп для миди и для предварительного озвучивания вроде бы верный, как на самой мидишке, а вот темп при проигрывании code файла ( треки 000, 001, 002 и так далее в папке со сборщиком Дюны у Ti_ ) - не верный, плюс еще само звучание не совсем корректное. так-же нет поддержки громкости инструментов, в результате музыка звучит мягко говоря совершенно другая :) до кучи еще нет поддержки зацикливания проигрывания некоторых дорожек в этих треках... все потом как-нибудь.

и еще чуть чуть подправил.
SeregaZ:
поскольку новый супер крутой и навороченный проект я где-то запортачил и найти не могу где... выкладываю пока-что старый. он не совсем верно работает... там не верная математика. однако хоть как-то работает...

три кнопки - понятно одна выбор мидишки, вторая выбор папки (подразумевается что это папки 000, 001 и так далее в сборщике Дюны Ti_, или какие другие игры с GEMS в распакованном виде как Дюна), третья конвертация.

флажок синтезаторных барабанов  (бочка кстати там херня какая-то... надо подобрать что-нибудь получше). без этой галки будут живые сэмплы барабанов и они звучат лучше синтезаторных... НО! есть ограничение на применение сэмплерных барабанов - а именно некоторые треки в игре. суть проблемы в том, что процессор приставки может проигрывать только 1 аудио сэмпл. то есть звучать сразу несколько сэмплов не может. только 1 - именно поэтому в игре иногда не слышно как червяк жрет твоих юнитов. это из-за того, что игрок в этот момент например тыркал другого юнита, этот юнит говорил фразу: "слушаю", а в этот момент червяк обедал. в результате солдатское "слушаю" заняло этот канал для сэмплов, и червячный "аааам" оказался неудел и поэтому проигнорировался (рекомендую поднять приоритет сэмплу червяка :) ну и еще докучи мертвой руки, поскольку эти двое более важные, чем "кушаю, выполняю"). так вот... если дело касается замены трека гимнов домов, или там гимнов поражения или победы - там никаких проблем нет, можно галку синтезаторных барабанов не ставить. что же касается других треков - например Lego Tune - здесь надо обязательно поставить галку синтезаторных барабанов. иначе если оставить сэмплерные барабаны - то эта мелодия, будучи проигрываемой во время битвы будет мешать звукам юнитов. барабаны и всякие "слушаю, выполняю" будут жрать друг друга и мелодия будет звучать отвратно. так что это нужно иметь ввиду при конвертации.
Razor:
Вроде норм работает :lol:


Только есть баг - после окончания музыки новый трек не включается.
SeregaZ:
ааааааа... покусился на святое! :)))))) NES - SEGA те еще вражеские конторы... а ты взял их и смешал :)

по поводу обрыва мелодии - там нет лупов. оригинальные треки вроде как минуты на 3 расчитаны. в нашем же случае мидишки бывают разные по длине, а главная закавыка внутри миди трека миди дорожки разной длинны. там надо будет видимо брать длину самой длинной дорожки, а после добавлять разницу в delay между длинной мелодией и той, что покороче и делать луп... скажем на 99 почти до бесконечности :) надо в общем подумать над этим.

пока предлагаю временное решение в каком-либо миди редакторе удлиннять мелодию раза в два-три, копируя её саму в конец, чтоб длительность стала превышать 3 минуты.

п.с.: совсем забыл упомянуть! некоторые мидишки открываться не будут! они то-ли битые, то-ли специально подпорченные, то-ли гранаты не той системы и поэтому не открываются. однако всякие программы типа Сонар - вполне едят подобные подпорченные миди. надо открыть в подобном сонаре и просто пересохранить такую неоткрывающуюся мелодию. после этого мой недоконвертер сможет её переварить.
Razor:
Мне разве что не нравится то, что инструменты конвертер использует не самые интересные. Почти все MIDI звучат после конвертации отвратно.
SeregaZ:
тут или я попутал индекс инструментов на единичку с инструментами, хотя наврятли... или сами инструменты не ахти - что скорей всего. пока такие инструменты какие есть и то повезло что хоть как-то напоминают мидишные, то буржуи помогли. до этого была вообще тухлая мысль собирать инструменты из разных игр и на слух более менее ровнять к 127 миди инструментам. это была-бы долгая, нудная и не эффективная работа. так что большой респект MaliceX с буржуйского форума за это :) он целых 2 варианта дал. потом мало ли может появятся более мидишные инструменты... так-же барабанов всего 3 разбирается. тарелки всякие и прочие пока не обрабатываются.

в одном месте есть крутые, еще круче чем оригинальные миди - но формат там другой :( но звучат инструменты здоровски.
SeregaZ:
и опять забыл совсем... очень удобный ром для тестирования музыки от Шелла - очень рекомендую. там удобный функционал по отключению дорожек и можно слушать по одной и делать выводы где что можно подправить.
Valet2:
Кстати, Клепаки рассказывал о том, почему приходилось так извращаться с миди:

SeregaZ:
 хы... помница я ему письмо писал - какой темп был у треков изначально. в американской нтсц музыка звучит через чур быстро. нет солидности, как у марша должно быть. это как Марш Славянки играть через чур быстро. однако он сказал что американский темп и есть вроде как оригинальный... эх. мне медленный европейский пал вариант нравится все-таки больше :)

и вот еще - треки были подпилены. потому как там есть лупы. и не просто луп типа повторить с начала и до конца - а специальные. фрагмент такой-то повтор 2 раза, причем во второй раз концовка другая. и так далее. то есть там была апосляконвертная работа по допиливанию. я бы сказал по оптимизации и по сжатию трека. то есть песня в итоге занимала куда меньше места, чем ежели брали оригинальный миди и конвертили его как щас мой недоконвертер делает. в моем случае никакой оптимизации повторяющихся фрагментов нет :) и песня будет раза в два-три занимать места больше, чем оригинальные треки :)
Razor:

--- Цитата: SeregaZ от 14 Октябрь 2015, 22:38:09 --- хы... помница я ему письмо писал - какой темп был у треков изначально. в американской нтсц музыка звучит через чур быстро. нет солидности.

--- Конец цитаты ---

Тут, как мне кажется, прикол в эмуляторах. На железной консоли треки в NTSC звучат просто великолепно.

Frank Klepacki - Turbulence
Frank Klepacki - Dune II Intro
goodbye:
качество жесть..
непонятное какое-то стерео %))

но звучит да... сразу ностальгия накрывает! :)
SeregaZ:
тут думаю лучше, чем во flac: http://project2612.org/details.php?id=465#06-turbulence

там все-таки полностью чип эмулируют. и по всей видимости GEMS драйвер тоже. так что там звучание более приставочное, ближе к оригиналу, чем flac :)
Razor:

--- Цитата: SeregaZ от 15 Октябрь 2015, 13:38:06 ---там все-таки полностью чип эмулируют. и по всей видимости GEMS драйвер тоже. так что там звучание более приставочное, ближе к оригиналу, чем flac :)

--- Конец цитаты ---
Ну так там эмуляция, а я записал со стереовыхода реальной консоли звук. Во FLAC сделал, чтобы не пришлось качать дофига объемный WAV.  ;)
M3tro ™:
Вот нарыл сайт форума про гемсовую музыку и vgm, тоже пиндосий :). Не знаю, может ты уже был на нём, но если нет, то может там тебе чем помогут))).
http://vgmrips.net/forum/viewtopic.php?t=816
SeregaZ:
знаю знаю :) этот товарищ ValleyBell и давал ту библиотеку для проигрывания звуков, которую я еще потом запихнул в редактор юнитов. кривая она правда малость... ну уж что есть. я ему объяснял объяснял что кривая - а он уперся и все тут :) ну да впрочем проигрывание это не главное - главное конвертирование. и главная проблема в главном - в том, что gems'у подавай минимальную ноту как 1/24, а миди же практически не ограничена в размере ноты. в итоге эти мелкие ноты приходится либо игнорировать, либо добавлять им длительности. если игнорировать - теряется магия :) а если добавлять - начнется рассинхрон...

нужна некая матрица чтоль... страничка в клетку, и внеё уже потом вписывать ноты мелодии. либо второй путь - увеличивая длительность нот так-же увеличивать и темп. как писал шелл - там даже формула есть - подобным увеличением темпа можно эту 1/24 понизить до 1/32 - то есть уже больше пространства для маневра будет. правда если оригинальная песня итак была в быстром темпе - то еще больше увеличение может упереться в лимит. я правда хз какой-там верхний лимит... нижний это 40bpm. лимит по верхней ноте - 95 (а миди клавиатура имеет гораздо больше, то есть нужен сдвиг мелодии, в случае если в этой самой мелодии есть ноты больше 95).

кароче замыслов эпических валом... но как только сажусь программить, как представлю сколько всего нюансов надо учесть - сразу настроение улетучивается :) идей слишком много - кода слишком мало :)
SeregaZ:
пока ковырялся с одними проблемами - повылазили старые, которые казалось бы давно решил :) но хорошие новости в том, что вроде как есть прогресс с долбанным питчем, а значит будем надеяться скоро будет демо. правда там будет пока-что все вручную сведено... но если смогу вручную, то явно смогу и автомат сделать :)

по проигрывательной части конвертера:
1. нашлась проблема с неточным обозначением нот (эх... поверил двум разным буржуям - один процедуру дал, второй её конвертировал на мой язык :))
2. надеюсь изменить работу паузы между нотами - сейчас эта пауза жрет все время процессора. ну или 50% если двухядерный процессор. что совсем не айс.
3. к проигрывателю будет добавлена шикарная фича :) почти все для этого готово

по главной части - непосредственно конвертированию:
1. частично будут исправлены инструменты. решение вроде приглядел - посмотрим как себя поведет на практике :)
2. чтоб совсем уж круто - то видимо будет отдельный выбор по инструментам. сейчас же выбора нет. как есть так есть.
3. и в финале запланирована совсем уж козырная фича. там конечно могут возникнуть проблемы с ужатием длительностей нот - напомню что в долбанном гемс минимальный размер 1/24, что причем совсем не стандарт - хотелось бы 1/32. (увеличение тэмпа не в счет, хотя и тут мысль тоже есть :)).
4. и если все получится по предыдущим пунктам, то в конце будет добавлено еще две. тоже очень хорошие. одна из них - хотелось бы сделать красивые картинки для нот, чтоб визуально было проще сводить все это дело...

п.с.: надеюсь ни кому особо не горит сия софтина... а то я планирую ковырятся еще лет пять :))))
M3tro ™:
Boт я что-то подумал, что всё так сложно и много в этом конвертере миди2гемс. Несоответствие длительностей нот в миди и в гемсе и другие труднореализуемые фичи, всё это конечно интересно, но сколько это всё времени требует, да и ещё куча всякой непонятной фигни остаётся…
Так вот на чём писали саундтрэки к играм, которые с музыкальным движком Gems, эти Doom Troopers, EJ2, DuneII, например, как к ним музыку делали?.. Есть же наверно какие-нибудь проги, ну типа современной флки :))), только не для mp3, а для gems, чтоб музыку сразу в gems писать самому, без всяких конвертаций :)? Или нету таких?.. Но если нету, то как они музыку тогда делали для игр :??
SeregaZ:
так вроде GEMS Kit - и есть. но она для DOS вроде как. и с виндой не дружит... хотя я видел шелл запускал вроде как через дос бокс. но по моему он там допиливал от себя что-то чтоб играло. и по моему эта лабуда просто как мод трекер - листик в клетку и помечаешь где что. инструменты надо настраивать самому... не знаю поддерживает ли он миди... товарищу Клепаски написал письмо с этим вопросом, но у него или новогодний чёс и занят халтурами, или засунул меня в спам :))))

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

***

так. утро вечера мудренее :) как проснулся в обед - решил добавлять десятичные от делеев к последующим делеям и опять вычитать десятичные для нового делея и так далее. и в итоге вышла первая редакция безрассинхронного конвертирования :) профмузыканты мож конечно и докапаются... но как по мне получается здорово :) переприложил новый вариант. все так-же пока-что питчи не прикручены и плюс еще теряется последняя нота в дорожке.

***

первая робкая попытка прикрутить питч - пока только для одной ноты. (вручную, не автоматически и не совсем, по моему, верно :) надо засесть за автоматику)
Lord Taurus:

--- Цитата: SeregaZ от 03 Январь 2016, 03:07:22 ---кто угадает мелодию тому... эээ... тому просто привет :))))))

--- Конец цитаты ---

Bad To The Bone) Но кто исполнял - непомню))
И звучит пока-что неочень. Конвертером лучше получается.
SeregaZ:
:) идея то есть как поправить чтоб звучало верно... даже начальный код уже набросал. но чот как-то вдохновение все по башке не стукнет, чтоб засесть и заночь допилить до ума... все так на половину допиливаю и пропадает вдохновение.
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии