wapmorgan / mp3info
The fastest php library to extract mp3 tags & meta information.
Installs: 947 571
Dependents: 6
Suggesters: 0
Security: 0
Stars: 141
Watchers: 8
Forks: 41
Open Issues: 9
Requires
- php: >=5.4.0
- ext-mbstring: *
README
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:
Content
- Usage
- Performance
- Console scanner
- API
- Audio information
- Class methods
- Settings
- Technical information
Usage
After creating an instance of Mp3Info
with passing filename as the first argument to the constructor, you can retrieve data from object properties (listed below).
use wapmorgan\Mp3Info\Mp3Info; // To get basic audio information $audio = new Mp3Info('./audio.mp3'); // If you need parse tags, you should set 2nd argument this way: $audio = new Mp3Info('./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 tags echo 'Song '.$audio->tags1['song'].' from '.$audio->tags1['artist'].PHP_EOL; // specific id3v2 tags echo '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;
Performance
- 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.
Console scanner
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 ./
API
Audio information
Class methods
-
$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.
Settings
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).
Technical information
Supporting features:
- id3v1
- id3v2.3.0, id3v2.4.0
- CBR, Variable Bit Rate (VBR)
Used sources: