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.