Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

Очень срочный вопрос! Mp3->Rate   Найти похожие ветки 

 
Михайлов Антон ©   (2003-10-31 09:25) [0]

Мастера, как по имени файла (Например "C:\MyMusic\Atb-The Summer.mp3") узнать его бит рейт (например 128 kbps) ?????
Это очень срочно! Заранее спасибо!


 
Михайлов Антон ©   (2003-10-31 10:16) [1]

Воспрос был настолько срочный, что аж я сам на него ответил :)
кому нада, пользуйтесь:
===================

{Получение бит-рейта}
Function GetBitRate(filename:string):integer;
const
bitraten:array[1..2,1..3,1..14] of word =
(((32,64,96,128,160,192,224,256,288,320,352,384,416,448),
(32,48,56,64,80,96,112,128,160,192,224,256,320,384),
(32,40,48,56,64,80,96,112,128,160,192,224,256,320)),
((32,48,56,64,80,96,112,128,144,160,176,192,224,256),
(8,16,24,32,40,48,56,64,80,96,112,128,144,160),
(8,16,24,32,40,48,56,64,80,96,112,128,144,160)));
var Layer,MPEGVer: Byte;
f:file;
s1,s2,s3,x:byte;
begin
if fileexists(filename) then
begin
assignfile(f,filename);
reset(f,1);
blockread(f,s1,1);
blockread(f,s2,1);
blockread(f,s3,1);
closefile(f);
if s2 and 16 = 16 then mpegver:=1 else mpegver:=2;
{Layer}
if (s2 and 32 = 32) and (s2 and 64 <> 64) then layer:=1;
if (s2 and 32 = 32) and (s2 and 64 = 64) then layer:=3;
if (s2 and 32 <> 32) and (s2 and 64 = 64) then layer:=2;
x:=0;
if s3 and 128 = 128 then x:=x+8;
if s3 and 64 = 64 then x:=x+4;
if s3 and 32 = 32 then x:=x+2;
if s3 and 16 = 16 then x:=x+1;
Result:=bitraten[mpegver,layer,x];
end else
Result:=0;
end;

{Получение частоты файла}
Function GetFreq(filename:string):integer;
const
freq:array[1..2,0..2] of word =((44100,48000,32000),(22050,24000,16000));
var Layer,MPEGVer: Byte;
f:file;
s1,s2,s3,x:byte;
begin
If fileexists(filename) then
Begin
assignfile(f,filename);
reset(f,1);
blockread(f,s1,1);
blockread(f,s2,1);
blockread(f,s3,1);
closefile(f);
if s2 and 16 = 16 then mpegver:=1 else mpegver:=2;
if (s2 and 32 = 32) and (s2 and 64 <> 64) then layer:=1;
if (s2 and 32 = 32) and (s2 and 64 = 64) then layer:=3;
if (s2 and 32 <> 32) and (s2 and 64 = 64) then layer:=2;
x:=0;
if s3 and 8 = 8 then x:=x+1;
if s3 and 4 = 4 then x:=x+2;
Result:=freq[mpegver,x];
end else
Result:=0;
end;


 
Думкин ©   (2003-10-31 10:37) [2]

Хорошо, только вопрос был:

> как по имени файла (Например "C:\MyMusic\Atb-The Summer.mp3")
> узнать его бит рейт


А ты не по имени узнаешь, а в файле ковыряешь, - так не честно. :-)


 
Makhanev A.S. ©   (2003-10-31 11:07) [3]


> Михайлов Антон © (31.10.03 10:16) [1]

Лучше используй TMPEGaudio class J.Faul"я.
А то, к примеру, как ты прочтешь битрейт,если в мп3 файле есть id3v2 тэг*?

P.S.: id3v2 тэг прописывается в начале файла и надо вычислять его длину, чтобы сместиться на нужный блок для чтения MPEG info.


 
Михайлов Антон ©   (2003-10-31 20:42) [4]

Удалено модератором


 
Михайлов Антон ©   (2003-11-01 00:32) [5]

Ничё не придумал :( ЛЮДИ, ПОМОГОТЕ ПОЖАЛСТА!!!!


 
wicked ©   (2003-11-01 01:35) [6]

может здесь -
http://www.dv.co.yu/mp3list/mpeghdr.htm ?...


 
Михайлов Антон ©   (2003-11-01 20:30) [7]

>>wicked
Очень познавательно, но мне это не помогла :(

Ну всётаки, может есть компонент, который умеет получать БитРейт мр3 файла?????
Дайте линк или совет или дайте функцию ;)


 
Makhanev A.S. ©   (2003-11-02 17:08) [8]


> Михайлов Антон © (01.11.03 20:30) [7]

Ты первый раз в интернете???
Я ж тебе написал про TMPEGaudio class.
Лезешь на torry.net, и берешь его отсюда:
http://www.torry.net/audio.htm


 
nevalex ©   (2003-11-04 09:16) [9]

есть более простой способ
правда необходимо использовать TmediaPlayer

var fmp3:TFileStream;
sz:integer;
...
begin

fmp3:=TFileStream.Create("c:\ramstein.mp3", fmOpenread);
try
sz:=fmp3.Size;
finally
fmp3.free;

mediaplayer2.filename:="c:\ramstein.mp3";
mediaplayer2.Open;
id3form.Memo1.Lines.Add("Битрэйт: "+inttostr(round(((sz*8/(mediaplayer2.Length/1000))/1000))+" Кбит/с");
mediaplayer2.Close;


MediaPlayer тут необходим только для определения длины в секундах


 
Makhanev A.S. ©   (2003-11-06 00:26) [10]


> nevalex © (04.11.03 09:16) [9]

1) Боюсь, что метод с TMediaPlayer"ом будет долго выполняться.
2) Метод вычисления битрейта через длину файла некорректен. Это примерная длина, но не точная.



Страницы: 1 вся ветка

Текущий архив: 2004.03.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-25940
vajo
2004-02-14 18:54
2004.03.09
Компаненты Semples для D7


1-25821
Эли
2004-02-25 12:44
2004.03.09
Как получить текст из редактора другой программы


8-25830
Kein
2003-10-27 18:55
2004.03.09
Вопрос к тем кто работал с DelphiX


14-25866
Юрий Зотов
2004-02-13 10:05
2004.03.09
---|Ветка была без названия|---


14-25890
Andryk
2004-02-16 11:49
2004.03.09
Пора учить китайский, а не английский :о)))