Автор Тема: Извлечение мультимедиа (звук, видео, музыка) данных из игр CD/DVD приставок  (Прочитано 455820 раз)

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

Оффлайн FireFox Фан

  • Пользователь
  • Сообщений: 1499
  • Пол: Мужской
  • Огнелис
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Как и чем мне извлечь музыку из игр серии "Марио и Соник на Олимпийских играх"?

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 780
  • Пол: Мужской
    • Просмотр профиля
ты сделай чтоб не наиграть - а конвертануть.

На этот случай есть Dyna Gear, где звуковым чипом служит сэмплер Ensoniq ES5506. Внизу приведена часть базы используемых в игре музыкальных сэмплов. Байты начального и конечного адресов кажого сэмпла следуют в обратном порядке, плюс ещё надо держать в голове, что перед подгрузкой в оперативную память у старшего (т. е. последнего в каждой группе по 4) байта адреса устанавливается 7-й бит (я так понимаю, сэмплы именно инструментов в роме для звукового чипа идут, начиная с $80000 - т. е. $40000000>>11). Обратите внимание, что стартовый адрес loop'а и загружаемое в аккумулятор ES5506 значение (первые 2 четырёхбайтья каждого сэмпла) всегда совпадают. И уже за ними последними следует конечный адрес. Остаток базы сэмплов инструментов будет добавлен позже, как и код особо полюбившейся мне в этой игре мелодии со второго уровня. Пока что лишь заранее поясню, что 16-битное байтсвэпнутов число -3 ($fdff) в кодах пузыкальных партий предваряет такой же байтсвэпнутый номер сэмпла из базы, а положительное (т. е. первый байт в котором меньше $80) - как правило, играет роль номера страницы (которую ни за что не следует путать с переключаемыми банками памяти - в случае с данным чипом значение у термина "страница" ну уж совсем своё) ES5506 на переключение.

BGM2:
F01B76: C4 1B F0 00
F01B7A: 40 20 F0 00
F01B7E: 5A 22 F0 00
F01B82: AE 22 F0 00
F01B86: 02 23 F0 00
F01B8A: D6 23 F0 00
F01B8E: DC 24 F0 00
F01B92: F2 24 F0 00
F01B96: 10 25 F0 00
F01B9A: 42 25 F0 00
F01B9E: 8E 25 F0 00
F01BC4: F6 FF 96 00
F01BC8: FD FF 4B 00
F01BCC: FC FF 0A 00
F01BD0: F5 FF 00 00
F01BD4: F5 FF 02 00
F01BD8: FD FF 4B 00
F01BDC: FC FF 14 00
F01BE0: 24 00 18 00
F01BE4: FC FF 0E 00
F01BE8: 24 00 18 00
F01BEC: 24 00 18 00
F01BF0: 24 00 18 00
F01BF4: 24 00 18 00
F01BF8: 24 00 18 00
F01BFC: 24 00 18 00
F01C00: 24 00 18 00
F01C04: FC FF 14 00
F01C08: 24 00 18 00
F01C0C: FC FF 0E 00
F01C10: 24 00 18 00
F01C14: 24 00 18 00
F01C18: 24 00 18 00
F01C1C: 24 00 18 00
F01C20: 24 00 18 00
F01C24: 24 00 18 00
F01C28: 24 00 18 00
F01C2C: FC FF 14 00
F01C30: 24 00 18 00
F01C34: FC FF 0E 00
F01C38: 24 00 18 00
F01C3C: 24 00 18 00
F01C40: 24 00 18 00
F01C44: 24 00 18 00
F01C48: 24 00 18 00
F01C4C: 24 00 18 00
F01C50: 24 00 18 00
F01C54: FC FF 14 00
F01C58: 24 00 18 00
F01C5C: FC FF 0E 00
F01C60: 24 00 18 00
F01C64: 24 00 18 00
F01C68: 24 00 18 00
F01C6C: 24 00 18 00
F01C70: 24 00 18 00
F01C74: 24 00 18 00
F01C78: 24 00 18 00
F01C7C: FD FF 4B 00
F01C80: FC FF 14 00
F01C84: 24 00 18 00
F01C88: FC FF 0E 00
F01C8C: 24 00 18 00
F01C90: 24 00 18 00
F01C94: 24 00 18 00
F01C98: 24 00 18 00
F01C9C: 24 00 18 00
F01CA0: 24 00 18 00
F01CA4: 24 00 18 00
F01CA8: FC FF 14 00
F01CAC: 24 00 18 00
F01CB0: FC FF 0E 00
F01CB4: 24 00 18 00
F01CB8: 24 00 18 00
F01CBC: 24 00 18 00
F01CC0: 24 00 18 00
F01CC4: 24 00 18 00
F01CC8: 24 00 18 00
F01CCC: 24 00 18 00
F01CD0: FC FF 14 00
F01CD4: 24 00 18 00
F01CD8: FC FF 0E 00
F01CDC: 24 00 18 00
F01CE0: 24 00 18 00
F01CE4: 24 00 18 00
F01CE8: 24 00 18 00
F01CEC: 24 00 18 00
F01CF0: 24 00 18 00
F01CF4: 24 00 18 00
F01CF8: FC FF 14 00
F01CFC: 24 00 18 00
F01D00: FC FF 0E 00
F01D04: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D08: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D0C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D10: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D14: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D18: FC FF 14 00
F01D1C: FD FF 4C 00                                        updpte  R0, 2300[F06A19[PC]]
F01D20: 23 00 30 00                                                          halt
F01D24: FD FF 4B 00
F01D28: FC FF 14 00                                                          halt
F01D2C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D30: FC FF 0E 00                                                          halt
F01D34: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D38: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D3C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D40: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D44: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D48: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D4C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D50: FC FF                                                       sttask  !ERRAM5
F01D52: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01D57: 00                                                          halt
F01D58: FC FF                                                       sttask  !ERRAM5
F01D5A: 0E                                                          $00
F01D5B: 00                                                          halt
F01D5C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D60: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D64: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D68: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D6C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D70: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D74: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D78: FC FF                                                       sttask  !ERRAM5
F01D7A: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01D7F: 00                                                          halt
F01D80: FC FF                                                       sttask  !ERRAM5
F01D82: 0E                                                          $00
F01D83: 00                                                          halt
F01D84: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D88: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D8C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D90: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D94: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D98: 24 00 18 00                                                 in.w    R0, 0[R24]
F01D9C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DA0: FC FF                                                       sttask  !ERRAM5
F01DA2: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01DA7: 00                                                          halt
F01DA8: FC FF                                                       sttask  !ERRAM5
F01DAA: 0E                                                          $00
F01DAB: 00                                                          halt
F01DAC: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DB0: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DB4: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DB8: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DBC: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DC0: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DC4: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DC8: FD FF 4B 00
F01DCC: FC FF 14 00                                                          halt
F01DD0: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DD4: FC FF 0E 00                                                          halt
F01DD8: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DDC: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DE0: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DE4: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DE8: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DEC: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DF0: 24 00 18 00                                                 in.w    R0, 0[R24]
F01DF4: FC FF                                                       sttask  !ERRAM5
F01DF6: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01DFB: 00                                                          halt
F01DFC: FC FF                                                       sttask  !ERRAM5
F01DFE: 0E                                                          $00
F01DFF: 00                                                          halt
F01E00: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E04: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E08: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E0C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E10: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E14: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E18: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E1C: FC FF                                                       sttask  !ERRAM5
F01E1E: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01E23: 00                                                          halt
F01E24: FC FF                                                       sttask  !ERRAM5
F01E26: 0E                                                          $00
F01E27: 00                                                          halt
F01E28: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E2C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E30: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E34: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E38: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E3C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E40: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E44: FC FF                                                       sttask  !ERRAM5
F01E46: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01E4B: 00                                                          halt
F01E4C: FC FF                                                       sttask  !ERRAM5
F01E4E: 0E                                                          $00
F01E4F: 00                                                          halt
F01E50: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E54: FC FF 14 00
F01E58: FD FF 4C 00                                        updpte  R0, 2300[F06B55[PC]]
F01E5C: 23 00 30 00                                                          halt
F01E60: FC FF 0E 00                                                          halt
F01E64: FD FF 4B 00
F01E68: 24 00 18 00                                                          halt
F01E6C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E70: FC FF 14 00
F01E74: FD FF 4C 00                                        updpte  R0, 2300[F06B71[PC]]
F01E78: 23 00 30 00                                                          halt
F01E7C: F4 FF                                                       test.w  !ERRAM5
F01E7E: F5 FF                                                       test.w  !ERRAM1
F01E80: 02 00 FD FF 4B 00 FC                                        stpr    R0, -400[F06A7F[PC]]
F01E87: FF 14 00 24                                                 clrtlb  24[0[R20]]
F01E8B: 00                                                          halt
F01E8C: 18                                                          $00
F01E8D: 00                                                          halt
F01E8E: FC FF                                                       sttask  !ERRAM5
F01E90: 0E                                                          $00
F01E91: 00                                                          halt
F01E92: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E96: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E9A: 24 00 18 00                                                 in.w    R0, 0[R24]
F01E9E: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EA2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EA6: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EAA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EAE: FC FF                                                       sttask  !ERRAM5
F01EB0: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01EB5: 00                                                          halt
F01EB6: FC FF                                                       sttask  !ERRAM5
F01EB8: 0E                                                          $00
F01EB9: 00                                                          halt
F01EBA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EBE: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EC2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EC6: 24 00 18 00                                                 in.w    R0, 0[R24]
F01ECA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01ECE: 24 00 18 00                                                 in.w    R0, 0[R24]
F01ED2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01ED6: FC FF                                                       sttask  !ERRAM5
F01ED8: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01EDD: 00                                                          halt
F01EDE: FC FF                                                       sttask  !ERRAM5
F01EE0: 0E                                                          $00
F01EE1: 00                                                          halt
F01EE2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EE6: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EEA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EEE: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EF2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EF6: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EFA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01EFE: FC FF                                                       sttask  !ERRAM5
F01F00: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01F05: 00                                                          halt
F01F06: FC FF                                                       sttask  !ERRAM5
F01F08: 0E                                                          $00
F01F09: 00                                                          halt
F01F0A: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F0E: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F12: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F16: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F1A: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F1E: FC FF                                                       sttask  !ERRAM5
F01F20: 14 00 FD FF 4C 00 23                                        updpte  R0, 2300[F06C1F[PC]]
F01F27: 00                                                          halt
F01F28: 30                                                          $00
F01F29: 00                                                          halt
F01F2A: F4 FF                                                       test.w  !ERRAM5
F01F2C: F5 FF                                                       test.w  !ERRAM1
F01F2E: 02 00 FD FF 4B 00 FC                                        stpr    R0, -400[F06B2D[PC]]
F01F35: FF 14 00 24                                                 clrtlb  24[0[R20]]
F01F39: 00                                                          halt
F01F3A: 18                                                          $00
F01F3B: 00                                                          halt
F01F3C: FC FF                                                       sttask  !ERRAM5
F01F3E: 0E                                                          $00
F01F3F: 00                                                          halt
F01F40: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F44: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F48: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F4C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F50: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F54: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F58: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F5C: FC FF                                                       sttask  !ERRAM5
F01F5E: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01F63: 00                                                          halt
F01F64: FC FF                                                       sttask  !ERRAM5
F01F66: 0E                                                          $00
F01F67: 00                                                          halt
F01F68: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F6C: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F70: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F74: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F78: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F7C: FC FF                                                       sttask  !ERRAM5
F01F7E: 14 00 FD FF 4C 00 23                                        updpte  R0, 2300[F06C7D[PC]]
F01F85: 00                                                          halt
F01F86: 30                                                          $00
F01F87: 00                                                          halt
F01F88: F4 FF                                                       test.w  !ERRAM5
F01F8A: FD FF                                                       sttask  !ERRAM1
F01F8C: 4B 00 FC FF 14                                              chlvl   R0, 14[F01F8B[PC]]
F01F91: 00                                                          halt
F01F92: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F96: FC FF                                                       sttask  !ERRAM5
F01F98: 0E                                                          $00
F01F99: 00                                                          halt
F01F9A: 24 00 18 00                                                 in.w    R0, 0[R24]
F01F9E: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FA2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FA6: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FAA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FAE: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FB2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FB6: FC FF                                                       sttask  !ERRAM5
F01FB8: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01FBD: 00                                                          halt
F01FBE: FC FF                                                       sttask  !ERRAM5
F01FC0: 0E                                                          $00
F01FC1: 00                                                          halt
F01FC2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FC6: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FCA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FCE: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FD2: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FD6: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FDA: 24 00 18 00                                                 in.w    R0, 0[R24]
F01FDE: FC FF                                                       sttask  !ERRAM5
F01FE0: 14 00 24 00 18                                              updpte  R0, 1800[R4]
F01FE5: 00                                                          halt
F01FE6: FC FF 0E 00
F01FEA: 24 00 18 00
F01FEE: 24 00 18 00
F01FF2: 24 00 18 00
F01FF6: 24 00 18 00
F01FFA: 24 00 18 00
F01FFE: 24 00 18 00
F02002: 24 00 18 00
F02006: FC FF 14 00
F02008: 24 00 18 00
F0200E: FC FF 0E 00
F02012: 24 00 18 00
F02016: FC FF 14 00
F02018: FD FF 4C 00
F0201F: 23 00 30 00
F02022: FC FF 0E 00
F02026: FD FF 4B 00
F02028: 24 00 18 00
F0202E: 24 00 18 00
F02032: FC FF 14 00
F02034: FD FF 4C 00
F0203B: 23 00 30 00
F0203E: F4 FF
InstrumentalSamples:
F00C03: 00 00 00 00
F00C07: 00 00 00 00
F00C0B: 00 00 00 00 ; sample #0
F00C0F: 00 00 00 00
F00C13: 00 00 00 00
F00C17: 00 80 B4 00 ; sample #1
F00C1B: 00 90 B4 00
F00C1F: 00 90 B4 00
F00C23: 00 00 4B 01 ; sample #2
F00C27: 00 10 4B 01
F00C2B: 00 10 4B 01
F00C2F: 00 B0 93 04 ; sample #3
F00C33: 00 C0 93 04
F00C37: 00 C0 93 04
F00C3B: 00 40 91 07 ; sample #4
F00C3F: 00 50 91 07
F00C43: 00 50 91 07
F00C47: 00 A0 52 0C ; sample #5
F00C4B: 00 B0 52 0C
F00C4F: 00 B0 52 0C
F00C53: 00 60 04 10 ; sample #6
F00C57: 00 70 04 10
F00C5B: 00 70 04 10
F00C5F: 00 C0 B1 14 ; sample #7
F00C63: 00 D0 B1 14
F00C67: 00 D0 B1 14
F00C6B: 00 C0 0A 19 ; sample #8
F00C6F: 00 D0 0A 19
F00C73: 00 D0 0A 19
F00C77: 00 60 0F 1A ; sample #9
F00C7B: 00 70 0F 1A
F00C7F: 00 70 0F 1A
F00C83: 00 30 13 1A ; sample #$a
F00C87: 00 40 13 1A
F00C8B: 00 40 13 1A
F00C8F: 00 A0 61 1A ; sample #$b
F00C93: 00 B0 61 1A
F00C97: 00 B0 61 1A
F00C9B: 00 B0 8F 1E ; sample #$c

Вот как раз ориентируясь на эти адреса, и узнаёшь, какие участки выцарапывать из ромов для ES5506, и, если знаешь как, то конвертировать в понятные современным операционкам форматы.

P. S.:
« Последнее редактирование: 17 Ноябрь 2024, 07:31:09 от Томахомэ »

Оффлайн FireFox Фан

  • Пользователь
  • Сообщений: 1499
  • Пол: Мужской
  • Огнелис
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Доброго времени суток!

ВДРУГ КОМУ-ТО ПРИГОДИТСЯ?

Скачал я Mario & Sonic at Bejing Olympic (Japan) + Mario & Sonic at Vancouver Olympic (Japan) (Rev 1) + Mario & Sonic at London Olympic (Japan) и извлёк следующую структуру аудио:

1. Mario & Sonic at Bejing Olympic (Japan) имеет в папке stream формат brstm. Об этом формате находил информацию в интернете, что он возможен в играх.

2. Mario & Sonic at Vancouver Olympic (Japan) (Rev 1) имеет аудио в папке Sound. В ней есть папки BGM + STAFFROLL + VOICE. В папках BGM и VOICE находится формат aax + в папке STAFFROLL находится форматы aax и sfd.

3. Mario & Sonic at London Olympic (Japan) не сразу нашёл, что аудио может быть в папке hugeData. В этой папке находятся папки adx с соответствующим форматом + папка audio с форматом csb + в самой папке hugeData находятся форматы afs и alg.

Конвертировать поможет VLC Media Player.
« Последнее редактирование: 14 Ноябрь 2024, 21:42:43 от FireFox Фан »

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 780
  • Пол: Мужской
    • Просмотр профиля
Из "чего попроще" есть Joe & Mac Returns, где весь звук - цифровой, воспроизводимый через два простых как палка, и за то, надо полагать, и любимых в своё время производителями игровых автоматов, Oki M6295 (которые в железе данной игры к тому же разделены для собственно музыки и для звуковых эффектов), и тащит управление им на себе единственный CPU. Структура музыки в игре также проста до безобразия - большинство треков, за исключением Boss,  Ending и ExtraStage, состоит из одного (удивительно, кстати, как при такой длине сэмпла Data East удалось ещё и соблюсти качество звучания), максимум - двух сэмплов, на последнем из которых мелодия и зацикливается. Младший байт каждого машинного слова ARM в нижнем из процитированных кусков кода - номер собственно сэмпла, второй - номер банка внутри рома okimusic, к которому этот сэмпл принадлежит, а самый старший нибл - громкость 1-го канала музыкального чипа. Третий байт может служить счётчиком сэмплов внутри одной мелодии, но этого я уже не проверял.
000491C: 0000495C ; Jungle1
0004920: 00004960 ; Glacier
0004924: 00004968 ; Ocean
0004928: 00004970 ; Volcano
000492C: 00004978 ; Jungle2
0004930: 00004980 ; Graveyard
0004934: 00004984
0004938: 00004988 ; Boss
000493C: 000049B8 ; Fanfare
0004940: 000049BC
0004944: 000049C0 ; Ending
0004948: 000049F8
000494C: 00004A00 ; ExtraStage
0004950: 00004A18 ; WorldMap
Jungle1:
000495C: 21000200

Glacier:
0004960: 21010500
0004964: 21010501

Ocean:
0004968: 21010301
000496C: 21010300

Volcano:
0004970: 21010600
0004974: 21010601

Jungle2:
0004978: 11010400
000497C: 11010401

Graveyard:
0004980: 11000000

Boss:
0004988: 01010100
000498C: 01020100
0004990: 01030101
0004994: 01040101
0004998: 01050102
000499C: 01060102
00049A0: 01070103
00049A4: 01080103
00049A8: 01090102
00049AC: 010A0102
00049B0: 010B0103
00049B4: 01020103

Fanfare:
00049B8: 20000104

Ending:
00049C0: 11010700
00049C4: 11020700
00049C8: 11030701
00049CC: 11040701
00049D0: 11050702
00049D4: 11060702
00049D8: 11070703
00049DC: 11080703
00049E0: 11090702
00049E4: 110A0702
00049E8: 110B0703
00049EC: 110C0703
00049F0: 110D0704
00049F4: 10000704

ExtraStage:
0004A00: 11010705
0004A04: 11020706
0004A08: 11030705
0004A0C: 11040706
0004A10: 11050705
0004A14: 11000706

WorldMap:
0004A18: 21000302

С инструментарием же для конвертации Oki ADPCM дело уже сложнее, хоть и проще, чем с другими чипами. tROMbone, например, во первых, давно устарел, а во вторых, конвертирует ром для Oki целиком, ему невозможно указать, какой именно сэмпл тебе нужен - как и рабочую частоту чипа в оригинальной игре, из-за чего скорость проигрывания в полученном VAW получается жутко искажена. Из более современных есть Williams OKI editor, но с ним не ясно, способен ли он работать с играми за пределами Midway'евских.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 780
  • Пол: Мужской
    • Просмотр профиля
Впрочем, для риппинга звука для Oki M6295 сгодится и старая добрая Audacity - сначала вырезаешь нужный тебе сэмпл из рома с помощью HEX-редактора, затем импортируешь полученный огрызок рома как RAW-данные, затем в открывшемся окне выбираешь кодирование VOX ADPCM и устанавливаешь частоту дискретизации, высчитанную из рабочей частоты Oki в той конкретной игре, из которой собираешься извлечь звук. Вот что мне в порядке эксперимента удалось таким образом получить из нескольких корейских пираток.