Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Wav-Dateien schneiden (https://www.delphipraxis.net/16044-wav-dateien-schneiden.html)

mumu 9. Feb 2004 15:07


Wav-Dateien schneiden
 
weiß jemand, wie ich am besten teile aus einer wave-datei extrahieren kann? z.b. ein lied ist 10 sec. lang und ich möchte den Inhalt des Liedes von der 2ten bis zur 6ten sekunde in neue Wav-Datei speichern...

danke schonmal
mumu

mumu 10. Feb 2004 11:27

Re: Wav-Dateien schneiden
 
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...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz