Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > mp3 Опредиление длительности трэка


Автор: Pentium02 9.3.2008, 20:37
Допустим есть размер файла, его битрейт(постоянный), и если известно что теги только ID3v1 (т.е. 128 байт). Как из этого можно расчитать длительность в секундах? Без использования дополнительных компонент.

Автор: Alexeis 9.3.2008, 22:43
битрейт поделить на 8 получить число байт в секунду, затем размер файла поделить на число байт в секунду.

Автор: Qu1nt 9.3.2008, 23:15
Нацарапал:
Код

uses
  MMSystem;

var
  FDeviceID : Word;
  FFlags    : Longint;

function MediaOpen(const FileName: string; Handle: hWnd): Boolean;
var
  OpenParm : TMCI_Open_Parms;
begin
  Result := False;
  FillChar(OpenParm, SizeOf(TMCI_Open_Parms), 0);
  OpenParm.dwCallback := 0;
  OpenParm.lpstrDeviceType := '';
  OpenParm.lpstrElementName := PChar(FileName);
  FFlags := mci_Wait;
  FFlags := FFlags or MCI_OPEN_ELEMENT;
  OpenParm.dwCallback := Handle;
  if mciSendCommand(0, mci_Open, FFlags, Longint(@OpenParm)) = 0 then
  begin
    Result := True;
    FDeviceID := OpenParm.wDeviceID;
  end;
end;

function MediaGetLength: Longint;
var
  StatusParm : TMCI_Status_Parms;
begin
  FFlags := mci_Wait or mci_Status_Item;
  StatusParm.dwItem := mci_Status_Length;
  mciSendCommand(FDeviceID, mci_Status, FFlags, Longint(@StatusParm));
  Result := StatusParm.dwReturn;
end;

procedure MediaClose;
var
  GenParm : TMCI_Generic_Parms;
begin
  mciSendCommand(FDeviceID, mci_Close, mci_Wait, Longint(@GenParm));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if MediaOpen('c:\test.mp3', Self.Handle) then
  begin
    Self.Caption := IntToStr(MediaGetLength) + ' ms';
    MediaClose;
  end;
end;

Автор: Pentium02 10.3.2008, 01:31
2 Alexeis Спасибоо только роде как ещё нужно поделить на 1000
2 Qu1nt Я же просил без компонент) проще формулой) Но всёрвно спасибо

Автор: MetalFan 10.3.2008, 18:02
Pentium02, а где ты там компоненты увидел?

Автор: XakerD 1.1.2010, 17:54
Pentium02, а может выложишь формулу то...?) 

Автор: AntonN 1.1.2010, 20:43
если как то узнать частоту дескредитации то можно определить и все остальное

Автор: Alexeis 1.1.2010, 20:59
На самом деле mp3 поточный формат. Каждый блок имеет свои характеристики, на этом построен принцип VBR. Если формат с фиксированным битрейтом, то разобрав первый блок с данными можно получить всю необходимую информацию

Добавлено через 7 минут и 17 секунд
user posted image

Добавлено через 10 минут и 31 секунду
http://www.autohotkey.com/forum/topic29420.html

Автор: AntonN 1.1.2010, 21:43
"Audio Tools Library"

Автор: Alexeis 1.1.2010, 21:51
Цитата(AntonN @  1.1.2010,  20:43 Найти цитируемый пост)
"Audio Tools Library" 


Цитата(Pentium02 @  9.3.2008,  19:37 Найти цитируемый пост)
Без использования дополнительных компонент.

 smile 

 Так не интересно smile . Ну хочется человеку изобрести велосипед, ну пусть изобретает smile .

Автор: AntonN 1.1.2010, 22:55
там не компоненты, там классы. А самое главное - "формулы" smile

Автор: mr_smit 1.11.2022, 07:36
Когда то разбирался. Определение длительности mp3 для постоянного битрейта. В чистом виде без всяких библиотек. Не доделано, но суть понятна. Может пригодится кому.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)