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

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

Продолжительность MP3


Kikoz ©   (2007-08-18 14:32:00) 

Ув.. мастера каким способом можно получить продолжительность mp3 в минутах ?


EagleEye   (2007-08-19 20:46:00) [1]

//Milliseconds
function GetMP3Length(XFileName : string): Longint;
var XMediaPlayer : TMediaPlayer;
begin
 XMediaPlayer := TMediaPlayer.CreateParented(Application.MainForm.Handle);
 XMediaPlayer.Visible := false;
 XMediaPlayer.FileName := XFileName;
 XMediaPlayer.TimeFormat := tfMilliseconds;
 XMediaPlayer.Open;
 Result := XMediaPlayer.Length;
 XMediaPlayer.Free;
end;


antonn   (2007-08-19 20:44:00) [2]

Audio Tools Library 1.9
Модули для определения параметров мультимедийных файлов (от размера, до длительности, битрейта и тд), их тегов. Для каждого модуля есть пример использования.

MPEGaudio 1.7 - for manipulating with MPEG audio file information
ID3v1 1.0 - for manipulating with ID3v1 tags
ID3v2 1.7 - for manipulating with ID3v2 tags
WAVfile 1.2 - for extracting information from WAV file header
OggVorbis 1.6 - for manipulating with Ogg Vorbis file information
MPEGplus 1.6 - for manipulating with MPEGplus file information
TwinVQ 1.1 - for extracting information from TwinVQ file header
Monkey 1.4 - for manipulating with Monkey's Audio file information
APEtag 1.0 - for manipulating with APE tags
WMAfile 1.0 - for extracting information from WMA file header
FLACfile 1.0 - for manipulating with FLAC file information
AACfile 1.0 - for manipulating with AAC file information
CDAtrack 1.0 - for getting information for CDA track

http://desksoft.ru/index.php?downloads=files&id=8(150 кб)


DrPass   (2007-08-19 20:19:00) [3]


> Dimaxx ©   (19.08.07 16:22) [8]
>
> > И особенно для VBR
>
> VBR частный случай и в вопросе о нем ни слова.

Тем не менее, этот частный случай делает неприемлемым метод решения. Зачем нужен алгоритм, который иногда работает, а иногда не работает? Тем более что и в остальных случаях он покажет только приблизительный результат - в mp3 есть еще куча информации помимо собственно потока данных.
И вообще неясно, зачем вычитывать битрейт из файла и высчитывать его длительность, если оттуда собственно длительность и так можно вычитать?


Dimaxx   (2007-08-19 20:16:00) [4]


> в вопросе отсутствуют тысячи, а то и миллионы слов

Ты отвечай на поставленный вопрос, а не к словам цепляйся. Не знаешь - лучше промолчи...


Virgo_Style   (2007-08-19 19:01:00) [5]

Dimaxx ©   (19.08.07 16:22) [8]
в вопросе отсутствуют тысячи, а то и миллионы слов


Dimaxx   (2007-08-19 16:22:00) [6]


> И особенно для VBR

VBR частный случай и в вопросе о нем ни слова.


Virgo_Style   (2007-08-19 13:31:00) [7]

Dimaxx ©   (19.08.07 13:22) [6]

И особенно для VBR


Dimaxx   (2007-08-19 13:22:00) [8]


> Ага. Особенно для mp3...

Проверь. Как ни странно, но совпадает...


Zeqfreed   (2007-08-19 01:01:00) [9]

> Ricks ©   (18.08.07 21:27) [3]

В подавляющем большинстве случаев, заголовок размещен в начале файла. Т.к. разработчики все-таки понимают бредовость его размещения где-либо еще.


Lacmus   (2007-08-19 00:59:00) [10]

Наверно необычный способ (через Shell), возвращает время в секундах


uses
 ActiveX, ComObj, ShlObj;

const
 FMTID_Audio: TGUID = '{64440490-4c8b-11d1-8b70-080036b11a03}';

 PIDASI_FORMAT         = $00000002;
 PIDASI_TIMELENGTH     = $00000003;
 PIDASI_AVG_DATA_RATE  = $00000004;
 PIDASI_SAMPLE_RATE    = $00000005;
 PIDASI_SAMPLE_SIZE    = $00000006;
 PIDASI_CHANNEL_COUNT  = $00000007;

 VT_UI8 = 21;

function GetAudioTimeLength(const aFileName: string): Integer;
var
 dwFlags, dwNumChars: DWord;
 DesktopFolder: IShellFolder;
 ShellFolder2: IShellFolder2;
 MAlloc: IMAlloc;
 DirPIDL, FilePIDL: PItemIDList;
 COLUMNID: SHCOLUMNID;
 PropValue: Variant;
begin
 dwFlags := 0;
 OleCheck(SHGetDesktopFolder(DesktopFolder));
 OleCheck(DesktopFolder.ParseDisplayName(0, nil, PWideChar(WideString(ExtractFilePath(aFileName))),
          dwNumChars, DirPIDL, dwFlags));
 OleCheck(DesktopFolder.BindToObject(DirPIDL, nil, IID_IShellFolder2, ShellFolder2));
 OleCheck(ShellFolder2.ParseDisplayName(0, nil, PWideChar(WideString(ExtractFileName(aFileName))),
          dwNumChars, FilePIDL, dwFlags));
 COLUMNID.fmtid := FMTID_Audio;
 COLUMNID.pid := PIDASI_TIMELENGTH;
 OleCheck(ShellFolder2.GetDetailsEx(FilePIDL, COLUMNID, @PropValue));
 OleCheck(SHGetMAlloc(MAlloc));
 MAlloc.Free(DirPIDL);
 MAlloc.Free(FilePIDL);
 case TVarData(PropValue).VType of
   VT_UI4: Result := TVarData(PropValue).VInt64 div 1000;
   VT_UI8: Result := TVarData(PropValue).VInt64 div 10000000;
 else
   Result := 0
 end
end;

procedure TForm41.Button2Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
   ShowMessage(IntToStr(GetAudioTimeLength(OpenDialog1.FileName)))
end;


Ricks   (2007-08-18 21:27:00) [11]

Ищи в интернете по mp3 формату. Длительность можно определить, прочитав заголовок файла (только его еще нужно найти)


DrPass   (2007-08-18 20:20:00) [12]


> Длительность (сек)=Размер файла/(Битрейт*1000/8)

Ага. Особенно для mp3...


Dimaxx   (2007-08-18 19:26:00) [13]

Длительность (сек)=Размер файла/(Битрейт*1000/8)


Наверх

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