Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Länge einer Wav-Datei (https://www.delphipraxis.net/26513-laenge-einer-wav-datei.html)

Florian H 24. Jul 2004 13:53


Länge einer Wav-Datei
 
Hi,

bei Swissdelphicenter gibts ja 2 Funktionen zum feststellen der Länge einer Wav-Datei.
Ich habe die Datei jetzt aber schon so geöffnet:
Delphi-Quellcode:
procedure TForm1.PlayWav(fname : string);
var
  mciOpenParms: TMCI_Open_Parms;
  mciPlayParms: TMCI_Play_Parms;
begin
  if waveOutGetNumDevs < 1 then            { Any devices? }
    ShowMessage('No wave devices available!')
  else
  begin
    FillChar(mciOpenParms,
      SizeOf(TMCI_Open_Parms), 0);
    FillChar(mciPlayParms,
      SizeOf(TMCI_Play_Parms), 0);
    with mciOpenParms do                   { Set MCI to play WAV files }
    begin
      lpStrDeviceType := 'waveaudio';
      lpstrElementName := pchar(fname);
    end;
    if mciSendCommand(0, MCI_OPEN,
      MCI_OPEN_TYPE or MCI_OPEN_ELEMENT,
      Longint(@mciOpenParms)) = 0 then     { Open Device }
    begin
      wDeviceID := mciOpenParms.wDeviceID; { Grab Device ID for later }

      mciPlayParms.dwCallback := Handle;   { Set our Handle for Callback message }
      mmsystem.mc
      mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY,
        LongInt(@mciPlayParms));           { Kick off play of File; await message }
    end;
  end;
end;
Wie kann ich da gleich auch die Länge rausfinden der Wav-Datei?

Viele Grüße
Flo

dizzy 24. Jul 2004 15:22

Re: Länge einer Wav-Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn es sich um einfache unkomprimierte Wave-Files handelt (PCM), dann hab ich just gestern was dazu gebaut :). Habs etwas beschnitten, so dass nur die Header ausgelesen werden.

gruss,
dizzy

Florian H 24. Jul 2004 15:28

Re: Länge einer Wav-Datei
 
danke ich gucks mir mal an!

Der_Ventilator 25. Jul 2004 10:49

Re: Länge einer Wav-Datei
 
Du könntest das File mit dem MediaPlayer (Seite System) öffnen und mit .Length die Länge auslesen

Florian H 25. Jul 2004 10:54

Re: Länge einer Wav-Datei
 
danke, dizzy's Lsg. hat mir tatsächlich geholfen, weil ich sowieso seinen Code benutze zur Visualisierung...

dac424 8. Feb 2005 19:29

Re: Länge einer Wav-Datei
 
Frage wie Kann ich den nun die Wäve Länge für ein Sleep Komando benutzen benutzen

Delphi-Quellcode:
procedure TForm1.bakenzeitTimer(Sender: TObject);
var
ba:string;
wa:string;
wp  : TWaveProvider;

//wave:string;
 {$J+} const CanPlay: Boolean = True; {$J-}
      begin
      if (form3.Bake.Checked = true) then begin
      wp := TWaveProvider.Create('bake1.wav');
      // ein paar Infos über's Wave ausgeben
  //   Memo1.Lines.Add(+IntToStr(wp.DataHeader.length div wp.FormatData.AvgBytesPerSec));
      FreeAndNil(wp);
  end;

 check.Enabled:=false;
bakenzeit.Interval:=StrToInt(form3.bakenzeit.text)*1000 ;
onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'ON_BIT');
if pin = 'dtr' then DTR(true);
if pin2 = 'rts' then RTS(true);
sleep (2000);
canPlay :=True;
if CanPlay then
 begin
 //ba:='+wave+';
   sndPlaySound(PChar('bake1.wav'),SND_ASYNC);
   CanPlay := False;

Memo1.Lines.Add('Duration in Sec.: '+IntToStr(wp.DataHeader.length div wp.FormatData.AvgBytesPerSec));

 sleep (+InToStr+);  //// Übergabe der Zeit von Memo1.Lines Add sprich die Sekunden die das wave lang ist müssen an Sleep übergeben werden mit einem *1000 damit das programm wartet bis das wave zu ende gespielt hat befor DTR und RTS auf false gehen

// sleep (20000);
// bakenzeit.Enabled:=false;
//check.Enabled:=true;

if pin = 'dtr' then DTR(false);
if pin2 = 'rts' then RTS(false);
  onoff.Picture.Bitmap.LoadFromResourceName(HInstance,'OFF_BIT');
check.Enabled:=true;
  end;
  end;
end.
hat jemand eine Bessere Idee ohne das das Programm einfriert dann herr damit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.

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