Главная страница
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.023 c
3-74088
Алексей Мэрфи
2003-10-03 07:59
2003.10.23
DBGrid как программно удалять столбцы из таблицы


14-74374
Another
2003-10-02 20:54
2003.10.23
Найти книгу


3-74024
MsGuns
2003-10-02 12:06
2003.10.23
Insert в редактируемом TIBQuery


4-74532
guest777
2003-08-16 22:05
2003.10.23
перехват сообщений от клавиатуры с помощью getmessage


14-74480
wicked
2003-10-02 19:37
2003.10.23
CodeGuard.....