Mega Code Archive

 
Categories / Delphi / Multimedia
 

Determine the length of a wave file

type EMyMCIException = class(Exception); var FDeviceID: Word; MyError, dwFlags: Longint; procedure TForm1.GetWaveLength; var WaveLen: DWORD; begin OpenMedia('C:\Hickory.wav'); SetMediaTimeFormat; WaveLen := GetMediaStatus(MCI_STATUS_LENGTH); CloseMedia; Form1.label1.Caption := IntToStr(WaveLen) + 'mS'; end; procedure TForm1.OpenMedia(FileName: string); var MyOpenParms: TMCI_Open_Parms; begin with MyOpenParms do begin dwCallback := Handle; // TForm1.Handle lpstrDeviceType := PChar('WaveAudio'); lpstrElementName := PChar(FileName); end; {with MyOpenParms} dwFlags := MCI_WAIT or MCI_OPEN_ELEMENT or MCI_OPEN_TYPE; MyError := mciSendCommand(0, MCI_OPEN, dwFlags, Longint(@MyOpenParms)); // one could use mciSendCommand(DevId, etc here to specify a particular device if MyError = 0 then FDeviceID := MyOpenParms.wDeviceID else raise EMyMCIException.Create('Open Failed'); end; procedure TForm1.SetMediaTimeFormat; var MySetParms: TMCI_Set_Parms; begin if FDeviceID <> 0 then begin dwFlags := MCI_WAIT or MCI_SET_TIME_FORMAT; MySetParms.dwCallback := Handle; // TForm1.Handle MySetParms.dwTimeFormat := MCI_FORMAT_MILLISECONDS; MyError := mciSendCommand(FDeviceID, MCI_SET, dwFlags, Longint(@MySetParms)); if MyError <> 0 then raise EMyMCIException.Create('Status Failed'); end; end; function TForm1.GetMediaStatus(StatusItem: DWORD): DWORD; var MyStatusParms: TMCI_Status_Parms; begin if FDeviceID <> 0 then begin dwFlags := MCI_WAIT or MCI_STATUS_ITEM; MyStatusParms.dwCallback := Handle; // TForm1.Handle MyStatusParms.dwItem := StatusItem; MyError := mciSendCommand(FDeviceID, MCI_STATUS, dwFlags, Longint(@MyStatusParms)); if MyError = 0 then Result := MyStatusParms.dwReturn else begin raise EMyMCIException.Create('Status Failed'); end; end; end; procedure TForm1.CloseMedia; var MyGenParms: TMCI_Generic_Parms; begin if FDeviceID <> 0 then begin dwFlags := 0; MyGenParms.dwCallback := Handle; // TForm1.Handle MyError := mciSendCommand(FDeviceID, MCI_CLOSE, dwFlags, Longint(@MyGenParms)); if MyError = 0 then FDeviceID := 0 else begin raise EMyMCIException.Create('Close Failed'); end; end; end;