- Notifications
You must be signed in to change notification settings - Fork43
The fastest PHP library to extract mp3 meta information (duration, bitrate, samplerate and so on) and tags (id3v1, id3v2).
License
wapmorgan/Mp3Info
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
The fastest PHP library to get mp3 tags&meta.
This class extracts information from mpeg/mp3 audio:
- Audio information:
- Duration
- Bit Rate
- Sample Rate
- Channels mode
- Codec and Layer version
- Frames count
- Audio image (cover)
- Audio tags:
tag | id3v1 | id3v2 |
---|---|---|
song | song | TIT2 |
artist | artist | TPE1 |
album | album | TALB |
year | year | TYER |
comment | comment | COMM |
track | track | TRCK |
genre | genre | TCON |
- Usage
- Performance
- Console scanner
- API
- Audio information
- Class methods
- Settings
- Technical information
After creating an instance ofMp3Info
with passing filename as the first argument to the constructor, you can retrieve data from object properties (listed below).
usewapmorgan\Mp3Info\Mp3Info;// To get basic audio information$audio =newMp3Info('./audio.mp3');// If you need parse tags, you should set 2nd argument this way:$audio =newMp3Info('./audio.mp3',true);
And after that access object properties to get audio information:
echo'Audio duration:'.floor($audio->duration /60).' min'.floor($audio->duration %60).' sec'.PHP_EOL;echo'Audio bitrate:'.($audio->bitRate /1000).' kb/s'.PHP_EOL;// and so on ...
To access id3v1 tags use$tags1
property.To access id3v2 tags use$tags2
property.Also, you can use combined list of tags$tags
, where id3v2 and id3v1 tags united with id3v1 keys.
// simple id3v1 tagsecho'Song'.$audio->tags1['song'].' from'.$audio->tags1['artist'].PHP_EOL;// specific id3v2 tagsecho'Song'.$audio->tags2['TIT2'].' from'.$audio->tags2['TPE1'].PHP_EOL;// combined tags (simplies way to get as more information as possible)echo'Song'.$audio->tags['song'].' from'.$audio->tags['artist'].PHP_EOL;
- Typically it parses one mp3-file with size around 6-7 mb in less than 0.001 sec.
- List of 112 files with constant & variable bitRate with total duration 5:22:28 are parsed in 1.76 sec.getId3 library against exactly the same mp3 list works for 8x-10x slower - 9.9 sec.
- If you want, there's a very easy way to compare. Just install
nass600/get-id3
package and run console scanner against any folder with audios. It will print time that Mp3Info spent and that getId3.
To test Mp3Info you can use built-in script that scans dirs and analyzes all mp3-files inside them. To launch script against current folder:
php bin/scan ./
Property | Description | Values |
---|---|---|
$codecVersion | MPEG codec version | 1 or 2 |
$layerVersion | Audio layer version | 1 or 2 or 3 |
$audioSize | Audio size in bytes. Note that this value is NOT equals file size. | int |
$duration | Audio duration in seconds.microseconds | like 3603.0171428571 (means 1 hour and 3 sec) |
$bitRate | Audio bit rate in bps | like 128000 (means 128kb/s) |
$sampleRate | Audio sample rate in Hz | like 44100 (means 44.1KHz) |
$isVbr | Containstrue if audio has variable bit rate | boolean |
$hasCover | Containstrue if audio has a bundled image | boolean |
$channel | Channel mode | 'stereo' or'dual_mono' or'joint_stereo' or'mono' |
$tags1 | Audio tags ver. 1 (aka id3v1). | ["song" => "Song name", "year" => 2009] |
$tags2 | Audio tags ver. 2 (aka id3v2), only text ones. | ["TIT2" => "Long song name", ...] |
$tags | Combined audio tags (from id3v1 & id3v2). Keys as in tags1. | ["song" => "Long song name", "year" => 2009, ...] |
$coverProperties | Information about a bundled with audio image. | ["mime_type" => "image/jpeg", "picture_type" => 1, ...] |
$_parsingTime | Contains time spent to read&extract audio information insec.msec |
$audio = new Mp3Info($filename, $parseTags = false)
Creates new instance of object and initiate parsing. If you need to parse audio tags (id3v1 and id3v2), passtrue
as second argument is.$audio->getCover()
Returns raw content of bundled with audio image.Mp3Info::isValidAudio($filename)
Static method that checks if file$filename
looks like a mp3-file. Returnstrue
if file looks like a mp3, otherwise false.
You can adjust some variables to reconfigure before instantiating of object:
Mp3Info::$headerSeekLimit
- count of bytes to search for the first mpeg header in audio. Default:2048
(bytes).Mp3Info::$framesCountRead
- count of mpeg frames to read before compute audio duration. Default:2
(frames).
Supporting features:
- id3v1
- id3v2.3.0, id3v2.4.0
- CBR, Variable Bit Rate (VBR)
Used sources:
About
The fastest PHP library to extract mp3 meta information (duration, bitrate, samplerate and so on) and tags (id3v1, id3v2).
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Contributors6
Uh oh!
There was an error while loading.Please reload this page.