AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Länge einer Wav-Datei
Thema durchsuchen
Ansicht
Themen-Optionen

Länge einer Wav-Datei

Offene Frage von "dac424"
Ein Thema von Florian H · begonnen am 24. Jul 2004 · letzter Beitrag vom 8. Feb 2005
Antwort Antwort
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#1

Länge einer Wav-Datei

  Alt 24. Jul 2004, 13:53
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
Florian Heft
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Länge einer Wav-Datei

  Alt 24. Jul 2004, 15:22
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
Angehängte Dateien
Dateityp: zip wavheaderreader.zip (156,2 KB, 39x aufgerufen)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#3

Re: Länge einer Wav-Datei

  Alt 24. Jul 2004, 15:28
danke ich gucks mir mal an!
Florian Heft
  Mit Zitat antworten Zitat
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Länge einer Wav-Datei

  Alt 25. Jul 2004, 10:49
Du könntest das File mit dem MediaPlayer (Seite System) öffnen und mit .Length die Länge auslesen
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#5

Re: Länge einer Wav-Datei

  Alt 25. Jul 2004, 10:54
danke, dizzy's Lsg. hat mir tatsächlich geholfen, weil ich sowieso seinen Code benutze zur Visualisierung...
Florian Heft
  Mit Zitat antworten Zitat
dac424

Registriert seit: 11. Dez 2004
21 Beiträge
 
#6

Re: Länge einer Wav-Datei

  Alt 8. Feb 2005, 19:29
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 = 'dtrthen DTR(true);
if pin2 = 'rtsthen 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 = 'dtrthen DTR(false);
if pin2 = 'rtsthen 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.
mann fängt klein an
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 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