| Разработка и ромхакинг > Ромхакинг и программирование |
| обсуждение конвертерa музыки для Dune MIDI2DUNE [SMD] |
| << < (3/6) > >> |
| SeregaZ:
чот как-то не очень дело идет :) медленно. решено было начать с самого легкого. берем значит старый пример, где замедленно проигрывалась первая дорожка VGM трека. добавляем в неё монитор инструмента и проверяем инструмент перед каждым стартом ноты - не изменился ли. а если изменился - перепроверить а не является ли это изменение инструмента на самом деле изменением громкости. если это просто громкость - игнорируем пока-что, если не громкость - то надо сравнить с полученными ранее инструментами, дабы исключить повторяющиеся. в результате готов функционал по сбору уникальных инструментов :) теперь надо сделать такую-же проверку на остальных каналах, а так-же создание RAW файла, который потом будет понимать комбайн при конвертировании. возможно еще нужно будет помимо RAW сделать конвертацию в VGI - который будет совместим с VGM Music Maker. там можно будет послушать как звучит инструмент. по клавишам потыркать пианина с этим инструментом :) такой план на первую часть. *** еще чуток половил вдохновения... и вроде оно частично меня посетило :) сделал маленький графический монитор нот, которые играют: уже прогресс можно сказать :) теперь надо посадить этот монитор на сетку, где каждая клеточка будет соответствовать 1 delay в code файле. и после делать логи :) правда этот монитор уже ко второй части марлезонского балета относится... а не к первой, которой я вроде как должен был заниматься :) |
| SeregaZ:
седня уже вроде предварительный код набросал... создание файлов инструментов сделал, начал тестировать и опля! вылез эпический косяк, который чрезмерно добавит гемороя :) поясняю: когда изменяется инструмент, то оказывается четыре параметра Total Level в нем выставляются как 127 - это означает 0 громкость. потом, судя по логу, играет первую ноту в тишине(!), последующую ноту уже идет изменение громкости скажем на 0, 12, 21, 19. в теории этой первой ноты не должно быть слышно - однако играет же :) кароче неведомая хрень... надо теперь думать коим образом отлавливать это изменение громкости и учитывать настоящую громкость инструмента именно когда она так меняется, а не в момент когда инструмент только только выставляется. пойду поем с горя... |
| SeregaZ:
плевался плевался... взял и плюнул на RRR с ихними слайд-эффектами в нотах :) взял другой трек. там правда другая проблема - сэмплы. я пока с ними толком работать не умею. ладно подумал пока сэмплы в игнор и запилю. ну и заодно весь проект перебрал. сижу такой довольный... нука запустим тесты и посмотрим правильно ли считает инструменты. 6 дорожек, по одной дорожке вроде два инструмента, а шестая дорожка это сэмплы, то есть инструмента нет. значит 6 инструментов, а моя горе-система выдает что инструментов было 5 штук... чтоб тебя! ладно начал разбиратся... и тут нужна ремарка: сейчас инструмент это штук 20 значений регистров, хотя должно быть 24 - но 4 штуки это TotalLevel - громкость. я её пока отложил, поскольку еще не ясно как работать с volume в самом GEMS. в том плане сколько чего куда она должна прибавлять или убавлять. пока я её решил игнорировать, уж тем более что по треку будет явно игра с этой громкостью, а моя система будет считать что это новый инструмент, хотя по факту это просто громкость поменялась, а не инструмент... НО! в этом случае, когда вручную начал смотреть - там изменяется громкость не линейно у всех 4 параметров, как в теории должна работать volume в GEMS - а только у одного из 4 параметров TL. ишак нюхал такой вариант развития событий :)))) как теперь придумать логику для системы, чтобы она понимала что в данном случае это все-таки инструмент новый, а не изменение громкости???? оставлять возможность править вручную совсем не айс... хотелось бы чтоб эти процедуры все делались автоматически. пока-что этот временный монитор регистров при звучании VGM файлов выглядит так :) |
| SeregaZ:
дело продвинулось :) а в плане создания супер мега функции по перерасчету из регистровых значений в ноту и питчем вообще получился практически шедевр! :) пока тестирую простенькие мелодии без наворотов. опять же лезет сраный рассинхрон во все щели :) есть пару идей как с рассинхроном бороться... но пока они еще витают над головой. еще пока не поймал :) текущие затыки значит: рассинхрон война с сэмплами война со слайдами мелкий затык - возня с "delay 0". при объявлении инструмента или питча (а может быть и громкости тоже) нужны эти 0 делеи, иначе будет "спотык" в мелодии. а если случайно встретятся из-за этого два делея рядом - мелодия затупит секунд на 5-10... Добавлено позже: если у кого есть учетка на сраном соник ретро - дайте порулить в личку :) там тема есть с гемсом... на електропейж тоже есть, но на электро все стухло... на ретро тоже впрочем подозреваю все тухлое, но мож там чо путного ответят. |
| SeregaZ:
я скоро повешусь :) начал ковырять сэмплы... и началось в деревне утро :))) ну по порядку: VGM файл не имеет четкой границы сэмплов. в нем лежит, значит, банк этих сэмплов и они одним большим банком лежат. нет ни "0", размечающих где один сэмпл кончается, где начинается второй, ни каких-то пауз, ни хедеров файла или еще чего... они лежат друг за другом. так-же в VGM нет указания частоты сэмплов. то есть в том банке один может лежать скажем 100кбс, рядышком 200кбс, а третий ваще 500кбс - цифры от фонаря. дальше в VGM нет четкого флага что играть отсюда и досюда. точнее отсюда то есть, но докуда играть не сказано. там просто выставляется, значит, позиция типа начинать играть с 2486 байта банка сэмплов. указатель поставился, а дальше идут команды играть по 1 байту. ладно был бы скажем банк, где лежат 4 сэмпла друг за другом, я скажем просто отлавливаю момент выставления маркера откуда читать банк, а после в конце трека сортирую эти попадавшиеся метки, таким образом можно было бы разделить банк на четких 4 сэмпла... однако хер там с два :) бывает что адрес откуда играть выставлен, но четкого окончания докуда играть нет. скажем один сэмпл он выставит и отыграет, дальше моя программа подумает что сэмпл кончился... а он не кончился, и продолжит играть через паузу с момента остановки предидущего проигрывания. каааааак в таком случае узнать что нужно указать старт сэмпла именно здесь? :)))) ишак нюхал это дело... ладно, смирился, что какие-то сэмплы будут утеряны... ковыряю дальше. придумал такой довольный функцию, которая мне возвращала номер сэмпла который сейчас играет. сижу слушаю трек через мой проигрыватель\логер... и тут вдруг барабаны на повышение пошли. я думаю ну сейчас моя система поймает что это новый сэмпл - а нифига :) адрес то тот-же, система думает что сэмпл уже есть в базе... вся закавыка в том, что теперь изменилась частота сэмпла! твою ж мать! кааааак это учесть при конвертации? :))))) уж тем более что у меня всего, по моему, 5 вариантов возможной частоты для сэмпла согласно GEMS. мораль сей басни такова: однокликового решения, к которому я так стремился :), не выйдет. если закончу - то выйдет просто распаковщик VGM файла, который потом еще придется вручную сводить и доводить до ума, чтобы окончательный вариант напоминал оригинальный трек :) я думаю % 70 достичь удастся. еще бы % 10 добавил бы второй музыкальный процессор - шумовой, но я там не бум бум... а террорист ValleyBell ленится добавить эмулятор этого процессора в библиотеку :) для примера он отвечает за "перхоть" на барабанах. типа рабочий и бочка - FM синтезируется, а вот по тарелке цыц цыц цыц - как раз этот "шумовой" процессор создает. пойду думать как выкрутится с этими сраными сэмплами. хотя думаю сначала надо было с рассинхроном разобраться... Добавлено позже: сижу такой хитрый... дай думаю пока простенькую проблему решу: в том VGM треке, над которым я колдую, есть момент проигрыша на барабанах. два там там в левом канале, два по середине, и два справа. и тут оказывается в GEMS нет команды на разделения звучания DAC по каналам. ну зашибись... еще один камень в мой огород. ну спасибо товарищи буржуи за сей чудесный аудио движок :) |
| Ti_:
ну и сделай конвертор для треков без семплов. |
| SeregaZ:
RRR треки без сэмплов :) их можно... только со слайдами надо решить. там тоже дурдом. ладно сначала все-таки сэмплы добью. надумал я чтоб сэмплы перезаписывались. сейчас моя система подсчета частоты работает как-то не прально :) под 20к частоту определяет. хотя 10.6 (а для GEMS и того меньше 10.4 видимо) максимальная может быть. так что хочу чтоб сэмплы перезаписывались с сохранением нормального звучания, без ускорений и замедлений. еще бы только буржуи подсказали насчет этой bass.dll :) не пойму как там конвертировать... |
| SeregaZ:
весь день проковырялся со сраной 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) если сам движок может еще и получится поправить, то вот комбайн-программу мы хер переделаем :) шелл где-то блудит и явно переделывать это дело не будет. |
| SeregaZ:
думал спать пойти... и решил 5 минут еще попрограммить... и в итоге через 2 часа родил алгоритм по определению громкости инструмента :))) шедееееевррррррр! так что теперь еще и громкость правильная. надо будет вычеркнуть этот пункт про громкость :)))) а вот насчет bass.dll буржуи ничо не посоветовали :( эх... |
| SeregaZ:
продолжаю вести свой блог горе-разработчика. буржуи посодействовали с кодом для bass.dll, и на его осмысление ушло полтара дня где-то :) ну вроде осилил. напомню в чем задумка: в VGM файле нет четкого понятия размера и частоты дискретизации WAV сэмплов. я придумал функцию по просчету энтой самой частоты, но однако она все равно выдает сомнительные результаты :) вот пример лога. для удобства были рассортированы. первое - адрес сэмпла, второе размер, третье частота: --- Код: ---45285479 2471 18580 45285479 2471 18879 45285479 2471 18879 45285479 2471 18879 45285479 2471 18883 45285479 2471 18886 45285479 2471 18886 45285479 2471 18889 45285479 2471 18889 45285479 2471 18896 45285479 2471 19014 45285479 2471 19081 45285479 2471 19088 45285479 2471 19098 45285479 2471 19335 45289287 4296 14322 бракованый 45290567 1494 11021 45290567 1430 11039 45290567 1456 11076 45290567 1430 11079 45290567 1430 11083 45290567 1430 11095 45290567 1456 11109 45290567 1494 11112 45290567 1456 11117 45290567 2992 13745 45290567 3016 13762 45290567 3016 13764 45290567 3016 13764 45290567 3016 13767 45290567 1784 13771 45290567 1784 13771 45290567 3016 13780 45290567 1808 13785 45290567 3016 13786 45290567 1808 13795 45290567 1808 13797 45290567 1808 13802 45290567 1808 13802 45290567 1808 13802 45290567 1784 13829 45290567 1808 13835 45290567 1808 13852 45290567 3016 13855 45290567 1880 13855 45290567 3016 13858 45290567 3016 13859 45290567 3016 13859 45290567 3016 13859 45290567 1880 13860 45290567 3016 13862 45290567 3016 13862 45290567 3016 13862 45290567 1808 13862 45290567 3016 13863 45290567 3016 13863 45290567 3016 13863 45290567 1808 13864 45290567 3016 13865 45290567 3016 13865 45290567 3016 13866 45290567 3016 13868 45290567 3016 13871 45290567 1880 13906 45290567 2992 13945 45290567 2992 13963 45290567 3016 13965 45290567 3016 13970 45290567 1880 14076 45290567 2302 18624 45290567 2422 18762 45290567 2452 18770 45290567 2452 18773 45290567 2452 18812 45290567 2490 18832 45290567 2452 18865 45290567 2452 18868 45290567 2452 18871 45290567 2528 18873 45290567 2558 18889 45290567 2558 18969 45290567 2528 19149 45293559 1232 14898 45293559 1232 14898 45293559 1232 14906 45293559 1232 14906 45293559 1232 14906 45293559 1232 14910 45293559 1232 14910 45293559 1232 14914 45293559 1232 14914 45293559 1232 14914 45293559 1232 14918 45293559 1232 14918 45293559 1232 14922 45293559 1232 14926 45293559 1232 14926 45293559 1232 14930 45293559 1232 14934 45293559 1232 14934 45293559 1232 15176 45293559 1232 15176 45293559 1232 15176 45293559 1232 15181 45293559 1232 15185 45293559 1232 15185 45293559 1232 15185 45293559 1232 15189 45293559 1232 15189 45293559 1232 15189 45293559 1232 15189 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15193 45293559 1232 15198 45293559 1232 15198 45293559 1232 15198 45293559 1232 15198 45293559 1232 15198 45293559 1232 15198 45293559 1232 15202 45293559 1232 15202 45293559 1232 15202 45293559 1232 15202 45293559 1232 15202 45293559 1232 15202 45293559 1232 15202 45293559 1232 15206 45293559 1232 15206 45293559 1232 15206 45293559 1232 15206 45293559 1232 15206 45293559 1232 15206 45293559 1232 15206 45293559 1232 15206 45293559 1232 15210 45293559 1232 15210 45293559 1232 15210 45293559 1232 15210 45293559 1232 15210 45293559 1232 15215 45293559 1232 15215 45293559 1232 15223 45293559 1232 15466 45293559 1232 15466 45293559 1232 15479 45293559 1232 15492 45293559 1232 15492 45293559 1232 15497 45293559 1232 15497 45293559 1232 15497 45293559 1232 15497 45293559 1232 15497 45293559 1232 15501 45293559 1232 15501 45293559 1232 15501 45293559 1232 15505 45293559 1232 15505 45293559 1232 15505 45293559 1232 15510 45293559 1232 15510 45294791 1207 15165 45294791 1207 14868 --- Конец кода --- ну и как тут мне придумать алгоритм просчета итоговой частоты? точнее правильно сказать подгонки под значения 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:
оказалось я страдал ананизмом с этой самой bass.dll :) точнее код то конечно хороший и все такое... да только сама эта длл, а точнее её подружки типа bassmix.dll и bassenc.dll оказались весьма капризные - и требовали чтоб рядом с ехе файлом валялся bass.dll. но я то хотел использовать библиотеку изнутри главного ехе файла. нафига козе боян таскать рядом еще какие-то файлы? в наш век портабельности подобное уже не катит. все свое должно носить с собой :) так что bass.dll предается анафеме! (на время. пока я за вторую часть конвертера не засяду) оказалось я вполне смог намудрить свой собственный алгоритм по переконвертированию сэмплов в нужные 10.4к дискретизации. когда закончил код этой конвертации - сам абалдел что с первого раза конвертирует как надо :) причем в обе стороны - как с большего в 10.4, так и из меньшего в 10.4 (правда там чуток металлический такой легкий свист или эхо немножко слышно :)) так что зазря только столько времени потерял с этим сраным bass.dll. думаю седня сэмплы добью. точнее одну часть сэмпловного функционала. там будет галка "срать на сэмплы". хотя я не уверен еще в конечном названии... или может "грести под одну гребенку". то есть при помечивании этой галки сэмплы не будут разбиваться по частотам как бы на разные сэмлы. будет тупо один сэмпл какой-то конкретной модели и капец. с разбитием на разные я еще пока не придумал алгоритм. пока думаю оставить это на совести пользователя, выбивая табличку со всеми сэмплами, чтобы там пользователь сам отбирал по группам эти самые сэмплы. |
| SeregaZ:
кароче я думаю что окошек каналов должно быть не 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:
пока забросил доделку сэмплов и отпилку помаленьку длительности нот - засел за PSG в слепую. хотелось бы конечно дллку с эмулятором SN76489, чтоб она звук рожала... но с этим делом видимо совсем тухло. ну так вот засесть то засел и уже проклял все на свете с этим PSG :)))) в GEMS есть понятие инструмент для этого самого PSG, но в VGM для PSG всего одна команда. да, там есть разделение что это - выставление ноты или громкости или шума... но где брать все остальное? там 7 параметров для звука в настройках инструмента. и тут значит выясняется что подобные настройки надо будет выковыривать из поведения самой ноты :) с какой скоростью она играет, до какой громкости добирается, с какой скоростью затухает - то есть для расчета параметров инструмента придется рожать все эти алгоритмы :) йокараный бабай! тут даже просто представить что делать - уже становится страшно, а про написание кода подумать - так вобще ужос... говорила мама - женись, так нет же я за разработку конвертера взялся :) эх... пойду опять с горя поем. |
| SeregaZ:
мозг вынес куче народу на форумах, но вроде уже что-то там начало хрипеть и издавать звуки :) прогресс мать его! а если получится все сделать, то будет полноценная PSG поддержка при проигрывании в конвертере. |
| SeregaZ:
с тем хрипением так и не осилил. зато вспомнил что у меня был где-то код примера генератора тонов. нашел, расковырял, и заставил его петь. теперь три канала - которые тоновые - поет, а вот как подступится к 4 каналу, который шумовой я вообще без понятия. там столько буржуйской писанины непонятной... ладно бы по русски та статья была, хотя имя автора то вроде русское - Максим :) но, зараза, буржуй какой-то и по нашему не бельмеса. я правда не представляю еще как теперь синхронизировать эти два горе недопроцессора\чипа... походу программа будет нереально тормозить компьютер своими требованиями сразу к двум источником сигнала :) так-же еще там читаю что этот SN может проигрывать сэмплы, а значит могут встречаться треки где такие сэмплы использовались, а значит придется как-то этот сэмпл читать и переконвертировать для проигрывания на YM... но об этом даже пока и думать смысла нет - с шумом то еще пока не ясно :) ни че р та не ясно :) |
| SeregaZ:
ту дум дум турурум тум тум турурум тум тум тум! один буржуйский товарищ сделал конвертацию кода из исходников в "наш" язык и теперь я могу это дело использовать :))) я смог сделать только 3 канала, а он сделал все 4. так что завтра\послезавтра засяду за склеивание двух чипов вместе и посмотрим смогут ли они синхронно петь :) конечно там стописят подводных камней будет, но я так рад что этот момент завершился благополучно! думаю даже можно будет добавить это дело к кнопке проигрывания звуков выстрелов для танков, напомню что некоторые звуки он как раз из-за этого не проигрывал - поскольку PSG не поддерживалось библиотекой ValleyBell'a. |
| M3tro ™:
--- Цитата: SeregaZ от 20 Сентябрь 2016, 22:10:44 ---можно будет добавить это дело к кнопке проигрывания звуков выстрелов для танков, напомню что некоторые звуки он как раз из-за этого не проигрывал --- Конец цитаты --- A вот это годная новость :). Добавляй, явно лишним не будет. |
| SeregaZ:
предварительные тесты показали что поет относительно синхронно :) хотя я думал раз движки разные, то и плеваться будет - но вроде нет... нормально. за само конвертирование еще так и не засел - буржуйский товарищ допиливает PSG, а я мозги колупаю другому буржуйскому товарищу :) за два дня кое как уяснил коим образом экстра хедеры в VGM расположены. правда здесь же возникает другая проблема: некоторые VGM'ки, от черт знает каких консолей или платформ, имеют по двойному чипу PSG, то есть там получается 6 каналов тоновых и 2 шумовых. я не представляю как это дело в GEMS конвертить :) у нас то только 1 чип, а не два штуки... не знаю, может можно синтезировать SN'нный инструмент для YM, тогда бы решилась проблема с недостатком каналов. а второй момент - некоторые треки играют сэмплы через этот самый PSG - тут я вообще без понятия как производить запись этого сэмпла для перевоспроизведение через YM. мы SN даж не смогли заставить петь сэмплы :) точнее не мы, а мой товарищь буржуйский... "мы" это я так... подмазался :) |
| SeregaZ:
все еще пилю проигрыватель code, точнее PSG его часть. вот тестер инструментов для PSG запилил :) более менее разобрался как работают инструменты для PSG. и вроде как уровень работы похож на то что делает оригинальный GEMS :) а второй радостный момент - я родил динамическое распределение каналов PSG. а если смог для PSG - значит смогу на этой основе и для FM :) там правда 6 каналов, не то что PSG - четыре, точнее даже три в особых случаях... с этим багажом знаний про инструменты PSG - как доделаю проигрыватель, вернусь к VGM конвертеру. интересно смогу ли доделать до нового года? :))) наврятли... но было бы здорово наконец доделать и избавится от этого проекта :) |
| SeregaZ:
б...ть. сделать то сделал, но забыл что таймеры то разные... придется все переделывать. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |