demon1232010 Цитата: Скрипт
Вроде должно отрабатывать норм.
Спасибо большое за помощь.
компиляция проходит успешно, но не отрабатывает ни распаковку OGG ни WV. после распаковки файлов идет завершение установки . Успел заметить, после распаковки файлов, пишет сохранение списка, Decompressing audio.. , а потом завершение (файлы oggdec и wvunpack удаляются). Кажется список файлов не строится.
Цитата: Мне вот интересно что за формат WV? Никогда ранее не встречал.
формат сжатия WAV файлов без потерь, как FLAC, сжимает так же или лучше, но самое интересное, что в отличии от других таких же компрессоров, может сжимать и дополнительную битовую информацию (time stamp), которая часто используется в играх для синхронизации с мимикой персонажей.
Все, получилось.
[more]
[Code]
var
Files: Array of String;
S: String;
n: Integer;
function StringToArray(Text, Cut: String): array of String;
var i, k: Integer;
begin
SetArrayLength(Result, 0);
if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:=Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1);
i:=GetArrayLength(Result)-1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1);
Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
end;
procedure FindFiles(FromDir: String; Mask: String);
var FindResult: Boolean;
FSR, DSR: TFindRec;
begin
FindResult:=FindFirst(AddBackslash(FromDir)+Mask, FSR);
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR);
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask);
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR);
FindClose(DSR);
end;
//-------Начало----распаковка OGG------------------------------------------------
procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.ogg'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\hl2\sound\oggdec.exe'));
end;
//-------Конец----распаковка OGG------------------------------------------------
//-------Начало----распаковка WV ------------------------------------------------
procedure RecodeWV;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.wv'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\wvunpack.exe'), '-t -q -y '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\hl2\sound\wvunpack.exe'))
end;
//-------Конец----распаковка WV ------------------------------------------------
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeOgg;
RecodeWV;
end;
end;
[/more]
просто надо было константы
Files,
S и
n вынести в самое начало кода, сделать их общими для всех процедур. Теперь можно еще создать процедуру
Recode... для распаковки чего-то.
Спасибо
demon1232010 за оказанную помощь