davaxi / mp3info
The fastest php library to extract mp3 tags & meta information.
Installs: 38
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 44
pkg:composer/davaxi/mp3info
Requires
- php: >=5.4.0
 - ext-mbstring: *
 
Requires (Dev)
- wapmorgan/terminal-info: dev-master
 
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:
 
| tag | id3v1 | id3v2 | 
|---|---|---|
| song | song | TIT2 | 
| artist | artist | TPE1 | 
| album | album | TALB | 
| year | year | TYER | 
| comment | comment | COMM | 
| track | track | TRCK | 
| genre | genre | TCON | 
Content
- Usage
 - Performance
 - Console scanner
 - API
- Audio information
 - Class methods
 
 - 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 davaxi\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-id3package 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
| 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 | 
Contains true if audio has variable bit rate | 
boolean | 
$hasCover | 
Contains true 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 in sec.msec | 
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), passtrueas second argument is. - 
$audio->getCover()Returns raw content of bundled with audio image. - 
Mp3Info::isValidAudio($filename)Static method that checks if file$filenamelooks like a mp3-file. Returnstrueif file looks like a mp3, otherwise false. 
Technical information
Supporting features:
- id3v1
 - id3v2.3.0, id3v2.4.0
 - CBR, Variable Bit Rate (VBR)
 
Used sources: