[Gambas-user] Music.Length

Patrik Karlsson patrik at ...1931...
Sat Jun 28 08:36:27 CEST 2008


2008/6/28 Steven Drinnan <steven at ...1545...>:
> Just one more prog that can do the job
>
> exiftool
>
> a python based tool that just spits all the info out to the command
> line.
>
> example:
>
>  exiftool  "/home/steven/Documents/My Music/Various Artists/Super Hits
> 1993-2003 Disc 1/2 Unlimited - No Limit.mp3" ExifTool Version
> Number         : 7.25
> File Name                       : 2 Unlimited - No Limit.mp3
> Directory                       : /home/steven/Documents/My
> Music/Various Artists/Super Hits 1993-2003 Disc 1
> File Size                       : 4 MB
> File Modification Date/Time     : 2005:06:04 10:23:06
> File Type                       : MP3
> MIME Type                       : audio/mpeg
> MPEG Audio Version              : 1
> Audio Layer                     : 3
> Audio Bitrate                   : 160000
> Sample Rate                     : 44100
> Channel Mode                    : Joint Stereo
> MS Stereo                       : Off
> Intensity Stereo                : Off
> Copyright Flag                  : False
> Original Media                  : False
> Emphasis                        : None
> Length                          : 197.825 s
> Picture                         : (Binary data 0 bytes, use -b option to
> extract)
> Title                           : No Limit
> Track                           : 15
> Artist                          : 2 Unlimited
> Genre                           : Rock/Pop
> Album                           : Super Hits 1993-2003 Disc 1
> Year                            :
> Comment                         :
> Duration                        : 03:17 (approx)
>
>
> Another one is
> id3v2
>
> which gives this
>
>  id3v2 -R  "/home/steven/Documents/My Music/Various Artists/Super Hits
> 1993-2003 Disc 1/2 Unlimited - No Limit.mp3"
> id3v1 tag info for /home/steven/Documents/My Music/Various Artists/Super
> Hits 1993-2003 Disc 1/2 Unlimited - No Limit.mp3:
> Title  : No Limit                        Artist: 2
> Unlimited
> Album  : Super Hits 1993-2003 Disc 1     Year:     , Genre: Other (12)
> Comment:                                 Track: 15
> id3v2 tag info for /home/steven/Documents/My Music/Various Artists/Super
> Hits 1993-2003 Disc 1/2 Unlimited - No Limit.mp3:
> TLEN (Length): 197825
> APIC (Attached picture): ()[, 0]: image/jpg, 0 bytes
> TIT2 (Title/songname/content description): No Limit
> TRCK (Track number/Position in set): 15
> TPE1 (Lead performer(s)/Soloist(s)): 2 Unlimited
> TCON (Content type): Rock/Pop (255)
> TALB (Album/Movie/Show title): Super Hits 1993-2003 Disc 1
>
> TLEN = 197825 gives the track length in milliseconds so that's 197.825s
> or 3min and 18s approx.
>
> I have not had a good look at it but both seem to do what you want.
>
> Steven Drinnan
>
>
> On Sat, 2008-06-21 at 10:27 +0200, Ron Onstenk wrote:
>> On Friday 20 June 2008, Benoit Minisini wrote:
>> > I don't know why apparently the length of the audio is not encoded in the file
>> > header...
>> >
>>
>> It is, but not in the way you think.
>>
>> In fact is the mp3 as we know nowadays a incomplete standard.
>> We need to split the parts out of it.
>>
>>   Mp3 is the encoding method only used as _data_.
>>
>>   mpeg the layout of a block containing _data_
>>
>>   The file containing blocks of _data_
>>
>> Audio is encoded, mp3 in this case, in blocks and each block
>> has a header telling the rate used and block length.
>> The block information is following a mpeg standard.
>> Divide the bytes by rate and the time per block is known.
>> Add the time per block for each block and you have the
>> total play time.
>>
>> Storage on disk in a file was simple put all blocks
>> after each other and without a file header descibing the
>> content of the file.
>>
>>
>> It was the inovation of mp3 encoding that triggers a group
>> of enthousiast to write encoders/decoders to store there
>> music that way and made it as a pseudo standard for the
>> audiophiles, the 1/10 of the *.wav size that time in use.
>>
>> The early players read the rate from first block and used it
>> for the whole file play and position, not looking every block.
>> Just to win decoding time on the slow computers those days.
>> They where not able to use variable rates at all.
>> In the early 90's using 90% cpu time with win3.11
>>
>> Later the mp3 encoding programs were changed to use variable
>> rates and it was posible by using those block headers.
>>
>> To know the total time now you need to read the whole file and
>> add the time per block. For file on local disk not a problem
>> but what if it is on local network share or via internet?
>> And how about live streams that use mp3 _encoding_?
>> The total time is only known when the stream is ready.
>>
>> If the file had also container layout and could describe the
>> content you can write the time into this container header
>> and that does not exist for the populair mp3 encoded files.
>>
>> It is missing the file(container) that the mp3 encoding
>> it is a good available encoding for streaming.
>> Just jump somewhere in the stream and in short time it plays.
>>
>>
>> side note 1)
>> The real name of a file should be myaudio.mp3.mpeg just as
>> myfileachive.tar.gz for files in a tar and late gzipped.
>> I's just MS DOS (DiskOperatingSystem) did not allow more as
>> 3 characters for the extension that made the *.mp3 naming scheme.
>>
>> side note 2)
>> when you were able to write the total length in the header.
>> Aborting a recording and you do not have a length to
>> write and the mp3 duration is 0 or endless.
>> In Result is you can't trust this value.
>>
>> Same problem why a *.avi file is not a good container for
>> streaming with the seek index on the end of the file
>> and the start of the file contains the amount of segments
>> in the file to be able to find the start of the index.
>> Aborting the write of a avi file with encoded (mp3, divx, cvid)
>> data block makes the avi file corrupt for play.
>> Remember the avi repair tools for this problem.
>> The index is need while the encoded data blocks do not have(always)
>> fixed lengths and decoding _must_ begin on a block start.
>>
>> Ron the 1'st
>>
>>
>> -------------------------------------------------------------------------
>> Check out the new SourceForge.net Marketplace.
>> It's the best place to buy or sell services for
>> just about anything Open Source.
>> http://sourceforge.net/services/buy/index.php
>> _______________________________________________
>> Gambas-user mailing list
>> Gambas-user at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gambas-user
>>
>
>
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://sourceforge.net/services/buy/index.php
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
>

Thank you, that is good to know.
Since I am bundling some soundfx inside my gambas project, I have to
use an internal function to get the length. (If I don't cp out the
files to /tmp or so)

-- 
Patrik Karlsson




More information about the User mailing list