![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Продолжительность 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)