Пятница, 19.04.2024, 19:13
Вы вошли как Гость | Группа "Гости" | RSS

.
 
 
Главная Регистрация Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 6 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Модератор форума: Nemesis_c  
Форум » Elektropage.ru » Other » GEMS sound driver research (копипаста с соникретро)
GEMS sound driver research
SeregaZДата: Суббота, 22.10.2016, 03:43 | Сообщение # 151


 
Сообщений: 50
Статус: Offline
 

я пока только Attack Rate. и чего это фигню? :)) близко у меня получается. так что не совсем уж и фигня:

Код
Global Dim PSGInstARValues(0)

Procedure FillARarray(ARvalue.i, ALvalue.i)
  
  ReDim PSGInstARValues(0) ; обнуление старого массива
  
  If ARvalue = 32 ; 0 AR, сразу топовая громкость инструмента без разгона
    PSGInstARValues(0) = ALvalue
  Else
    counterd.d     = 255 / (ARvalue * 15)
    countershift.d = counterd
    
    For i = 15 To ALvalue Step -1
      
      counteri = Int(countershift)
      
      If counteri > 0
        startnumarray = ArraySize(PSGInstARValues())
        ReDim PSGInstARValues(startnumarray + counteri)
        For k = startnumarray To startnumarray + counteri
          PSGInstARValues(k) = i
        Next
      EndIf
      
      countershift = countershift - counteri ; вычисляем остаток
      countershift + counterd                ; прибавляем остаток к значению
      
    Next
    
  EndIf
  
EndProcedure

;FillARarray($1B, 0)
;FillARarray($1F, 0)
FillARarray($0A, 0)

For i = 0 To ArraySize(PSGInstARValues())
  Debug PSGInstARValues(i)
Next


в итоге вышло так:
Код
;$1B - 27 - 14, 12, 10,  9,  7,  5,  4,  2,  0,  0
;           14  12  11   9   8   6   4   3   1   0  0

;$1F - 31 - 14, 12, 10,  8,  6   4   2   0   0
;           14  12  10   8   6   5   3   1   1

;$0A - 10 - 15, 14  14  13, 12, 12, 11, 10, 10,  9,  9,  8,  7,  7,  6,  5,  5,  4,  4,  3,  2,  2,  1,  0,  0,  0
;           15  14  14  13  13  12  11  11  10  10   9   8   8   7   7   6   5   5   4   4   3   3   2   1   1   0  0  0


первое значение правильное, вторая строчка - то что моя функция рожает. так что почти-что :) в данном случае подразумевалось что Attack Level = 0 - максимальное значение. когда значение меньше, то предполагается что проигрываться будет массив только до наступления значения той громкости, которая будет выставлена в Attack Level

Добавлено (22.10.2016, 01:21)
---------------------------------------------
хыыы :)))) поменял 15 на 16 и вообще стало 100% попадание :)))))))))) сам не ожидал.

Код
counterd.d     = 255 / (ARvalue * 16)

Добавлено (22.10.2016, 03:43)
---------------------------------------------
Decoy Rate таж самая формула, только что массив заполнятся задом наперед по отношению к Attack Rate. ща еще посмотрю Relise Rate или как он там правильно... подозреваю таж самая история :)

 
r57shellДата: Суббота, 22.10.2016, 19:08 | Сообщение # 152


 
Сообщений: 632
Статус: Offline
 

Короче я написал как надо, а дальше сам.

Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Воскресенье, 23.10.2016, 23:11 | Сообщение # 153


 
Сообщений: 50
Статус: Offline
 

ну я кароче не понял, как всегда :) сделал по своей формуле. еще правда тип шум не сделал, но тоновый вроде ничего так. порой правда еще вылетает... с этим массивом непонятно где что накосячил... выкинуть бы массивы, и расчитывать налету, но пока не представляю как :) так что пока через массив.
https://www.dropbox.com/s/qy7q8p7b1qyslu1/PSGInstrumentTester.zip?dl=1
 
Nemesis_cДата: Воскресенье, 23.10.2016, 23:12 | Сообщение # 154


 
Сообщений: 1148
Статус: Offline
 

как у вас тут многа букафф... debile
 
SeregaZДата: Воскресенье, 23.10.2016, 23:53 | Сообщение # 155


 
Сообщений: 50
Статус: Offline
 

ну так а как ты хотел? я не программист, французским не владею, типы переменных путаю... поэтому стописятраз переспрашиваю одно и тоже. отсюда и буквы. но зато мне очень многое становится понятно :) вот доразберусь с этой PSG частью проигрывателя и тогда конвертер будет проще сделать. надо будет просто научить программу видеть эти зависимости поведения ноты и создавать по этому поведению инструмент.
 
Nemesis_cДата: Понедельник, 24.10.2016, 00:20 | Сообщение # 156


 
Сообщений: 1148
Статус: Offline
 

главное чтобы практический смысл в этом был... а то создавать конвертер ради конвертера или изучать движок ради изучения это не очень круто. реквестую тему graveyard для umk под гемс )))
 
SeregaZДата: Понедельник, 24.10.2016, 00:49 | Сообщение # 157


 
Сообщений: 50
Статус: Offline
 

ну вобще VGM2GEMS затевалось чтоб впилить треки RRR в Dune :) а там слайд в этих треках меня просто убивал. но вроде модуляция как раз решает эту проблему. вот доделаю PSG часть и буду думать насчет слайдов.
 
Nemesis_cДата: Понедельник, 24.10.2016, 00:51 | Сообщение # 158


 
Сообщений: 1148
Статус: Offline
 

тогда надо как минимум скорости танкам накрутить, чтоб под такую музыку гонять XD
 
SmokeДата: Понедельник, 24.10.2016, 06:36 | Сообщение # 159


 Get Serious!
Сообщений: 551
Статус: Offline
 

миди2гемс довайте

 
SeregaZДата: Понедельник, 24.10.2016, 07:20 | Сообщение # 160


 
Сообщений: 50
Статус: Offline
 

http://www.emu-land.net/forum/index.php?action=dlattach;topic=73715.0;attach=156111
но только старый, с рассинхроном дорожек и корявыми инструментами :) предполагается что используется вместе с комбайном. после комбайта для дюны была папки 000, 001, 002 - вот предполагается что конвертер конвертит в одну из таких папок. можно использовать тот тестировачный ром-проигрыватель для gems r57shell.

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


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

так-же по 127 мидишным инструментам бродит мысль вручную сидеть и собирать инструменты из VGM и распихивать где какой инструмент.
 
r57shellДата: Понедельник, 24.10.2016, 18:13 | Сообщение # 161


 
Сообщений: 632
Статус: Offline
 

Цитата Smoke ()
миди2гемс довайте

это умеет досовский GEMS.EXE.


Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Вторник, 25.10.2016, 02:00 | Сообщение # 162


 
Сообщений: 50
Статус: Offline
 

r57shell, так чо ты PSG инструмент тестер не смотрел? похоже на то что делает GEMS?

Добавлено (25.10.2016, 02:00)
---------------------------------------------

Цитата r57shell ()
это умеет досовский GEMS.EXE.

мой конвертер забился в уголок и плачет.

вроде топорное динамическое перераспределение PSG сделал :) теперь надо шумовой придумать как прикрутить.
 
r57shellДата: Вторник, 25.10.2016, 03:50 | Сообщение # 163


 
Сообщений: 632
Статус: Offline
 

Цитата SeregaZ ()
r57shell, так чо ты PSG инструмент тестер не смотрел? похоже на то что делает GEMS?

Похоже, но не факт что точно так же.


Мальчик, девочка... какая в жопу разница..
 
SmokeДата: Среда, 26.10.2016, 13:30 | Сообщение # 164


 Get Serious!
Сообщений: 551
Статус: Offline
 

Цитата r57shell ()
это умеет досовский GEMS.EXE

О, ништяк. Надо будет разобраться с ним


 
SeregaZДата: Пятница, 28.10.2016, 20:44 | Сообщение # 165


 
Сообщений: 50
Статус: Offline
 

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

Сообщение отредактировал SeregaZ - Суббота, 29.10.2016, 20:08
 
r57shellДата: Суббота, 29.10.2016, 20:44 | Сообщение # 166


 
Сообщений: 632
Статус: Offline
 

Это ты сам наудалял посты? LFO - грузится когда инструмент грузится, и каждый раз переписывает общий.
А key on это есть регистр у канала. Это чистое значение которое туда пишется.


Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Воскресенье, 30.10.2016, 22:00 | Сообщение # 167


 
Сообщений: 50
Статус: Offline
 

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

Добавлено (30.10.2016, 03:58)
---------------------------------------------
добавил тот 3 канальный геморой... и я чот смотрю - получается для GEMS желательно занимать 1,2, 4 и 5 каналы - то есть делать музыку 4 дорожковой. оставляя 3 на предмет работы этого ch3mode и 6 для сэмплов. громкость так еще и не доделал... как-то седня без настроения эту громкость, и все-же я думаю проблема не в ней, а в чем-то другом. и пока эти исправления делаю - все больше и больше убеждаюсь что надо сделать это динамическое перераспределение каналов тоже. иначе те старые проблемы с модуляций и всем прочим решил, но надо было самую первую решать динамическое перераспределение - потому что эту самую модуляцию придется переделывать под динамическое распределение. так-же эту модуляцию не пофиксил на предмет превышения лимита питча, а то в особых случая моя модуляция будет работать не верно :)

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

Добавлено (30.10.2016, 22:00)
---------------------------------------------
кароче этот проигрыватель не получается и все тут. откуда-то левый тудум берется... точнее он не левый - правильный, просто инструмент как-то не так выставлен. особенно четко слышно на 004 треке.
http://www.emu-land.net/forum/index.php?action=dlattach;topic=73715.0;attach=173786

Сообщение отредактировал SeregaZ - Суббота, 29.10.2016, 21:01
 
r57shellДата: Понедельник, 31.10.2016, 00:06 | Сообщение # 168


 
Сообщений: 632
Статус: Offline
 

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


Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Среда, 02.11.2016, 03:03 | Сообщение # 169


 
Сообщений: 50
Статус: Offline
 

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

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

Добавлено (02.11.2016, 02:21)
---------------------------------------------
там с модуляцией еще всякие пляски наблюдаются перед стартом ноты. и тут я начал подозревать что модуляция работает не со старта ноты, а сразу как только она была объявлена. и причем начинает работать с той последней нотой, которая была выставлена до неё. то есть при старте это видимо 00 00 и от неё потом понеслась чехарда... чехарда в тишине :) поскольку команды на старт звука то еще нет, но модуляция уже меняет частоту по своему ритму. тогда команда retrigger это означает перезапуск модуляции для каждой ноты. то есть без ретригера только для одной ноты, причем модуляция и ноты должны идти как можно ближе друг к другу, а с ретригером - для каждой ноты.

Добавлено (02.11.2016, 02:27)
---------------------------------------------
так-же оказывается что модуляция не отменяется когда инструмент поменялся. значит такую модуляцию с ретриггером можно отключать только модуляцией, где 00 00 00 в файле. сама она не отрубится :) а если без ретригера - значит только 1 раз сработает и все. так что в статью на сайте дофига чего довнести надо будет :)))))))))

Добавлено (02.11.2016, 03:03)
---------------------------------------------
запело :) не точно криво и косо, но я доволен как слон :)

 
r57shellДата: Среда, 02.11.2016, 03:05 | Сообщение # 170


 
Сообщений: 632
Статус: Offline
 

Посмотрел внимательно. Что могу сказать. Есть ровно два варианта:
1) retrigger on: модуляция запускается на каждом нажатии ноты, и только! То есть, в момент команды - только сохраняется номер.
2) retrigger off: модуляция стартует только с самой команды, и сразу!
Никаких специальных номеров модуляций, и никак её не выключить, она может выключится либо сама, либо через хак:
вырубить retrigger, и сразу включить модуляцию которая быстро кончается.

И ещё одно замечание: сразу как только кончилась модуляция - питч модуляции равен нулю.


Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Понедельник, 14.11.2016, 05:30 | Сообщение # 171


 
Сообщений: 50
Статус: Offline
 

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

Добавлено (14.11.2016, 01:20)
---------------------------------------------
переделывал процедуру определения значения ноты и питча из значений регистра. и сразу вылез затык. чтобы питч был положительный и правильный - у нас идет -1 к ноте и к ней уже считается положительный питч. затык случается когда нота чуть меньше ДО.

нота 23 = $0CBF ; си
нота 24 = $1284 ; до

поскольку октава изменилась - такой большой между ними разрыв. и затык случился, когда в регистрах прошло значение:
$1269 - чуть меньше чем ДО, и намного больше чем СИ.
моя система предложила родить это значение путем ноты 23 и питча 65355. эээ... это несколько не правильно :) хотя если значение w типа, то тогда это 65355 = -181. но почему нота тогда ушла на 23, вместо того чтоб быть 24? но и все равно это не правильно. я полагаю $1284 должно соответствовать какому-то значению от 23 ноты $0CBF что-то типа $0CD4. хотя я не уверен. как предусмотреть этот момент, когда чуть меньше чем ДО идет регистр?

Код
Global Dim table(12)

table(0) = $0284
table(1) = $02AA
table(2) = $02D3
table(3) = $02FE
table(4) = $032B
table(5) = $035B
table(6) = $038E
table(7) = $03C5
table(8) = $03FE
table(9) = $043B
table(10) = $047B
table(11) = $04BF
table(12) = $0508

; get registers values from note and pitch values
Procedure.i GetOPNNote(note.i, pitch.w)
    note_p = pitch / 256    
    pitch = pitch - note_p * 256
    
    If pitch < 0
      note_p = note_p - 1;
      pitch = pitch + 256;
    EndIf
    
    note = note + note_p
    If note < 0
      pitch = 0;
      note = 0 ;
    ElseIf note > 95
      note = 95
      pitch = 255      
    EndIf
    Block = note / 12
    note = note - Block * 12;
    a = table(note)
    b = table(note+1)
    FNum = a + ((b-a)*pitch)/256 + Block * 2048
    
    ProcedureReturn FNum
    
EndProcedure

; get note and pitch values
Procedure.i ReturnNoteAndPitch(A4A0.i)

  Octave = A4A0 / 2048
  Debug "Octave " + Str(Octave)
  
  A4A0 = A4A0 - (Octave * 2048) ; residue
  Debug "Residue " + Hex(A4A0)
  
  For i = 11 To 0 Step -1
    If A4A0 >= table(i)
      note = i
      Debug "Clear Note " + Str(note)
      Break
    EndIf
  Next  
  Debug "Normal Note " + Str(note + 12 * Octave)
  
  ;FNum = a + ((b-a)*pitch)/256
  A4A0 - table(note) ;= ((b-a)*pitch)/256  
  A4A0 * 256         ;= (b-a)*pitch  
  pitchval.f = A4A0 / (table(note+1) - table(note))
  A4A0 = Round(pitchval, #PB_Round_Up)
  
  tmp = (note + 12 * Octave) << 16
  tmp + A4A0
  
  ProcedureReturn tmp
  
EndProcedure

reg = GetOPNNote(23, 0)
Debug RSet(Hex(reg), 4, "0")
reg = GetOPNNote(24, 0)
Debug RSet(Hex(reg), 4, "0")
reg = GetOPNNote(24, -181)
Debug RSet(Hex(reg), 4, "0")

reg = $1269

NAP = ReturnNoteAndPitch(reg)

Debug NAP >> 16
Debug NAP & $FFFF

Добавлено (14.11.2016, 01:23)
---------------------------------------------
видимо нужно для table(0) = $0284 еще значение, которое предшествует, как сделано для расчета питча после СИ
table(11) = $04BF
table(12) = $0508

Добавлено (14.11.2016, 04:35)
---------------------------------------------
$0508 - ($1284 - $1269), потом добавить октаву и потом пересчитать ноту и питч? только совпадаются ли ступеньки интересно...

Добавлено (14.11.2016, 05:30)
---------------------------------------------
ValleyBell подсказал. правда я ничего не понимаю почему надо умножать на 2, а октаву опускать на 1...
$1269 - (2048 * ($1269 / 2048)) = 617 and 2 octave
$0269 * 2 + (2048 * (octave - 1)) = $0CD2
что в переводе на русский note 23, pitch 67

теперь надо подумать как этот случай прикрутить к процедуре...

 
r57shellДата: Понедельник, 14.11.2016, 18:14 | Сообщение # 172


 
Сообщений: 632
Статус: Offline
 

http://elektropage.ru/forum/7-68-3061-16-1476704477
сюда посмотри.


Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Вторник, 15.11.2016, 00:31 | Сообщение # 173


 
Сообщений: 50
Статус: Offline
 

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

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

Добавлено (14.11.2016, 23:21)
---------------------------------------------
а... вот еще вопрос :) ты не мог бы сделать сборщик для своего рома-проигрывателя специальной версии, где отключен Fade on, и мелодия стартовала бы самая первая сразу при старте рома в эмуляторе, не дожидаясь нажатия кнопки старт?

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

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

Добавлено (15.11.2016, 00:31)
---------------------------------------------

 
r57shellДата: Вторник, 15.11.2016, 23:14 | Сообщение # 174


 
Сообщений: 632
Статус: Offline
 

Цитата SeregaZ ()
ы не мог бы сделать сборщик для своего рома-проигрывателя специальной версии, где отключен Fade on, и мелодия стартовала бы самая первая сразу при старте рома в эмуляторе, не дожидаясь нажатия кнопки старт?

Fade on - не критично.
запустить трек можно скриптом, правда не знаю можно ли подсунуть скрипт через командную строку.

Цитата SeregaZ ()
еще бы хотелось комбайн и ASM68K.EXE в виде дллки

ASM68K.EXE - нет, у него нет сырцов в открытом доступе.
Либо можешь просто воспроизвести то что он делает, либо взять другой ассемблер.
Комбайн - надо под длл переписывать.

А так - круто, чо могу сказать, только не пойму синх ритма или нет.


Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Суббота, 10.12.2016, 08:18 | Сообщение # 175


 
Сообщений: 50
Статус: Offline
 

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

ну и сейчас как оно рожает треки - code файлы будут многокилометровые. получается для воспроизведения 1 в 1 - для каждой ноты свой питч, что получается раза в 2 увеличивает размер файлов. и система определения FM инструментов порой сходит сума :) моя родила 31 инструмент как-то для трека из какого-то из бэтменов, а твоя утилита для выковыривания инструментов из VGM 27 для того-же трека. видимо без ручной оптимизации с добавлением лупов не обойтись.

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

проблема возникла опять там, где я думал уже решилась - с рожением значения ноты и питча из значения регистра. если со значением $1269 - помогло понижение октавы и умножения на 2, то подобный финт ушами не проканал, когда я взял песню джокера для пробной конвертации. у этого самого сраного джокера полезли ноты типа:
$01C8 и $0721 и процедура моя в одном случае падала в бесконечную рекурсию, в другом предлагало аж на 8 нот сделать питч. что-то по моему многовато 8 нот...

суть проблемы что $01C8 ниже минимального значения $0284. подумал можно сделать обратную операцию, как в случае с $1269 - то есть поделить на 2 и прибавить 1 октаву, но полученное значение опять не вписалось в лимит октавы.

как выкрутится и в GEMS родить именно такое значение для регистров $01C8? (на тот комментарий с кучей непонятных формул чур не отфутболивать :) я не понимаю что там происходит. мне бы на пальцах...)

я тут думал может глобальный сдвиг сделать? типа $0284 - $01C8 и после это значение прибавлять ко всем нотам в песне. то есть вся песня чуть чуть поднимется по тону... но еще пока не тестировал.

 
r57shellДата: Воскресенье, 11.12.2016, 21:25 | Сообщение # 176


 
Сообщений: 632
Статус: Offline
 

На пальцах не объяснить.

Мальчик, девочка... какая в жопу разница..
 
SeregaZДата: Воскресенье, 02.07.2017, 03:42 | Сообщение # 177


 
Сообщений: 50
Статус: Offline
 

дошла очередь до редактора FM инструментов. он уже может загружать raw и vgi. хотел еще одну эпическую задумку по уперке любого эффекта выстрела из любой SMD игры взять... но оказалось что KMOD делая дампы файлов инструмента y12 - делает из них какие-то обрезки. я не нашел где в этом y12 сохраняется инфа по каналу левый правый, AMS, FMS, LFO, LFO Value, а самое главное Ch3mode - ведь этот Ch3mode использован во многих спецэффектах. не умеет ли твой эмулятор делать подобные вещи?

Добавлено (01.07.2017, 09:33)
---------------------------------------------
оказывается мой проигрыватель не умеет проигрывать сэмплы с флагами типа: FLAGS =$B8 - как узнать что означает первая цифра в этом флаге? вторая понятно частота. 8 = 6500 чтоль. а первая чего? битность? типа 4 = 8 бит, 8 = 4 бита, B = 1 бит какойнить? и чем проигрывать? сколько не смотрел везде минимально 8 бит установлено. 4 они импортировать не умеют.

Добавлено (02.07.2017, 03:42)
---------------------------------------------
может это ошибка при распаковке сплиттером? там один сэмпл больше 65к, хотя FIRST =$04AF у него стоит. один сэмпл 0байт.

 
seregaz2004Дата: Понедельник, 22.01.2018, 20:38 | Сообщение # 178


 
Сообщений: 3
Статус: Offline
 

так! у меня возврат!

ковырял тут игру: Crystal's Pony Tale www.loveroms.com/download/sega-genesis/crystals-pony-tale-u-/108988

Цитата
Crystal's Pony Tale (U) [!] 
4B6E8 dac 
54A7C seq 
59F4B mod 
5A056 pat
 
распаковать то комбайн может, а вот запаковать обратно - нет. ругается на:  if 0!=14,label_5
 
Код
SECTION CODE
channel_0:
 if 0!=14,label_5
 delay 0
 goto label_6
label_5:
 delay 0......

кто это интересно напортачил? создатели этой пони, ковыряясь в движке своими кривыми руками, или один товарищ, который в процедуре распаковки все сделал правильно, а в запаковке напортачил? :)

Добавлено (21.01.2018, 22:49)
---------------------------------------------
и нет ли ошибки в роме-тестере GEMS? есть мелодия в F1 World Championship Edition (E) [!] под номером 2. при распаковке, кстати, ругается что неизвестный тип инструмента: 99. в коде мелодии это видимо заглушка. потому как там пауза на весь трек и выставление этого инструмента -а нот нет нифига. ну не суть. и есть в мелодии звук типа "тыц тыц" по тарелке. этот звук, точнее инструмент использует специальный режим Ch3. вот если подсунуть в этот инструмент под номером 00, где тип был указан при распаковке как 99, любой другой инструмент, то мелодия собирается (когда нет инструмент 00 мелодия вовсе не собирается). но эта тыц тыц играет не в том канале. она должна по идее играть в 3, ведь там включен 3chmode как он там режим... но оно играет в другом канале. в результате не используются эти дополнительные 4 графы для частоты для 3 канала. кароче звук не правильный. а в своем проигрывателе CODE - ставлю этот инструмент номер $65 на 3 дорожку (у меня просто нет этого динамического перераспределения каналов), то звук играет правильный. вот и спрашиваю - может ошибка в роме-тестере мелодий? он видит, что инструмент использует 3ch mode, но почему-то не перекидывает с приоритетом эту дорожку с инструментом в третий канал чипа.

Добавлено (22.01.2018, 20:38)
---------------------------------------------
согласно документации по PSG в файле инструмента:
1 Noise Data [0,7]
однако у меня тут например значение $0C = 12. что это больше 7 однако. тестер ромов играет верно. а ведь должен ругаться на неправильный параметр при сборке. или там читаются 3 бита, игнорируя все что дальше?
то есть:
$0C = 12 = %00001100 - читать тут %00000xxx, то есть %00000100 = 4?

 
Форум » Elektropage.ru » Other » GEMS sound driver research (копипаста с соникретро)
  • Страница 6 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Поиск:


Select language:
English
French
German
Portuguese
Chinese
Nemesis_c, r57shell, Smoke, Lipetsk, GoodBye (aka vfiuchcikicshuusrch) & Segaman © 2024
Хостинг от uCoz