Автор Тема: обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]  (Прочитано 16630 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн M3tro ™

  • Пользователь
  • Сообщений: 698
  • Пол: Мужской
  • I’m not afraid, and yall don’t be afraid either…
    • Facebook
    • ВКонтакте
    • Steam
    • Youtube
    • Просмотр профиля
[SMD] обсуждение конвертерa музыки для Dune MIDI2GEMS
« Ответ #30 : 02 Февраль 2016, 01:04:45 »
Лицо ему пересветили. Поди диафрагма в автомате стояла на камере?
Txex, ну ты нашёл до чего докопаться :lol: :neznayu:

Оффлайн Valet2

  • Пользователь
  • Сообщений: 669
    • Просмотр профиля
Re: обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #31 : 02 Февраль 2016, 01:15:45 »
Лицо ему пересветили. Поди диафрагма в автомате стояла на камере?

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

Если решу доделать видео, я откорректирую цвета. так что не будет бледного пятна на лбу.

Оффлайн Ermac_oo

  • Пользователь
  • Сообщений: 259
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Re: обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #32 : 03 Февраль 2016, 16:31:13 »
Нет, всё в ручном режиме. Но я тогда не знал о том, что надо грузить киношный профиль с низким контрастом, чтобы не было недосвета и пересвета.

Если решу доделать видео, я откорректирую цвета. так что не будет бледного пятна на лбу.
Удачи в проектах и творчестве.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
после траура с обломом насчет идеи нашего местного колхозного стима - оригинальный стим просто сеговский эмулятор-менеджер запилил, следовательно моя задумка улетела в трубу - ну так вот... после траура чуть чуть засел за старый конвертер :) жалко что редактировать первый пост больше не дает - там хотелось бы поправить картинку-превьюшку, которая 404.



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

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

в далеких планах прикрутить функцию конвертирования из VGM файлов в наш формат :) то есть в теории любая мелодия из любой SMD игры может быть воткнута в Dune или какую другую игру, у которой звуковой движок GEMS. уж очень хочется послушать RRR мелодии штурмуя базу Сардукаров :)

Оффлайн Lord Taurus

  • Пользователь
  • Сообщений: 44
  • Пол: Мужской
  • . . .
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Давно ничего о конвертере слышно не было)
Выглядит интересно и удобно.
Кстати, я совсем перестал музыку в Дюну тем, старым конвертером вставлять. А ведь, некоторые мелодии очень даже хорошо конвертируются.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
да там главная закавыка - инструменты :) я понятия не имею как на слух подстраивать инструмент так, чтобы в VGM Music Maker он звучал примерно так-же как сам миди инструмент звучит на компьютере. там примерно 30 параметров... куда что крутить не представляю :)

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

Оффлайн -RagmuL-

  • Пользователь
  • Сообщений: 131
  • Пол: Мужской
  • -RagmuL-
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #36 : 21 Август 2016, 20:48:47 »
А это только для Дюны??

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #37 : 23 Август 2016, 12:10:26 »
эм... сложный вопрос :) по идее подойдет для любой GEMS игры, ну почти ко всем GEMS - весь вопрос в том, чтоб сначала из рома выдернуть блок с треками, после его "распаковать" той утилитой шелла, а потом его же "комбайном" запаковать измененное. правда потом как засунуть это подготовленное обратно в ром я не знаю :) не ромхакер к сожалению... - лови Ti_ и шелла - и пытай их на эту тему :) полагаю там где-то мало того вставить в ром куда нужно - понадобится видимо еще где-то внутри рома изменять размер звукового блока. ведь при изменении все поменяется.

Оффлайн M3tro ™

  • Пользователь
  • Сообщений: 698
  • Пол: Мужской
  • I’m not afraid, and yall don’t be afraid either…
    • Facebook
    • ВКонтакте
    • Steam
    • Youtube
    • Просмотр профиля
[SMD] обсуждение конвертерa музыки для Dune MIDI2DUNE
« Ответ #38 : 23 Август 2016, 19:30:42 »
подойдет для любой GEMS игры, ну почти ко всем GEMS - весь вопрос в том, чтоб сначала из рома выдернуть блок с треками, после его "распаковать" той утилитой шелла, а потом его же "комбайном" запаковать измененное.
Если кому надо, то вот сплиттинг GEMS-банков из игр с этим драйвером с инструкцией Добавление музыки в DuneHack из других GEMS-игр.
Bставлять изменённое обратно, да, пока есть возможность только в DuneHack.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #39 : 31 Август 2016, 12:21:50 »
все значит я решил наконец окончательно засесть за ту часть конвертера, которая конвертит из VGM файлов в GEMS. правда там будет не 100% один в один :) например второй музыкальный процессор я совершенно без понятия что к чему... по первому еще худо бедно разобрался, а вот второй...

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

поэтому мой первоначальный план будет выглядеть по этой схеме:


эх... тут бы еще Shiru не бросил бы эту музыкальную тему, а так-же шелл был бы простым смертным человеком - давно бы эту тему уже бы замутили :) один из них запилил VGM MM - программу для создания VGM файлов, на основе как раз нужного музыкального процессора, а второй шарит в GEMS. однако один забил на программирование этих дел, а второго хер поймаешь в сети и уж тем более хер заинтересуешь темой :) хотя есть еще третий гуру - буржуйский :) ValleyBell, но он тоже не горит желанием чуть чуть переделать его шикарную OPN библиотеку, с добавлением второго музыкального процессора SMD.

ну попробуем без них замутить :)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #40 : 01 Сентябрь 2016, 15:09:31 »
чот как-то не очень дело идет :) медленно. решено было начать с самого легкого. берем значит старый пример, где замедленно проигрывалась первая дорожка VGM трека. добавляем в неё монитор инструмента и проверяем инструмент перед каждым стартом ноты - не изменился ли. а если изменился - перепроверить а не является ли это изменение инструмента на самом деле изменением громкости. если это просто громкость - игнорируем пока-что, если не громкость - то надо сравнить с полученными ранее инструментами, дабы исключить повторяющиеся.

в результате готов функционал по сбору уникальных инструментов :)

теперь надо сделать такую-же проверку на остальных каналах, а так-же создание RAW файла, который потом будет понимать комбайн при конвертировании. возможно еще нужно будет помимо RAW сделать конвертацию в VGI - который будет совместим с VGM Music Maker. там можно будет послушать как звучит инструмент. по клавишам потыркать пианина с этим инструментом :)

такой план на первую часть.


***

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

уже прогресс можно сказать :) теперь надо посадить этот монитор на сетку, где каждая клеточка будет соответствовать 1 delay в code файле. и после делать логи :) правда этот монитор уже ко второй части марлезонского балета относится... а не к первой, которой я вроде как должен был заниматься :)
« Последнее редактирование: 01 Сентябрь 2016, 19:49:33 от SeregaZ »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #41 : 02 Сентябрь 2016, 11:58:27 »
седня уже вроде предварительный код набросал... создание файлов инструментов сделал, начал тестировать и опля! вылез эпический косяк, который чрезмерно добавит гемороя :)

поясняю: когда изменяется инструмент, то оказывается четыре параметра Total Level в нем выставляются как 127 - это означает 0 громкость. потом, судя по логу, играет первую ноту в тишине(!), последующую ноту уже идет изменение громкости скажем на 0, 12, 21, 19. в теории этой первой ноты не должно быть слышно - однако играет же :) кароче неведомая хрень... надо теперь думать коим образом отлавливать это изменение громкости и учитывать настоящую громкость инструмента именно когда она так меняется, а не в момент когда инструмент только только выставляется.

пойду поем с горя...

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #42 : 03 Сентябрь 2016, 16:29:42 »
плевался плевался... взял и плюнул на RRR с ихними слайд-эффектами в нотах :) взял другой трек. там правда другая проблема - сэмплы. я пока с ними толком работать не умею. ладно подумал пока сэмплы в игнор и запилю. ну и заодно весь проект перебрал.

сижу такой довольный... нука запустим тесты и посмотрим правильно ли считает инструменты. 6 дорожек, по одной дорожке вроде два инструмента, а шестая дорожка это сэмплы, то есть инструмента нет. значит 6 инструментов, а моя горе-система выдает что инструментов было 5 штук... чтоб тебя! ладно начал разбиратся... и тут нужна ремарка: сейчас инструмент это штук 20 значений регистров, хотя должно быть 24 - но 4 штуки это TotalLevel - громкость. я её пока отложил, поскольку еще не ясно как работать с volume в самом GEMS. в том плане сколько чего куда она должна прибавлять или убавлять. пока я её решил игнорировать, уж тем более что по треку будет явно игра с этой громкостью, а моя система будет считать что это новый инструмент, хотя по факту это просто громкость поменялась, а не инструмент... НО! в этом случае, когда вручную начал смотреть - там изменяется громкость не линейно у всех 4 параметров, как в теории должна работать volume в GEMS - а только у одного из 4 параметров TL. ишак нюхал такой вариант развития событий :)))) как теперь придумать логику для системы, чтобы она понимала что в данном случае это все-таки инструмент новый, а не изменение громкости????

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

пока-что этот временный монитор регистров при звучании VGM файлов выглядит так :)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #43 : 05 Сентябрь 2016, 12:09:40 »
дело продвинулось :) а в плане создания супер мега функции по перерасчету из регистровых значений в ноту и питчем вообще получился практически шедевр! :) пока тестирую простенькие мелодии без наворотов. опять же лезет сраный рассинхрон во все щели :) есть пару идей как с рассинхроном бороться... но пока они еще витают над головой. еще пока не поймал :)

текущие затыки значит:
рассинхрон
война с сэмплами
война со слайдами
мелкий затык - возня с "delay 0". при объявлении инструмента или питча (а может быть и громкости тоже) нужны эти 0 делеи, иначе будет "спотык" в мелодии. а если случайно встретятся из-за этого два делея рядом - мелодия затупит секунд на 5-10...



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

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #44 : 06 Сентябрь 2016, 16:24:35 »
я скоро повешусь :) начал ковырять сэмплы... и началось в деревне утро :)))

ну по порядку:

VGM файл не имеет четкой границы сэмплов. в нем лежит, значит, банк этих сэмплов и они одним большим банком лежат. нет ни "0", размечающих где один сэмпл кончается, где начинается второй, ни каких-то пауз, ни хедеров файла или еще чего... они лежат друг за другом. так-же в VGM нет указания частоты сэмплов. то есть в том банке один может лежать скажем 100кбс, рядышком 200кбс, а третий ваще 500кбс - цифры от фонаря.

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

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


мораль сей басни такова: однокликового решения, к которому я так стремился :), не выйдет. если закончу - то выйдет просто распаковщик VGM файла, который потом еще придется вручную сводить и доводить до ума, чтобы окончательный вариант напоминал оригинальный трек :) я думаю % 70 достичь удастся. еще бы % 10 добавил бы второй музыкальный процессор - шумовой, но я там не бум бум... а террорист ValleyBell ленится добавить эмулятор этого процессора в библиотеку :) для примера он отвечает за "перхоть" на барабанах. типа рабочий и бочка - FM синтезируется, а вот по тарелке цыц цыц цыц - как раз этот "шумовой" процессор создает.

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

Добавлено позже:
сижу такой хитрый... дай думаю пока простенькую проблему решу: в том VGM треке, над которым я колдую, есть момент проигрыша на барабанах. два там там в левом канале, два по середине, и два справа. и тут оказывается в GEMS нет команды на разделения звучания DAC по каналам. ну зашибись... еще один камень в мой огород. ну спасибо товарищи буржуи за сей чудесный аудио движок :)
« Последнее редактирование: 06 Сентябрь 2016, 19:00:28 от SeregaZ »

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #45 : 06 Сентябрь 2016, 22:32:02 »
ну и сделай конвертор для треков без семплов.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #46 : 06 Сентябрь 2016, 22:54:59 »
RRR треки без сэмплов :) их можно... только со слайдами надо решить. там тоже дурдом.

ладно сначала все-таки сэмплы добью. надумал я чтоб сэмплы перезаписывались. сейчас моя система подсчета частоты работает как-то не прально :) под 20к частоту определяет. хотя 10.6 (а для GEMS и того меньше 10.4 видимо) максимальная может быть. так что хочу чтоб сэмплы перезаписывались с сохранением нормального звучания, без ускорений и замедлений. еще бы только буржуи подсказали насчет этой bass.dll :) не пойму как там конвертировать...

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #47 : 07 Сентябрь 2016, 17:36:06 »
весь день проковырялся со сраной bass.dll библиотекой... и так и нет решения. если кто работал с энтой библиотекой и знает как реализовать эту задачу, о которой ниже - убедительная просьба отписаться :)

ну так вот - поскольку сэмплы в VGM файле были посчитаны моей системой как 15к и даже почти 20к частоты, чего быть не может - то задумка была брать и конвертить эти сэмплы из этих 15к в 10.4к для последующего использования в GEMS. и даже нашлась эта команда для изменения частоты в bass:
BASS_ChannelSetAttribute(tempostream, #BASS_ATTRIB_FREQ, frequencynew)но после этого если оригинальная частота была скажем 15, а стала 10 - то стало по сути меееедлееееннное проигрывание. а мне хотелось бы чтоб скорость проигрывания и высота оставалась нормальной, менялась просто частота дискретизации или как там она по научному... рыл рыл и вроде как рекомендуют увеличивать скорость проигрывания с помощью
BASS_ChannelSetAttribute(tempostream, #BASS_ATTRIB_TEMPO, proccount)однако я не вдупляю как теперь расчитать этот самый сраный коэфициент изменения proccount. я думал что примерно так:
proccount = (frequencyvalue - frequencynew) / (frequencyvalue / 100)
где frequencyvalue - оригинальное значение частоты, frequencynew - те заветные 10.4к

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

подумал может не тот параметр взял... там три было на выбор:
Цитата
    ;BASS_ATTRIB_TEMPO   The tempo of a channel in percent [-95%...0...+5000%].
    ;BASS_ATTRIB_TEMPO_PITCH   The pitch of a channel in semitones [-60...0...+60].
    ;BASS_ATTRIB_TEMPO_FREQ   The sample rate of a channel in Hz (but calculates by the same % As BASS_ATTRIB_TEMPO).

кароче весь день зазря потерял...


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

итак текущие пока не решенные проблемы:
1. сраный bass.dll с фишкой пересохранения сэмплов под нужной частотой без изменения скорости проигрывания
2. сама система определения сэмплов готова лишь частично
3. громкость для инструментов не отслеживается
4. одно из вкусностей - слайды :) RRR треки должны быть обязательно конвертануты :) из-за них можно сказать все и затевалось.
5. пока не дописывает в конце проигрывания самые последние ноты по дорожкам
6. система лупов не работает. если оригинальный VGM трек мог играть скажем 3 минуты, то конвертер будет конвертить только от начала и до конца самого файла, без учета loop. в результате трек как короче по длительности, так и гораздо больше по размеру из-за чрезмерного количества команд delay и pitch.
7. пока даже не в курсе как подступится ко второму музыкальному процессору. (например он воспроизводит перхоть - удары по тарелке в барабане. или в треках дюны например тихими такими звуками высокими добавляет атмосферности)
8. при встрече двух delay рядом происходит эпический тупняк мелодии. надо продумать этот момент.


9. не решаемая проблема - игра со стерео каналами в виду, по видимому, ограничения самого движка GEMS. если кто сможет поправить сам этот самый движок, чтобы инициализация проигрывания сэмплов там могла происходить с тремя вариантами:
FMWrite(2, 0xB6, 0xC0) (как оно сейчас. включает и левый и правый канал)
FMWrite(2, 0xB6, 0x40) (только правый)
FMWrite(2, 0xB6, 0x80) (только левый)
и чтоб это безобразие управлялось файлом инструмента sfx, где внизу была бы добавлена новая команда CHAN:
RAW 'sample_0B.snd'
FLAGS =$45
SKIP  =$0000
FIRST =$0AA8
LOOP  =$0000
END   =$0000
CHAN  =$0000
$0000 - стерео, оба (на случай совместимости со старыми треками, где нет этого параметра в файле)
$0010 - правый (левый отключен этой единичкой) FMWrite(2, 0xB6, 0x40)
$0001 - левый (правый отключен этой единичкой) FMWrite(2, 0xB6, 0x80)

если сам движок может еще и получится поправить, то вот комбайн-программу мы хер переделаем :) шелл где-то блудит и явно переделывать это дело не будет.
« Последнее редактирование: 07 Сентябрь 2016, 22:28:17 от SeregaZ »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #48 : 07 Сентябрь 2016, 22:26:05 »
думал спать пойти... и решил 5 минут еще попрограммить... и в итоге через 2 часа родил алгоритм по определению громкости инструмента :))) шедееееевррррррр! так что теперь еще и громкость правильная. надо будет вычеркнуть этот пункт про громкость :)))) а вот насчет bass.dll буржуи ничо не посоветовали :( эх...

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #49 : 08 Сентябрь 2016, 19:40:27 »
продолжаю вести свой блог горе-разработчика.

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

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

ну и как тут мне придумать алгоритм просчета итоговой частоты? точнее правильно сказать подгонки под значения GEMS 10.4/8.7/7.3/6.5/5.8/5.2 (или даже не GEMS, а MIDI наверное)

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

если посмотреть на самый первый сэмпл - проблем с ним нет. размер и частота практически одинаковые. тупо перегоняем эти 18k в 10.4k, будет конечно потеря качества, но высота звучания будет сохранена (что я зазря чтоль с этой bass.dll трахался?)

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

вот третий сэмпл самый геморройный. мало того что размер все время скачет, так еще и частота. казалось бы тупо взять средний размер частоты и максимальный размер, что попадался и все дела... НО! если слушать трек внимательно, то там есть момент где играют 3 барабана. такой перестук или как он там называется... проигрыш барабанов чтоль... черт знает кароче на первый взгляд это 3 разных барабана на установке. да только если посмотреть на сэмплы, какие система выбирает по адресам - выяснится что это один и тот-же сэмпл :) один и тотже барабан, просто у него изменяется частота. при повышении частоты кажется что это другой барабан. благодаря этой сортировке четко видно это различие по частотам 11021-11117 один барабан, 13745-14076 второй, 18624-19149 третий. вот КАК научить систему видеть это разделение и чтоб она поняла что барабаны реально звучать по разному???? :))))

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

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


тут причем одна немаловажная ремарка: максимальный размер третьего геморройного сэмпла 3016, но этого не может быть, так как если взять адрес 4 сэмпла 45293559 и вычесть из него адрес третьего 45290567 = будет 2992

но и то это разделение общего банка на точно известные адреса, и соответственно размеры тоже не может быть 100% точным :) проблема в том, что VGM может проиграть два сэмпла вместе, без разделения. геморрой? конечно геморрой :) теперь понятно чо папки так плевались от мысли создания GEMS конвертера (да и вобще любого другого конвертера тоже :))

так что буду думать насчет алгоритма.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #50 : 09 Сентябрь 2016, 21:12:33 »
оказалось я страдал ананизмом с этой самой bass.dll :) точнее код то конечно хороший и все такое... да только сама эта длл, а точнее её подружки типа bassmix.dll и bassenc.dll оказались весьма капризные - и требовали чтоб рядом с ехе файлом валялся bass.dll. но я то хотел использовать библиотеку изнутри главного ехе файла. нафига козе боян таскать рядом еще какие-то файлы? в наш век портабельности подобное уже не катит. все свое должно носить с собой :)

так что bass.dll предается анафеме! (на время. пока я за вторую часть конвертера не засяду)

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

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

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #51 : 10 Сентябрь 2016, 12:44:05 »
кароче я думаю что окошек каналов должно быть не 6, а 7 штук. сейчас 6 канал рассчитан на сэмплы, и там в шапку добавляется некий сэмпловский инструмент с индексом FF, ставится duration 2 - поскольку сэмплы это обычно барабаны и они очень короткие. однако если трек без сэмплов, то эти параметры будут только мешать. или даже может идти чередование семплов с обычными FM инструментами. поэтому я думаю надо наверное 7 окошек. в 6 как обычные FM инструменты, а 7 только для сэмплов. тем более что в code файлах может быть больше 6 каналов расписано. таким образом можно будет решить проблему с этими заглавлениями каналов :)

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


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

в этом и есть главное проклятье GEMS :) но в этом же и благословение: может быть куда больше чем 6 каналов, просто надо чтоб они не перекрывали друг друга, а система уже сама распихает идущие по очереди ноты по свободным каналам.


вот надо думать как бы это ограничение обойтить и при этом сохранить магию мелодии. вариант первый - подкручивать этот самый ReleaseRate, чтобы ноты быстрее заканчивались, и соответственно освобождали канал для новых нот. вариант второй: уменьшить внутренний VGM'ный делитель тиков, что увеличит количество тиков для GEMS для того-же отрезка по времени, но так-же тогда надо будет увеличивать тэмп воспроизведения. и тогда существует шанс, что между нотами появится расстояние побольше, и может быть нота успеет затухнуть. вариант тры - и подкрутить совсем чуть чуть ReleaseRate и уменьшить тот внутренний делитель, но вместе с этим увеличением количества тиков GEMS (delay 1), еще чуть чуть произвести обрезание нот чтобы они заканчивались чуть чуть раньше.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #52 : 11 Сентябрь 2016, 16:58:05 »
пока забросил доделку сэмплов и отпилку помаленьку длительности нот - засел за PSG в слепую. хотелось бы конечно дллку с эмулятором SN76489, чтоб она звук рожала... но с этим делом видимо совсем тухло. ну так вот засесть то засел и уже проклял все на свете с этим PSG :))))

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

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #53 : 14 Сентябрь 2016, 21:09:14 »
мозг вынес куче народу на форумах, но вроде уже что-то там начало хрипеть и издавать звуки :) прогресс мать его! а если получится все сделать, то будет полноценная PSG поддержка при проигрывании в конвертере.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #54 : 19 Сентябрь 2016, 19:02:16 »
с тем хрипением так и не осилил. зато вспомнил что у меня был где-то код примера генератора тонов. нашел, расковырял, и заставил его петь. теперь три канала - которые тоновые - поет, а вот как подступится к 4 каналу, который шумовой я вообще без понятия. там столько буржуйской писанины непонятной... ладно бы по русски та статья была, хотя имя автора то вроде русское - Максим :) но, зараза, буржуй какой-то и по нашему не бельмеса.

я правда не представляю еще как теперь синхронизировать эти два горе недопроцессора\чипа... походу программа будет нереально тормозить компьютер своими требованиями сразу к двум источником сигнала :)

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

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #55 : 20 Сентябрь 2016, 22:10:44 »
ту дум дум турурум тум тум турурум тум тум тум! один буржуйский товарищ сделал конвертацию кода из исходников в "наш" язык и теперь я могу это дело использовать :))) я смог сделать только 3 канала, а он сделал все 4. так что завтра\послезавтра засяду за склеивание двух чипов вместе и посмотрим смогут ли они синхронно петь :) конечно там стописят подводных камней будет, но я так рад что этот момент завершился благополучно!

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

Оффлайн M3tro ™

  • Пользователь
  • Сообщений: 698
  • Пол: Мужской
  • I’m not afraid, and yall don’t be afraid either…
    • Facebook
    • ВКонтакте
    • Steam
    • Youtube
    • Просмотр профиля
[SMD] обсуждение конвертерa музыки для Dune MIDI2GEMS
« Ответ #56 : 20 Сентябрь 2016, 22:41:06 »
можно будет добавить это дело к кнопке проигрывания звуков выстрелов для танков, напомню что некоторые звуки он как раз из-за этого не проигрывал
A вот это годная новость :). Добавляй, явно лишним не будет.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Re: обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #57 : 24 Сентябрь 2016, 16:36:11 »
предварительные тесты показали что поет относительно синхронно :) хотя я думал раз движки разные, то и плеваться будет - но вроде нет... нормально. за само конвертирование еще так и не засел - буржуйский товарищ допиливает PSG, а я мозги колупаю другому буржуйскому товарищу :) за два дня кое как уяснил коим образом экстра хедеры в VGM расположены. правда здесь же возникает другая проблема: некоторые VGM'ки, от черт знает каких консолей или платформ, имеют по двойному чипу PSG, то есть там получается 6 каналов тоновых и 2 шумовых. я не представляю как это дело в GEMS конвертить :) у нас то только 1 чип, а не два штуки... не знаю, может можно синтезировать SN'нный инструмент для YM, тогда бы решилась проблема с недостатком каналов. а второй момент - некоторые треки играют сэмплы через этот самый PSG - тут я вообще без понятия как производить запись этого сэмпла для перевоспроизведение через YM. мы SN даж не смогли заставить петь сэмплы :) точнее не мы, а мой товарищь буржуйский... "мы" это я так... подмазался :)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #58 : 25 Октябрь 2016, 00:32:34 »
все еще пилю проигрыватель code, точнее PSG его часть. вот тестер инструментов для PSG запилил :)


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

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

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2498
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD]
« Ответ #59 : 25 Октябрь 2016, 15:58:56 »
б...ть. сделать то сделал, но забыл что таймеры то разные... придется все переделывать.