Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Очень срочный вопрос! Mp3->Rate [D7, WinXP]


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

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


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


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

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


nevalex   (2003-11-04 09:16:00) [2]

есть более простой способ
правда необходимо использовать 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-02 17:08:00) [3]


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

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


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

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

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


wicked   (2003-11-01 01:35:00) [5]

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


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

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


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

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


Makhanev A.S.   (2003-10-31 11:07:00) [8]


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

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

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


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

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

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


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


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

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

{Получение бит-рейта}
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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо