![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
требуется слить ряд файлов в один...
EvgenTss © (2003-06-01 20:54:00)
...ряд wav файлов которые нужно в заданной последовательности поставить друг за другом, получить размер всей этой конструкции и прилепить заголовок. как это сделать максимально быстро.
Думкин (2003-07-17 05:20:00) [1]
По-моему, вопрос требует уточнений.
1. Надо рассказать про заголовки?
2. Быстро получить что? Фиговину в памяти для проигрывания или как?
Pltnick (2003-07-17 00:08:00) [2]извини, там в коде опечатка:
......
repeat
BlockRead( w,Buf,SizeOf(Buf1),Ret);
( w0,Buf,Ret)извини, там в коде опечатка:
......
repeat
BlockRead( w,Buf,SizeOf(Buf1),Ret);
BlockWrite( w0,Buf,Ret);
until (Ret=0) or (Ret<>SizeOf(Buf));
.....
Pltnick (2003-07-17 00:05:00) [3]если ты сливаешь все в один файл, то уже гарантировано, что звуковые парам. в файлах одинаковые (sps, разрядность).
filepaths - массив путей к файлам.
const
bufSize = 1024 //варьируй это значения для достижения
//оптимальной скорости копирования файлов
var
w, w0: file;
Buf: array[1..bufSize];
...
AssignFile(ResultFilePath, w0);
Rewrite(w0, 1);
//закатай в файл заголовок
for f := 1 to FilesCount do
begin
AssignFile(filepaths[f], w);
totalsize_heads := totalsizeheads + FileSize(w);
end;
totalsize := totalsize_heads - (FileCount * 44);
//воспользуйся моим модуем.
//компоненты->сборник units->wavefileoptions.pas
//там найдешь все, чтобы записать заголовок.
//размер данных ты знаешь = totalsize
for f := 1 to FilesCount do
begin
AssignFile(filepaths[f], w);
Reset(w); Seek(w, 45);
repeat
BlockRead(w1,Buf,SizeOf(Buf1),Ret);
( w,Buf,Ret)
если ты сливаешь все в один файл, то уже гарантировано, что звуковые парам. в файлах одинаковые (sps, разрядность).
filepaths - массив путей к файлам.
const
bufSize = 1024 //варьируй это значения для достижения
//оптимальной скорости копирования файлов
var
w, w0: file;
Buf: array[1..bufSize];
...
AssignFile(ResultFilePath, w0);
Rewrite(w0, 1);
//закатай в файл заголовок
for f := 1 to FilesCount do
begin
AssignFile(filepaths[f], w);
totalsize_heads := totalsizeheads + FileSize(w);
end;
totalsize := totalsize_heads - (FileCount * 44);
//воспользуйся моим модуем.
//компоненты->сборник units->wavefileoptions.pas
//там найдешь все, чтобы записать заголовок.
//размер данных ты знаешь = totalsize
for f := 1 to FilesCount do
begin
AssignFile(filepaths[f], w);
Reset(w); Seek(w, 45);
repeat
BlockRead(w1,Buf,SizeOf(Buf1),Ret);
BlockWrite(w,Buf,Ret);
until (Ret=0) or (Ret<>SizeOf(Buf));
close(w);
end;
close(w0);
...
SergeyKatruk (2003-07-16 13:44:00) [4]
я через - TMemoryStream делал, однако не скажу, что это самый быстрый способ - а единственный, который я придумал..........