Форум: "Media";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
ВнизКак узнать длительность времени mp3? Найти похожие ветки
← →
Shrek (2003-01-05 20:32) [0]Как узнать длительность времени mp3?
Есть у меня один способ но слишком маразматичен.
← →
Kair (2003-01-06 09:34) [1]У меня тоже есть слишком маразматичный способ.
Раскажи о своём. Может мой способ ещё более маразматичный.
← →
Дмитрий К.К. (2003-01-06 13:35) [2]А MediaPlayer не поможет? ;)
← →
Kair (2003-01-06 13:39) [3]>Дмитрий К.К. © (06.01.03 13:35)
>А MediaPlayer не поможет? ;)
MediaPlayer1.Length что-ли?
← →
Mihey (2003-01-06 22:34) [4]В любом плеере есть определение долготы музыкального файла. Если тебе нужно играть только MP3, то лучше используй TActiveMP3 - он очень прост, там легко определить время посмотрев разок в справку компонента.
← →
Дмитрий К.К. (2003-01-08 07:30) [5]
> Kair (06.01.03 13:39)
> MediaPlayer1.Length что-ли?
А тя ето сильно смущает?
← →
Shrek (2003-01-09 22:21) [6]на то шоб загрузить файл в MediaPlayer1 уходить время, с одним файлом нет проблем но если список из 200 файлов юзера это нервирует, надо побыстрие, вот допустим винамп, это делает без проблем.
← →
Mihey (2003-01-09 22:43) [7]Хех, так интересно, в заголовочной части файла есть информация о длительности???
← →
Shrek (2003-01-09 22:54) [8]я такого не писал:
вот што там:
TId3v1Tag = packed record
Identifier: array[0..2] of Char;
SongName: array[1..30] of Char;
Artist: array[1..30] of Char;
Album: array[1..30] of Char;
Year: array[0..3] of Char;
Comment: array[1..30] of Char;
Genre: TGenre;
end;
← →
Дмитрий К.К. (2003-01-10 06:32) [9]Дык тогда дели размер файла на битрэйт. Будет те продолжительность.
← →
nejest (2003-01-10 15:32) [10]>Дмитрий К.К. © (10.01.03 06:32)
>Дык тогда дели размер файла на битрэйт. Будет те >продолжительность.
бывают файлы с переменным битрейтом, и этот способ для них не подходит, и вроде в ID3v1 тэгах битрейт не фигурирует. Этот способ не всегда будет работать
← →
Shrek (2003-01-10 18:03) [11]икал компонент ActiveMP3 только для бейсика и есть, а для делфи нету, может кто подскажет линк, или может кинуть.
← →
Mihey (2003-01-10 21:26) [12]ActiveMP3 - это ActiveX, он работает на VB точно так же, как и на Delphi. Если не найдёшь - сообщи, я тебе перешлю.
← →
Shrek (2003-01-11 01:54) [13]как используя ActiveMP3 достать хоть какуюто длину mp3?
← →
Mihey (2003-01-11 18:26) [14]Метод GetLength - возвращает в миллисекундах.
← →
99 (2003-01-12 06:29) [15]мой совет- воспользуйся библиотекой bass.
если возникнут по ней вопросы-помогу (очень просто,быстро определить время звучания). А делить длинну на битрейт- глупо- а если битрейт переменный?
← →
Mihey (2003-01-12 17:29) [16]
> если возникнут по ней вопросы-помогу (очень просто,быстро
> определить время звучания).
Bass - это действительно хороший плеер. Только у него слишком разобранный интерфейс, а потому придётся вычислять длину из количества фреймов, хотя это и очень просто. Там есть неплохой пример (имею ввиду заголовочник к Bass - TBassPlayer).
← →
99 (2003-01-13 06:41) [17]вычисление длинны в секундах с помощью bass занимает 5 строк.
← →
Дмитрий К.К. (2003-01-13 06:59) [18]
> 99 (12.01.03 06:29)
> мой совет- воспользуйся библиотекой bass.
> если возникнут по ней вопросы-помогу (очень просто,быстро
> определить время звучания). А делить длинну на битрейт-
> глупо- а если битрейт переменный?
Я подсказал самое простое решение. Знаю про переменность битрэйта. А каков процент таких файлов от общего количества ты знаешь, умник?
З.Ы. Басс, кстати, стал платным. Эт те на будущее.
← →
99 (2003-01-14 06:41) [19]у меня 30% мр3 - с переменным битрейтом, ну а чтобы узнать длину мр3 не обязательно платить сумашедшие деньги. Кстати, умник, я неделю назад скачал новую версию bass совсем бесплатно.
← →
Shrek (2003-01-15 13:32) [20]спасибо всем за заботу. я не могу использовать никаких библиотек и програм, это должно быть програмно. Это наверное реальный способ GetLength.
← →
Garrett (2003-01-16 16:58) [21]как известно, mp3-файл состоит из фреймов, каждый фрейм имеет два байта заголовочной информации (хотя, может, и больше, я точно не помню), которая содержит, в частности битрейт именно этого фрейма и частоту дискретизации. таким образом зная длину фрейма, битрейт и частоту дискретизации легко рассчитать длительность звучания фрейма.
Далее два способа - умножать длительность первого фрейма на их количество, либо же у каждого фрейма вычислять длительность и сложить длительности всех фреймов.
← →
Garrett (2003-01-18 03:06) [22]Вот функция, разбирающая заголовок mp3-фрейма (длительность в секундах не считает, думаю, сможете рассчитать самостоятельно):
//Маски для определения полей в MP3 файле
VerMask = 1572864; //Версия MPEG 1, 2 или 2.5
LayMask = 393216; //Версия слоя 1, 2 или 3
CRCMask = 65536; //Есть ли CRC
BitMask = 61440; //kbps
SmpMask = 3072; //SampleRate
PadMask = 512; //Padding
PrvMask = 256; //Private
ModMask = 192; //Mode
MexMask = 48; //Mode extension
CopMask = 8; //Copyrighted
OrgMask = 4; //Original
EmpMask = 3; //Emphasis
TMPEGBitRates : Array [1..4, 1..14] of Word = (
(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));
type
TMPEGAudioFormat = record
Version : Byte; // Версия MPEG
Layer : Byte; // Номер лэйера
Bitrate : Word; // Битность - параметр кодирования
SampleRate : Word; // Частота дискретизации
Mode : Byte; // Канальность
ModeEx : Byte; // Доп. информация о режиме
Emphasis : Byte; // Параметр кодирования ??
Padding : Boolean; // Выравнивание
FPrivate : Boolean; //
FCopyright : Boolean; // Права
FOriginal : Boolean; // Оригинальность
FCRC : Boolean; // Есть ли CRC
Offset : DWord; // Адрес первого байта фрейма
Size : Word; // Размер фрейма включая заголовок и CRC
end;
function SC_ConvertMP3Format (W : DWord): TMPEGAudioFormat;
var X : Integer;
begin
With Result do
begin
//Read values
Version := (W and VerMask) div 524288;
Layer := (W and LayMask) div 131072;
FCRC := ((W and CRCMask) div 32768) = 0;
BitRate := (W and BitMask) div 4096;
SampleRate := (W and SmpMask) div 1024;
Padding := (W and PadMask) <> 0;
FPrivate := (W and PrvMask) <> 0;
Mode := (W and ModMask) div 64;
ModeEx := (W and MexMask) div 16;
FCopyright := (W and CopMask) <> 0;
FOriginal := (W and OrgMask) <> 0;
Emphasis := W and EmpMask;
//Convert values
Case Version of
0 : Version := 3;
2 : Version := 2;
3 : Version := 1;
else Version := 0;
end;
Layer := 4 -Layer;
If BitRate = 15 then Exit;
If BitRate = 0 then Exit;
If (Version = 1) and (Layer = 1) then BitRate := 32 +16*BitRate
else
begin
X := 4;
If (Version =1) and (Layer =2) then X := 1;
If (Version =1) and (Layer =3) then X := 2;
If (Version >1) and (Layer =1) then X := 3;
BitRate := TMPEGBitRates[X, BitRate];
end;
Case Version of
1 : Case SampleRate of
0 : SampleRate := 44100;
1 : SampleRate := 48000;
2 : SampleRate := 32000;
else Exit;
end;
2 : Case SampleRate of
0 : SampleRate := 22025;
1 : SampleRate := 24000;
2 : SampleRate := 16000;
else Exit;
end;
3 : Case SampleRate of
0 : SampleRate := 11025;
1 : SampleRate := 12000;
2 : SampleRate := 8000;
else Exit;
end;
else Exit;
end;
If Layer = 1 then
begin
Size := ((12000*Bitrate) div SampleRate +Integer(Padding))*4;
end
else
begin
Size := (144000*Bitrate) div SampleRate + Integer (Padding);
end;
end;
end;
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.007 c