Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
|
Re: Wav-Dateien schneiden
10. Feb 2004, 12: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...
|
|
Zitat
|