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

Вниз

Продолжительность MP3   Найти похожие ветки 

 
Kikoz   (2007-08-18 14:32) [0]

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


 
Dimaxx ©   (2007-08-18 19:26) [1]

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


 
DrPass ©   (2007-08-18 20:20) [2]


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

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


 
Ricks ©   (2007-08-18 21:27) [3]

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


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

Наверно необычный способ (через 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;



 
Zeqfreed ©   (2007-08-19 01:01) [5]

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

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


 
Dimaxx ©   (2007-08-19 13:22) [6]


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

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


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

Dimaxx ©   (19.08.07 13:22) [6]

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


 
Dimaxx ©   (2007-08-19 16:22) [8]


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

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


 
Virgo_Style ©   (2007-08-19 19:01) [9]

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


 
Dimaxx ©   (2007-08-19 20:16) [10]


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

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


 
DrPass ©   (2007-08-19 20:19) [11]


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

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


 
antonn ©   (2007-08-19 20:44) [12]

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 кб)


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

//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;



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

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

Наверх




Память: 0.5 MB
Время: 0.023 c
2-1187451030
RedBanner
2007-08-18 19:30
2007.09.09
отправка E-mail а


6-1168691528
Jeeb
2007-01-13 15:32
2007.09.09
Нажатие кнопки-рисунка на сайте


11-1169202581
mixail_shar
2007-01-19 13:29
2007.09.09
Ошибка в KOL к Кладову


15-1187018389
лолкин
2007-08-13 19:19
2007.09.09
Может кто-то на пальцах объяснить механизм работы LoadLibrary?


4-1174460803
Sergey Ivanov
2007-03-21 10:06
2007.09.09
Запись в журнал приложений