Thema: Delphi Wav-Dateien schneiden

Einzelnen Beitrag anzeigen

mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#2

Re: Wav-Dateien schneiden

  Alt 10. Feb 2004, 11:27
Ich habs jetzt doch selbst hinbekommen:

Delphi-Quellcode:
Type
   TWavHeader = Record
                  RiffStr : Array[$00..$03] Of Char; { ID Block = 'RIFF' }
                  FileSize : LongInt; { Size of the complete file - 8bytes }
                  WaveStr : Array[$00..$03] Of Char; { ID Block = 'WAVE' }
                  FmtStr : Array[$00..$03] Of Char; { ID Block = 'fmt ' }
                  HeadSize : LongInt; { Size of header to this point}
                  FormatTag : Word; { Format Tag}
                  Channels : Word; { Numer of channels}
                  SampleRate : LongInt; { Sample rate in kHz}
                  BytesPSec : LongInt; { Bytes per second = SampleRate }
                  BlockAlign : Word; { Block align}
                  BitsPSmp : Word; { Bits per sample}
                  DataStr : Array[$00..$03] Of Char; { ID Block = 'data' }
                  SmpLength : LongInt; { Numer of bytes in the sample }
                End;
var
  ReadDatei, WriteDatei: THandle;
  WriteHeader, Readheader: TWavHeader;
  count: integer;
  buffer: char;
begin
  ReadDatei := FileOpen('C:\Test.wav',fmOpenRead);
  WriteDatei := FileCreate('C:\test2.wav');
 
  FileSeek(ReadDatei, 0, 0);
  FileRead(ReadDatei, ReadHeader, sizeof(TWavHeader));

  WriteHeader := ReadHeader;

  FileSeek(WriteDatei, 0, 0);
  FileWrite(WriteDatei, WriteHeader, sizeof(TWavHeader));

  FileSeek(WriteDatei, Sizeof(TWavHeader), 0);
  Fileseek(ReadDatei, Sizeof(TWavHeader), 0);

  count := 0;
  repeat
    FileRead(ReadDatei, buffer, 1);
    FileWrite(WriteDatei, buffer, 1);
    count := count + 1;
  until count >= ReadHeader.BytesPSec;

  FileClose(ReadDatei);
  FileClose(WriteDatei);
end;
dieser code extrahiert nur die erste sekunde aus einer wav-datei... lässt sich aber ohne probleme beliebig anpassen...
  Mit Zitat antworten Zitat