Sign in to follow this  
Followers 0
gobsor

ID3.au3 UDF - Problem reading TLEN

4 posts in this topic

#1 ·  Posted (edited)

Hello,

I was trying to get the length (playtime) of a MP3 file. I came across that on the ID3 website:

TLEN
    The 'Length' frame contains the length of the audiofile in milliseconds, represented as a numeric string.

Though i was searching the autoit-forums - et voila!:

exactly what I've been looking for.

So, first thing i did was downloading the ID3.au3 UDF and the example ID3_Example_GUI.au3. I modified the example

and added

MsgBox(0, "", "LENGTH: " & _ID3GetTagField("TLEN"))

to line 147. Though, when opening a MP3 file it shows the message box with content "LENGTH:" but apparently the _ID3GetTagField("TLEN") returns

"" - an empty string. Why? Did I do something wrong? When I view the MP3 file's information in WinAMP it shows playtime 194s. What am I doing wrong?

EDIT:

actually one doesn't need to add the MsgBox to line 147 since the example itself already contains a field on the GUI that should contain the playtime of the MP3 file after it got opened. Still the with the UDF provided example doesn't work for TLEN. Any suggestions?

Edited by gobsor

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

I've found that the MP3 files I have don't have a TLEN field set in almost all of them. There are other ways of obtaining the information you're looking for though. Using the you can get the information you need. Here's an example script that will show you the length of an MP3 in seconds.

#include <bass.au3>
_Bass_Startup("Bass.dll")
_BASS_Init(0, -1, 44100, 0, "")
$Filename = FileOpenDialog("Select MP3 File", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", "MP3 (*.mp3)", 1 + 4 )
$Bass_File = _BASS_StreamCreateFile(False, $Filename, 0, 0, 0)
$SetTime = _BASS_ChannelGetLength($Bass_File, $BASS_POS_BYTE)
$SetTime = _BASS_ChannelBytes2Seconds($Bass_File, $SetTime)
MsgBox(0, "", "LENGTH: " & $SetTime & " seconds")
Edited by BrewManNH

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

gobsor,

If you look inside Sound.au3 you will find several ways to get the length of an mp3 file.

The _SoundOpen function first tries to get the time from the Windows properties of the file; if that fails tries to read the Xing header (needed to get the correct result for VBR encoded files); if that fails tries to read the TLEN tag; and if that fails asks the MCI DLL if it can produce anything (which will only be correct for a CBR encoded file). After that it gives up - because I could not find any another way to do it! :P

As I wrote those bits of the code, please feel free to use them if they are of use to you. :x

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Thanks Brew, your example just works fine and gives me the exact length in seconds, I'll probably stick to that.

Hey M23, I had a look into Sound.au3 earlier, using it in other scripts, its definately great work! Though, it does not always give

me the exact length - for some mp3 files it fails and misses a few seconds - I compared the results to the length shown in WinAMP.

I just tested the Bass.au3 UDF on ~80 files and it seems to be very accurate.

Thanks though :x

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0