| Разработка и ромхакинг > Ромхакинг |
| Извлечение мультимедиа (звук, видео, музыка) данных из игр CD/DVD приставок |
| << < (99/101) > >> |
| FireFox Фан:
Как и чем мне извлечь музыку из игр серии "Марио и Соник на Олимпийских играх"? |
| Томахомэ:
--- Цитата: SeregaZ от 09 Октябрь 2024, 17:11:37 ---ты сделай чтоб не наиграть - а конвертануть. --- Конец цитаты --- На этот случай есть 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.: Изначально здесь была MotoCross Go!, однако, поиграв в неё, я решил, что лучше будет "обворовать" её для создания гладиаторских мотогонок по "Войне на Венере" не на музыку, хоть она в MotoCross Go! и классная, а на некоторые интересные механики - например, испытание на пиковую скорость на специально под это дело отведённых участках трассы (С некоторыми, правда, поправками для придачи интересности - например, утыкиваниием этого участка, с одной стороны, бустерами, а с другой - препятствиями. А то ведь природный скоростной потенциал у мотоциклов, во-первых, разнится от модели к модели, а во-вторых, всё-таки конечен. Плюс, в MotoCross Go! из-за недопродуманности данной механики потерь скорости во время таких испытаний почти что и нет, если не отпускать газ - даже темп ускорения не сбавляется, если поменьше поворачивать.). |
| FireFox Фан:
Доброго времени суток! ВДРУГ КОМУ-ТО ПРИГОДИТСЯ? Скачал я 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. |
| Томахомэ:
Из "чего попроще" есть 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'евских. |
| Томахомэ:
Впрочем, для риппинга звука для Oki M6295 сгодится и старая добрая Audacity - сначала вырезаешь нужный тебе сэмпл из рома с помощью HEX-редактора, затем импортируешь полученный огрызок рома как RAW-данные, затем в открывшемся окне выбираешь кодирование VOX ADPCM и устанавливаешь частоту дискретизации, высчитанную из рабочей частоты Oki в той конкретной игре, из которой собираешься извлечь звук. Вот что мне в порядке эксперимента удалось таким образом получить из нескольких корейских пираток. |
| e2e41:
Stupid Invaders видеоролики в формате Xilam DERF video хотелось бы извлечь из них аудио |
| Sharpnull:
--- Цитата: e2e41 от 29 Январь 2025, 17:28:52 ---Xilam DERF video хотелось бы извлечь из них аудио --- Конец цитаты --- ffmpeg поддерживает только DERF аудио, если правильно понял. В видео оно такое же. На основе этого https://wiki.multimedia.cx/index.php/Xilam_DERF, нашёл CS (байты 43 53) в начале, размер с заголовком указан 8C 9E 00 00, поэтому я сделал новый файл, в начале 44 45 52 46 (DERF), потом 02 00 00 00 для стерео, размер 7C 9E 00 00 (это размер блока CS без 0x10 байт) и дальше 0x9E7C байт данных, которые скопировал после CS заголовка (начало CS + 0x10). Для ffmpeg можно не указывать размер (нули), он всё равно до конца файла декодирует аудио. Потом, например: --- Код: ---ffmpeg -i e32v02c05.vds e32v02c05.wav --- Конец кода --- Можно легко написать Python скрипт для автоматизации или найти готовую программу. Приложил отредактированный файл и WAV. |
| e2e41:
беда в том что этих блоков не один не два а 1-1,5к в отдельном файле, они могут чередоваться с блоками видео и меняется их размер скрипт написать для меня проблематично, по сути нужно найти все блоки и извлечь без заголовков в общий raw, мне даже тяжело найти что то похожее для переделки под свои нужды не говоря о том чтобы написать скрипт с нуля. |
| omeie:
--- Цитата: e2e41 от 29 Январь 2025, 20:30:05 ---беда в том что этих блоков не один не два а 1-1,5к в отдельном файле, они могут чередоваться с блоками видео и меняется их размер скрипт написать для меня проблематично, по сути нужно найти все блоки и извлечь без заголовков в общий raw, мне даже тяжело найти что то похожее для переделки под свои нужды не говоря о том чтобы написать скрипт с нуля. --- Конец цитаты --- скрипт извлечения звука из видео vds vds2adp.bms --- Код: ---# Xilam DERF extract audio from video # script for QuickBMS http://quickbms.aluigi.org idstring "DERF" get FileSize asize get DataSize long get Chunks short get Width short get height short getDString Unk 22 log MEMORY_FILE 0 0 putDString "DERF" 4 MEMORY_FILE put 2 long MEMORY_FILE // Channels put 0 long MEMORY_FILE // Size log MEMORY_FILE2 0 0 putDString "DERF" 4 MEMORY_FILE2 put 1 long MEMORY_FILE2 // Channels put 0 long MEMORY_FILE2 // Size for savepos ChunkOffset if ChunkOffset >= FileSize break endif getDString ChunkID 2 get Unk1 short get ChunkSize long goto ChunkOffset getDString Chunk ChunkSize math ChunkOffset + 16 math ChunkSize - 16 if ChunkID = "CS" set Stereo 1 append log MEMORY_FILE ChunkOffset ChunkSize append elif ChunkID = "CM" set Mono 1 append log MEMORY_FILE2 ChunkOffset ChunkSize append endif next if Stereo = 1 get MFSize asize MEMORY_FILE xmath AudioDataSize "MFSize - 12" PutVarChr MEMORY_FILE 8 AudioDataSize long get Name basename string Name + "_s.adp" log Name 0 MFSize MEMORY_FILE endif if Mono = 1 get MFSize asize MEMORY_FILE2 xmath AudioDataSize "MFSize - 12" PutVarChr MEMORY_FILE2 8 AudioDataSize long get Name basename string Name + "_m.adp" log Name 0 MFSize MEMORY_FILE2 endif --- Конец кода --- конвертировать adp звук в wav может vgmstream |
| e2e41:
благодарю за помощь теперь возник вопрос чем и как конвертить *.wav в *.adp(Xilam DERF 8-bit DPCM) |
| FireFox Фан:
Доброго времени суток! Подобной темы нет... Поэтому пишу сюда Кто может извлечь музыку из хака The Misfortunes of Little Denise? |
| Томахомэ:
Извлёк 2, на мой взгляд, самых лучших трека (остальные - просто, как говорится, ни уму ни сердцу) из Gaia: The Last Choice of Earth - пойдут на музыкальное сопровождение для парочки псевдотрёхмерных трасс (переделанных из финальных уровней Solite Spirits) в гладиаторских гонках по мотивам "Войны на Венере". Затестить на слух можно, опять же, с помощью Audacity - кодек выбирать VOX ADPCM, частоту дискретизации - 6061 Гц. --- Цитата: FireFox Фан от 11 Март 2025, 18:54:29 ---Доброго времени суток! Подобной темы нет... Поэтому пишу сюда Кто может извлечь музыку из хака The Misfortunes of Little Denise? --- Конец цитаты --- Предложение платное? |
| Томахомэ:
Набросал я тут тестовый конвертер для Namco C140. Вот - тестовый ром под Namco System 2 с образцом звука (Запускать в MAME строго через командную строку для обхода проверки чексумм!). А вот - весь прошедший конверсию звук из игры Arbalester в одном файле. Как будем убирать это навязчивое шипение (конкретно в фокусе - функция x1_010)? |
| Leomakc777:
Добрый день-помогите пожалуйста раскодировать или в какой формат сконвертировать видео файл с образа игры с расширением STR-ситуация вот какая. Извлекаю str видео файл с образа игры с помощью jpsxdec_v2.0 и получаю вот такую картинку-(см. вложение). Уже 3 дня мучаюсь с ним-чем только не пробовал ремонтировать файл-на выходе всегда тоже самое,что и на картинке. В самой программе psxdec_v2.0- в место видео-черный экран-только звук есть- когда я файл str конвертировал в mp4-получается на выходе черный экран и играет музыка. Честно скажу-уже не знаю как еще просмотреть видео. P.S Конвертировал с помощью SUPER v2022.Build.80+3D+Recorder (December 12.2022) by eRightsoft. Образ PSX игры Клуб Солярис - Мисс Лето и не только этот образ. Файл называется Pomoika.str. Надеюсь на вашу помощь. |
| SegaMark:
У меня бывало такое. Насколько я понял на это есть несколько причин: видео зашифровано, неправильно определяется начало и конец файла, либо это не совсем STR файл(например другой кодек). То есть надо для начала убедиться что это STR-файл. Вообще зная игры EXE soft не удивлюсь что это лишний файл и нигде в игре он не используется. |
| Leomakc777:
Вот,что определяет SUPER ( см. Вложение) А вот что определяет digital video repair-когда я меняю расширение на avi и так же после того, как вылечивает файл. Ну и Наконец-скрин с mpc. Этот скрин-если по отдельности файлы выдергиваешь-но музыка играет. Переконвертировал в MP4-черный экран и музыка играет. |
| SegaMark:
А как у тебя получилось что файл весит столько же как сама игра, а то и больше? или это единственный файл во всем образе? |
| Leomakc777:
Вот так выглядит структура образа в jpsxdec_v2.0. Что показывает если по одиночке выдираешь файлы я писал в предыдущем посте. На всякий случай прикрепляю еще один скрин. |
| SegaMark:
Да действительно, я сам попробовал, так и есть. Как будто образ зашифрован и на самом деле там больше данных содержится. Хотя странно, данные игры не выделяются высоким искусством программирования. Думаю в первую очередь надо все таки убедиться содержатся ли str-файлы в POMOIKA.STR в сыром виде, то есть поискать str-заголовки. Я уже точно не помню какой заголовок у str поэтому сейчас не подскажу |
| Leomakc777:
А как искать заголовок-я просто первый раз с таким столкнулся? через какую прогу? В принципе в digital video repair при восстановление файла-тоже самое пишет-не хватает заголовков-как аудио, так и видео. Самое интересное в Рандеву во второй части-таких проблем нет-все извлекается в jpsxdec_v2.0 и показывается,а вот в первой-такая же фигня происходит-я проверял. Странно это все. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |