Показать сообщение отдельно
  #2  
Старый 07.02.2010, 13:41
= FFFFh = = FFFFh = вне форума
Прохожий
 
Регистрация: 07.02.2010
Сообщения: 9
Репутация: 10
Лампочка кому не лень проверьте у ся на дельфах. я пишу под 7.0

Итак, приступлю.
Определим сначала с чем мы будем иметь дело:
Исходный файл: wav(потом что-нить другое добавлю)
Цель: Загрузить файл в прогу.

Код:
//Тип, описывающий формат:

type TWaveHeader = record//будет заголовок нашего файла
 ChunkRiff:       array [0..3] of char;//'RIFF'
 RiffLen:      longint;
 ChunkWave:       array [0..3] of char;//'WAVE'
 ChunkFmt:        array [0..3] of char; //'fmt '
 InfoLen:      longint;
 WaveType:     smallint;//(1=pcm) метод сжатия
 Ch:           smallint;
 Freq:         longint;
 BytesPerSec:  longint;
 align:        smallint;
 Bits:         smallint;
end;

type TWaveHeaderData = record
 ChunkData:       array[0..3] of char;//'data'
 DataLen:      longint;
end;

тут такое дело. Можно было бы поместить всё в одном типе, но заголовки wav файлов различны. Поэтому желательно разделить эти части на две. Далее будет понятно, почему.


var main: TMain;
    WavFile,WavMemory:TStream;
    Hdr:TWaveHeader;
    hdrd:TWaveHeaderData;


Procedure OpenWavFile(FileName:String);
var n: integer;
begin
WavFile:=TFileStream.Create(filename,fmOpenRead,fmShareDenyNone);
WavMemory:=TMemoryStream.Create;
WavMemory.CopyFrom(WavFile,WavFile.Size);
WavFile.Free;
WavMemory.Position:=0;

WavMemory.Read(Hdr,sizeof(hdr));   // читаем заголовок

WavMemory.Position:=0;
wavmemory.Read(hdrd,sizeof(hdrd));

n:=wavmemory.Position;

while hdrd.idData<>'data' do begin
 n:=n+1;
 wavmemory.Position:=n-4;
 wavmemory.Read(hdrd,sizeof(hdrd));

 if wavmemory.Position>1024 then begin //вот тут заминочка, пока не решил...
  ShowMessage('Неподдерживаемый формат файла!');
  WavMemory.Free;
  exit;
 end

end;

end;

procedure Tmain.openfileClick(Sender: TObject);
begin
if opendialog1.Execute then
   openWavFile(opendialog1.FileName);
end;
Код:
Admin: Пользуемся тегами!

Фсё! Данные файла успешно заносятся в поток!

Люди, не спите, подключайтесь!!!
Ответить с цитированием