|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 28, 2004 10:54:59 · Поправил: Rustem Как ещё можно вытаскивать музыку из игр\програм? Мои эксперименты показали следующее: 1. В одном случае помог файловый монитор (создавался файл *.mid, из которого потом игралась музыка). 2. Сканировал файл экзешника\данных в поиске сигнатуры midi (MThd) Еще один метод. По-моему самый красивый: 3. Как я понимаю, в основном юзается WINMM.DLL и её семейство midi**** функций. Так вот вопрос: как найти буфер с миди файлом в памяти, файле. Какая именно функция отвечает за него. Заранее спасибо! |
|
|
Дата: Июн 28, 2004 14:22:38 Сначала заполняется структура: typedef struct {
DWORD dwCallback;
MCIDEVICEID wDeviceID;
LPCSTR lpstrDeviceType;
LPCSTR lpstrElementName; <- OFFSET FileName
LPCSTR lpstrAlias;
} MCI_OPEN_PARMS;
Потом вызываем mciSendCommand для проигрывания, где-то так(выдрал из какого-то исходника): .data
SoundName db "TDSound",0 ;sound name in resource
MB1Titel db "Program Error",0 ;message box name
MB1Text db "Bad work ...",0 ;message box text
MB2Titel db "End of Program",0 ;message box name
MB2Text db "Do you here the sound ?",0 ;message box text
FileName db "temp.mid",0 ;temporary filename
.data?
hInstance dd ?
handleResource dd ?
sizeResource dd ?
pointerResource dd ?
handleFile dd ?
returnFile dd ?
align 4
; - MCI_OPEN_PARMS Structure ( API=mciSendCommand ) -
open_dwCallback dd ?
open_wDeviceID dd ?
open_lpstrDeviceType dd ?
open_lpstrElementName dd ?
open_lpstrAlias dd ?
align 4
; - MCI_GENERIC_PARMS Structure ( API=mciSendCommand ) -
generic_dwCallback dd ?
align 4
; - MCI_PLAY_PARMS Structure ( API=mciSendCommand ) -
play_dwCallback dd ?
play_dwFrom dd ?
play_dwTo dd ?
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke FindResource,hInstance,OFFSET SoundName,10
test eax, eax
jz ErrorPrg
mov handleResource,eax
invoke SizeofResource,hInstance,handleResource
test eax, eax
jz ErrorPrg
mov sizeResource,eax
invoke LoadResource,hInstance,handleResource
test eax, eax
jz ErrorPrg
invoke LockResource,eax
test eax, eax
jz ErrorPrg
mov pointerResource,eax
invoke CreateFile,OFFSET FileName,40000000h,0h,0h,2h,80h,0h
cmp eax,-1
je ErrorPrg
mov handleFile,eax
invoke WriteFile,handleFile,pointerResource,sizeResource,\
OFFSET returnFile,0h
test eax, eax
jz ErrorPrg
invoke CloseHandle,handleFile
test eax, eax
jz ErrorPrg
;--------------------------------------------------------------------- ---------
; API "mciSendCommandA" here opens the device
;--------------------------------------------------------------------- ---------
mov open_lpstrDeviceType,0h ;fill MCI_OPEN_PARMS structure
mov open_lpstrElementName,OFFSET FileName
invoke mciSendCommand,0h,0803h,0200h,OFFSET open_dwCallback
test eax, eax
jnz ErrorPrg
;--------------------------------------------------------------------- ---------
; API "mciSendCommandA", MCI_PLAY command begins transmitting output data
;--------------------------------------------------------------------- ---------
invoke mciSendCommand,open_wDeviceID,0806h,0h,OFFSET play_dwCallback
test eax, eax
jnz ErrorPrg
invoke MessageBox,NULL,OFFSET MB2Text,OFFSET MB2Titel,MB_OK
;--------------------------------------------------------------------- ---------
; API "mciSendCommandA" here closes the device
;--------------------------------------------------------------------- ---------
invoke mciSendCommand,open_wDeviceID,804h,0h,OFFSET generic_dwCallback
ExitPrg:
invoke ExitProcess,0
ErrorPrg:
invoke MessageBox,NULL,OFFSET MB1Text,OFFSET MB1Titel,MB_OK
jmp ExitPrg
end start |
|
|
Дата: Июн 28, 2004 17:57:59 Asterix По-моему, человек немножко не то хотел :-) Rustem 2. А может, разобрать/поискать в сети сам формат файла данных игрушки? - практичней ж будет. 3. Недавно вроде бы обсуждался вопрос о внедрении своего кода в чужую ДЛЛ. Может, вариант? Кстати, про сигнатуры: раньше использовался еще один формат, почти начисто содранный с MIDI, а именно MUS, у него сигнатура заголовка "MUS\x1A". Если игрушка старая и от ID Software, то там точно этот формат =)) |
|
|
Дата: Июн 28, 2004 18:10:12 · Поправил: Asterix Anonimka Возможно, я только потом глянул что проигрывать midi можно и через другие API, поэтому подход к поиску будет другой. |
|
|
Дата: Июн 28, 2004 18:53:08 Как я понимаю, в основном юзается WINMM.DLL и её семейство midi**** функций. Рустем, твоя проблема в том, что ты слишком много понимаешь :) А ты тупо бери BC, дави на кнопочки. Читай лог. Бери MSDN. Бери detours и лепи вывод в файл. Усе :) |
|
|
Дата: Июн 28, 2004 18:59:52 Конечно, знать формат файлов игрушки хорошо, но ,наверно, не для всех игрушек он описан (или для всех ? ;)))) ) Хотелось бы методы, чтобы не зная формата. Хотя о самом формате данных игры приблизительно можно догадаться, изучая логи файлового монитора... Нашел тут в SDK интересную структурку MIDIHDR, в некоторых midi функциях используется. |
|
|
Дата: Июн 28, 2004 19:04:26 2 Volodya BC неперехватывает функции WINMM. Хотя они точно используются (их перехватывает Olly ) Так, что пока обходимся без BC. P.S. Просвети, что такое detours |
|
|
Дата: Июн 28, 2004 19:05:50 P.S. Просвети, что такое detours посмотри на research.microsoft.com |
|
|
Дата: Июн 28, 2004 19:21:34 · Поправил: volodya BC неперехватывает функции WINMM. Хотя они точно используются (их перехватывает Olly ) Так, что пока обходимся без BC.] Ну... ОК, пиши свой движок. С detours это будут минуты. ssx Ты его не на research.microsoft.com отправляй, а на WASM FAQ, который ты и сам не читаешь :) |
|
|
Дата: Июн 28, 2004 19:49:44 Rustem Многие игрушки используют около-WAV-ный формат, как то: wav, mp3, xm, voc, ... |
|
|
Дата: Июн 28, 2004 20:04:57 2 Anonimka Спасибо за сигнатурку для ДУМА. Музыку вытащил, буду заливать её в мобилу. |
|
|
Дата: Июн 28, 2004 20:13:07 А вот я что-то не сумел достать музыку из кваки, мож там тоже формат с сигнатурой MUS\x1A ;-) или запаковано чем? на такую мысль наводят файлы с расширением .pk3 |
|
|
Дата: Июн 28, 2004 20:14:05 · Поправил: Asterix Зы: ещё хотел как-то достать ролик из "Enter the Matrix", но тоже так и не нашёл.. |
|
|
Дата: Июн 28, 2004 20:38:39 Asterix В общем, .pk3 - это обныкновенный zip-архив %-), а музыка там, если правильно помню, в wav-формате. Rustem Для Doom, Doom2, Hexen, Heretic и Strife есть хороший распаковщик DeuTex - в сети много где лежит. Кстати, этот распаковщик _не_ понимает музыки в midi-формате (экстрактит только как lump), а понимает лишь mus. |
|
|
Дата: Июн 28, 2004 21:36:29 Anonimka > В общем, .pk3 - это обныкновенный zip-архив %-) Точно! И я даже где-то читал об этом ранее и забыл ;-) Осталось разобраться с "Enter the Matrix". |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.042 |