Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: CL | DM;

Вниз

Звуки в DXWaveList !!!   Найти похожие ветки 

 
Sword-Fish ©   (2003-04-21 09:32) [0]

Здравствуйте ...
У меня к ВАМ вопрос, такого плана !!!
Я создал упаковщик игровых ресурсов и пакую туда (без архивации) звуки...
Так вот я их пакую, так:

TGameResourceHeader = packed record
Copyright : String[30];
ResCount : Integer;
end;

TGameResourceTable = packed record
Offset : Integer;
end;

Function TMainForm.CompileResource(const SourceFileList : TListBox; const OutFileName: string; const CompileMode : integer) : boolean;
var
// Поток для записи окончательного файла
OutStream : TStream;
// Поток для хранения таблицы смещений
TableStream : TMemoryStream;
// Поток для хранения данных
ResourceStream : TMemoryStream;
// Счетчик и кол-во ресурсов
i,resCount : Integer;
// Смещение от начала файла текущий ресурс
Offset : Integer;
// Размер заголовка и размер всей таблицы смещений
HeaderSize : Integer;
AllTableSize : Integer;
// Экземпляры
GameResourceHeader : TGameResourceHeader;
GameResourceTable : TGameResourceTable;
// Ресурсы разных форматов
MyWave : TWave;
begin
try
OutStream:=TFileStream.Create(OutFileName, fmCreate);
TableStream:=TMemoryStream.Create;
ResourceStream:=TMemoryStream.Create;
HeaderSize:=SizeOf(TGameResourceHeader);
AllTableSize:=SizeOf(TGameResourceTable)*SourceFileList.Count;
Offset:=HeaderSize+AllTableSize;
ResCount:=0;

// Для различных режимов компиляции - различные методы !!!
if CompileMode=2 then begin
MyWave:=TWave.Create;

for I:=0 to SourceFileList.Count-1 do
begin
MyWave.LoadFromFile(SourceFileList.Items[i]);
MyWave.SaveToStream(ResourceStream);
GameResourceTable.Offset:=Offset;
TableStream.WriteBuffer(GameResourceTable, SizeOf(TGameResourceTable));
Offset:=HeaderSize+AllTableSize+ResourceStream.Position;
Inc(resCount);
end;

MyWave.Free;
end;

// Перемещаемся на начало данных
ResourceStream.Seek(0, soFromBeginning);
TableStream.Seek(0, soFromBeginning);
// Записываем авторские права и кол-во ресурсов
GameResourceHeader.Copyright:="Copyright © 2003 Sword-FISH";
GameResourceHeader.ResCount:=ResCount;
// Запись выходного файла
OutStream.WriteBuffer(GameResourceHeader, SizeOf(GameResourceHeader));
OutStream.CopyFrom(TableStream, TableStream.Size);
OutStream.CopyFrom(ResourceStream, ResourceStream.Size);
// Блок финализации
ResourceStream.Free;
TableStream.Free;
OutStream.Free;
Result:=true;
except
Result:=false;
// Блок финализации
ResourceStream.Free;
TableStream.Free;
OutStream.Free;
end;
end;

(( Кстати такой пример был на DelphiGFX !!! )) ...

После этого я не могу их загрузить в DXWaveList !!!
Пишет мне Stream Error ...

Гружу так :
DXWaveList.Items.Add;
DXWaveList.Items[0].Wave.LoadFormStream(LoadSnd(1));
, где LoadSND(n) - функция вызываемая из моей DLL !!!

(перед этим я открываю DLL (само собой :) )
Function LoadSnd(const resCount : integer) : TStream; stdcall;
begin
// Перемещение на начало таблицы смещений ресурса
FileStream.Seek((resCount-1)*SizeOf(GameResourceTable), soFromCurrent);
// Чтение таблицы ресурса
FileStream.ReadBuffer(GameResourceTable, SizeOf(GameResourceTable));
// Перемещение к началу данных затребованного ресурса
FileStream.Seek(GameResourceTable.Offset, soFromBeginning);
// Грузим !!!
MyWave.LoadFromStream(FileStream);
MyWave.SaveToStream(Result);
// Перемещение к началу данных
FileStream.Seek(SizeOf(GameResourceHeader), soFromBeginning);
end;

Как мне быть please !!!!


 
jel ©   (2003-04-21 10:44) [1]

Использовть временный stream, в который писать нужный ресурс. Методам типа XXX.LoadFromStream глубоко до фени манипуляции по изначальному позиционированию указателя в потоке. Он используют весь поток. Оттуда и ошибка.



Страницы: 1 вся ветка

Текущий архив: 2003.10.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.036 c
1-74137
Буланов Дмитрий
2003-10-11 04:15
2003.10.23
проблема


7-74502
ossa
2003-07-31 09:47
2003.10.23
Вопрос для знатоков, кто работал с RASAP?I


14-74426
Kost
2003-10-05 17:57
2003.10.23
ПЕРЕМЕННЫЕ


3-74022
valmont
2003-10-06 09:14
2003.10.23
FILTER


14-74404
Zelius
2003-10-06 11:35
2003.10.23
А наш ли это Юрий Федоров? :)