Home » Tipps & Tricks » Multimedia » Sound-Wiedergabe » Spiellänge einer Wav-Datei

Spiellänge einer Wav-Datei

Diese Funktion ermittelt die Länge eines WAV-Files. Die Funktion kann nur für unkomprimierte Wav-Dateien verwendet werden. Außerdem müssen die Dateien in der gleichen Sample-Rate abgespielt werden, damit der Wert richtig ist.

function GetWaveLength(WaveFile: string): Double;
var
  groupID: array[0..3] of char;
  riffType: array[0..3] of char;
  BytesPerSec: Integer;
  Stream: TFileStream;
  dataSize: Integer;

  // chunk seeking function,
  // -1 means: chunk not found
  function GotoChunk(ID: string): Integer;
  var
    chunkID: array[0..3] of char;
    chunkSize: Integer;
  begin
    Result := -1;
    with Stream do begin
      // index of first chunk
      Position := 12;
      repeat
        // read next chunk
        Read(chunkID, 4);
        Read(chunkSize, 4);
        if chunkID  ID then
          // skip chunk
          Position := Position + chunkSize;
      until (chunkID = ID) or (Position >= Size);

      if chunkID = ID then
        // chunk found,
        // return chunk size
        Result := chunkSize
    end
  end;

begin
  Result := -1;
  Stream := TFileStream.Create(WaveFile, fmOpenRead or 
fmShareDenyNone);
  with Stream do
    try
      Read(groupID, 4);
      Position := Position + 4; // skip four bytes (file size)
      Read(riffType, 4);
      if (groupID = 'RIFF') and (riffType = 'WAVE') then begin
        // search for format chunk
        if GotoChunk('fmt ')  -1 then begin
          // found it
          Position := Position + 8;
          Read(BytesPerSec,4);
          // search for data chunk
          dataSize := GotoChunk('data');
          if dataSize  -1 then
            // found it
            Result := dataSize / BytesPerSec
        end
      end
    finally
      Free
    end
end;

Aufgerufen kann diese Funktion Beispielsweise so:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption:=FloatToStr(GetWaveLength(Edit1.Text));
end;

In der Titelleiste des Formulars kann man dann die Länge der Wav-Datei ablesen. Die Spieldauer wird in Sekunden angegeben.

EKON 28