Помощь - Поиск - Пользователи - Календарь
Полная версия: Get Klb/s - Help!
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Артемий
У меня небольшая проблема!Мне нужно чтобы на TLabel отображалось скоко клилобит в секунду данный файл!(TMediaPlayer)!
dry.gif
volvo
У тебя какой формат файла? Если mp3, то я где-то уже выкладывал, как считать содержимое его тегов, поищи по форуму. Если другой - говори, какой, придется искать, где именно хранится эта информация...
Гость
Мне нужно чтобы универсально к любому формату!(Ну кроме там таких как 3GP,AMR и других мобильных форматов)
Артемий
Извини "гость" это я!
volvo
Уууу... Тогда я - пас. Это тебе не Compound Files, у которых это хранится в альтернативном потоке данных, и не MP3, где все хранится в ELIF тегах. "Универсально" - понятие растяжимое... Очень растяжимое. И малореальное...
Артемий
Мне нужно MP3 и WAV!
volvo
Цитата(Артемий2 @ 11.08.2006 11:49)
Мне нужно MP3...

C MP3 помогу. Вот такой код работает у меня (20 правильных значений BitRate на 20 файлах), но, возможно, это работает НЕ всегда. Погоняй код:

// В s передается имя файла MP3
procedure TForm1.ReadMp3Info(const s: string);
var
  f: File;
  buffer: array[0 .. 31] of byte;
  Lay, mpeg, btr: byte;

const
  bitRateTable: array[0 .. 15, 0 .. 4] of integer = (
    (  0,        0,          0,         0,          0      ),
    (  32000,    32000,      32000,     32000,      8000   ),
    (  64000,    48000,      40000,     48000,      16000  ),
    (  96000,    56000,      48000,     56000,      24000  ),
    ( 128000,    64000,      56000,     64000,      32000  ),
    ( 160000,    80000,      64000,     80000,      40000  ),
    ( 192000,    96000,      80000,     96000,      48000  ),
    ( 224000,   112000,      96000,     112000,     56000  ),
    ( 256000,   128000,     112000,     128000,     64000  ),
    ( 288000,   160000,     128000,     144000,     80000  ),
    ( 320000,   192000,     160000,     160000,     96000  ),
    ( 352000,   224000,     192000,     176000,    112000  ),
    ( 384000,   256000,     224000,     192000,    128000  ),
    ( 416000,   320000,     256000,     224000,    144000  ),
    ( 448000,   384000,     320000,     256000,    160000  ),
    (     -1,       -1,         -1,        -1,        -1   )
  );

begin
  assignfile(f, s);
  reset(f, 1);
  blockread(f, buffer[0], 32);

    Lay := (buffer[1] shr 1) and 3;
    mpeg := (buffer[1] shr 3) and 3;

    case mpeg of
      // mpg-1.0
      3: case lay of
           3: mpeg := 0;
           2: mpeg := 1;
           1: mpeg := 2;
         end;

      // mpg-2.0
      0, 2:
          case lay of
            3:    mpeg := 3;
            2, 1: mpeg := 4;
          end;
    end;

    btr := (buffer[2] shr 4) and $0F;

    // Записываем BitRate в Edit
    edit1.Text := 'Bitrate: ' + inttostr(bitRateTable[btr, mpeg]);

  closefile(f);
end;

Источник информации: MPEG Audio Layer I/II/III frame header

P.S.
С Wav посмотрю позже, что можно придумать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.