Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];

Вниз

Продолжительность 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
15-1187008950
Галинка
2007-08-13 16:42
2007.09.09
Visual C# Express Edition .net 2008 пробовал кто?


2-1186412147
Melior
2007-08-06 18:55
2007.09.09
Работа с TCP/UDP и БД


2-1187067945
term77
2007-08-14 09:05
2007.09.09
ADOCommand, Acess


2-1187547491
nord489
2007-08-19 22:18
2007.09.09
Работа с файлами.


2-1187095368
DevilDevil
2007-08-14 16:42
2007.09.09
хммм. Visible := true; <-- как на API ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский