получить длину звука WAV в минутах / секундах - PullRequest
1 голос
/ 05 апреля 2011

Используя DelphiXE, я пытаюсь показать длину wav-файла на этикетке. Это файл WAV с фиксированной скоростью передачи данных 64 Кбит / с, который загружается в tMediaPlayer.

Предыдущий SO пост по этой задаче: ЗДЕСЬ . Но код не отображается, и ссылка на Devhood больше не работает, поэтому я не смог попробовать этот метод.

Я также попробовал код из ЗДЕСЬ , но он дает неверные результаты следующим образом.

type

  HMSRec = record
    Hours: byte;
    Minutes: byte;
    Seconds: byte;
    NotUsed: byte;

  end;

procedure TForm1.Button1Click(Sender: TObject);

var
  TheLength: LongInt;
begin

  { Set time format - note that some devices don’t support tfHMS }

  MediaPlayer1.TimeFormat := tfHMS;
  { Store length of currently loaded media }
  TheLength := MediaPlayer1.Length;
  with HMSRec(TheLength) do { Typecast TheLength as a HMSRec record }
  begin
    Label1.Caption := IntToStr(Hours); { Display Hours in Label1 }
    Label2.Caption := IntToStr(Minutes); { Display Minutes in Label2 }
    Label3.Caption := IntToStr(Seconds); { Display Seconds in Label3 }
  end;
end;

Этот код дает значение 24: 23: 4, когда оно должно быть 0:04:28.

Есть ли очевидная проблема с этим кодом или есть какой-то более элегантный способ сделать это?

Как всегда, спасибо за вашу помощь.

1 Ответ

3 голосов
/ 05 апреля 2011

Почему бы просто не заняться математикой в ​​начальной школе?

var
  sec,
  min,
  hr: integer;
begin
  MediaPlayer1.TimeFormat := tfMilliseconds;
  sec := MediaPlayer1.Length div 1000;
  hr := sec div SecsPerHour;
  min := (sec - (hr * SecsPerHour)) div SecsPerMin;
  sec := sec - hr * SecsPerHour - min * SecsPerMin;
  Caption := Format('%d hours, %d minutes, and %d seconds', [hr, min, sec]);

Но почему не работает HMS? Ну, согласно официальной документации :

MCI_FORMAT_HMS

Изменяет формат времени до часов, минут и секунд. Признано VCR и видеодиском типы устройств.

MCI_FORMAT_MILLISECONDS

Изменяет формат времени в миллисекундах. Распознается всеми типами устройств.

...