PHPackages                             kiwilan/php-audio - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. kiwilan/php-audio

ActiveLibrary[Image &amp; Media](/categories/media)

kiwilan/php-audio
=================

PHP package to parse and update audio files metadata, with `JamesHeinrich/getID3`.

4.0.02(6mo ago)3012.6k↓20.5%[4 PRs](https://github.com/kiwilan/php-audio/pulls)1MITPHPPHP ^8.1CI passing

Since Jun 4Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/kiwilan/php-audio)[ Packagist](https://packagist.org/packages/kiwilan/php-audio)[ Docs](https://github.com/kiwilan/php-audio)[ GitHub Sponsors](https://github.com/kiwilan)[ RSS](/packages/kiwilan-php-audio/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (5)Versions (24)Used By (1)

PHP Audio
=========

[](#php-audio)

[![Banner with speaker and PHP Audio title](https://raw.githubusercontent.com/kiwilan/php-audio/main/docs/banner.jpg)](https://raw.githubusercontent.com/kiwilan/php-audio/main/docs/banner.jpg)

[![php](https://camo.githubusercontent.com/2d44ab343cf5a2aab849b6954ee31dd09ba1f1f11bf0f168ccd08e186ec060b1/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f7374796c653d666c6174266c6162656c3d504850266d6573736167653d76382e3126636f6c6f723d373737424234266c6f676f3d706870266c6f676f436f6c6f723d666666666666266c6162656c436f6c6f723d313831383162)](https://www.php.net/)[![version](https://camo.githubusercontent.com/0ca1380be7ddf578ca2b7f42c5da906358fb3b21f57d639f89860318b46e04d9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6b6977696c616e2f7068702d617564696f2e7376673f7374796c653d666c617426636f6c6f72413d31383138314226636f6c6f72423d373737424234)](https://packagist.org/packages/kiwilan/php-audio)[![downloads](https://camo.githubusercontent.com/0d4260e3a79577ca8b76fd4d3a2d6557ae74b97d257a993f74a4472da72c0c0a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6b6977696c616e2f7068702d617564696f2e7376673f7374796c653d666c617426636f6c6f72413d31383138314226636f6c6f72423d373737424234)](https://packagist.org/packages/kiwilan/php-audio)[![license](https://camo.githubusercontent.com/75eaa640c73e6d1a6b6ddcd6f922b67167787235276aeabe6f6f3b628fe22297/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6b6977696c616e2f7068702d617564696f2e7376673f7374796c653d666c617426636f6c6f72413d31383138314226636f6c6f72423d373737424234)](https://github.com/kiwilan/php-audio/blob/main/README.md)[![tests](https://camo.githubusercontent.com/f62af7021e8fc3ac31da957030365dcde7f67f1f93f5e15c50296d22bd0325de/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6b6977696c616e2f7068702d617564696f2f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c617426636f6c6f72413d313831383142)](https://packagist.org/packages/kiwilan/php-audio)[![codecov](https://camo.githubusercontent.com/ad62a161130e9f0d12826f51fefcdced4c7b3d37232aa02f68780aa8b05c4ace/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f67682f6b6977696c616e2f7068702d617564696f2f6d61696e3f7374796c653d666c617426636f6c6f72413d31383138314226636f6c6f72423d373737424234)](https://codecov.io/gh/kiwilan/php-audio)

PHP package to parse and update audio files metadata, with [`JamesHeinrich/getID3`](https://github.com/JamesHeinrich/getID3).

Note

You can check formats supported on [Supported formats](#supported-formats) section.

About
-----

[](#about)

Audio files can use different formats, this package aims to provide a simple way to read them with [`JamesHeinrich/getID3`](https://github.com/JamesHeinrich/getID3). The `JamesHeinrich/getID3` package is excellent to read metadata from audio files, but output is just an array, current package aims to provide a simple way to read audio files with a beautiful API.

Requirements
------------

[](#requirements)

- PHP `8.1` minimum
- Optional for update
    - `FLAC`: `flac` (with `apt`, `brew` or `scoop`)
    - `OGG`: `vorbis-tools` (with `apt` or `brew`) / `extras/icecast` (with `scoop`)

### Roadmap

[](#roadmap)

- Add support for more formats with [external packages](https://askubuntu.com/questions/226773/how-to-read-mp3-tags-in-shell)

Installation
------------

[](#installation)

You can install the package via [composer](https://getcomposer.org/):

```
composer require kiwilan/php-audio
```

Usage
-----

[](#usage)

Core metadata:

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');

$audio->getTitle(); // `?string` to get title
$audio->getArtist(); // `?string` to get artist
$audio->getAlbum(); // `?string` to get album
$audio->getGenre(); // `?string` to get genre
$audio->getYear(); // `?int` to get year
$audio->getTrackNumber(); // `?string` to get track number
$audio->getComment(); // `?string` to get comment
$audio->getAlbumArtist(); // `?string` to get album artist
$audio->getComposer(); // `?string` to get composer
$audio->getDiscNumber(); // `?string` to get disc number
$audio->isCompilation(); // `bool` to know if is compilation
$audio->getCreationDate(); // `?string` to get creation date
$audio->getCopyright(); // `?string` to get copyright
$audio->getEncoding(); // `?string` to get encoding
$audio->getDescription(); // `?string` to get description
$audio->getSynopsis(); // `?string` to get synopsis
$audio->getLanguage(); // `?string` to get language
$audio->getLyrics(); // `?string`
$audio->getDuration(); // `?float` to get duration in seconds
$audio->getDurationHuman(); // `?string` to get duration in human readable format
```

Raw tags:

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');

$raw_all = $audio->getRawAll(); // `array` with all tags
$raw = $audio->getRaw(); // `array` with main tag
$title = $audio->getRawKey('title'); // `?string` to get title same as `$audio->getTitle()`

$format = $audio->getRaw('id3v2'); // `?array` with all tags with format `id3v2`
$title = $audio->getRawKey('title', 'id3v2'); // `?string` to get title with format `id3v2`
```

Additional metadata:

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');

$audio->getPath(); // `string` to get path
$audio->getExtension(); // `string` to get extension
$audio->hasCover(); // `bool` to know if has cover
$audio->isValid(); // `bool` to know if file is valid audio file
$audio->isWritable(); // `bool` to know if file is writable
$audio->getFormat(); // `AudioFormatEnum` to get format (mp3, m4a, ...)
$audio->getType(); // `?AudioTypeEnum` ID3 type (id3, riff, asf, quicktime, matroska, ape, vorbiscomment)
```

You can use `toArray()` method to get raw info:

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');

$audio->toArray(); // `array` with all metadata
```

Advanced properties:

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');

$audio->getId3Reader(); // `?Id3Reader` reader based on `getID3`
$audio->getMetadata(); // `?AudioMetadata` with audio metadata
$audio->getCover(); // `?AudioCover` with cover metadata
```

### Update

[](#update)

You can update audio files metadata with `Audio::class`, but not all formats are supported. [See supported formats](#updatable-formats)

Warning

You can use any property of `Audio::class` but if you use a property not supported by the format, it will be ignored.

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');
$audio->getTitle(); // `Title`

$tag = $audio->write()
  ->title('New Title')
  ->artist('New Artist')
  ->album('New Album')
  ->genre('New Genre')
  ->year('2022')
  ->trackNumber('2/10')
  ->albumArtist('New Album Artist')
  ->comment('New Comment')
  ->composer('New Composer')
  ->creationDate('2021-01-01')
  ->description('New Description')
  ->synopsis('New Synopsis')
  ->discNumber('2/2')
  ->encodingBy('New Encoding By')
  ->encoding('New Encoding')
  ->isCompilation()
  ->lyrics('New Lyrics')
  ->cover('path/to/cover.jpg') // you can use file content `file_get_contents('path/to/cover.jpg')`
  ->save();

$audio = Audio::read('path/to/audio.mp3');
$audio->getTitle(); // `New Title`
$audio->getCreationDate(); // `null` because `creationDate` is not supported by `MP3`
```

Some properties are not supported by all formats, for example `MP3` can't handle some properties like `lyrics` or `stik`, if you try to update these properties, they will be ignored.

#### Set tags manually

[](#set-tags-manually)

You can set tags manually with `tag()` or `tags()` methods, but you need to know the format of the tag, you could use `tagFormats` to set formats of tags (if you don't know the format, it will be automatically detected).

Warning

If you use `tags` method, you have to use key used by metadata container. For example, if you want to set album artist in `id3v2`, you have to use `band` key. If you want to know which key to use check [`src/Core/AudioCore.php`](https://github.com/kiwilan/php-audio/blob/main/src/Core/AudioCore.php) file.

If your key is not supported, `save` method will throw an exception, unless you use `skipErrors`.

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');
$audio->getAlbumArtist(); // `Band`

$tag = $audio->write()
    ->tag('composer', 'New Composer')
    ->tag('genre', 'New Genre') // can be chained
    ->tags([
        'title' => 'New Title',
        'band' => 'New Band', // `band` is used by `id3v2` to set album artist, method is `albumArtist` but `albumArtist` key will throw an exception with `id3v2`
    ])
    ->tagFormats(['id3v1', 'id3v2.4']) // optional
    ->save();

$audio = Audio::read('path/to/audio.mp3');
$audio->getAlbumArtist(); // `New Band`
```

#### Arrow functions

[](#arrow-functions)

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');
$audio->getAlbumArtist(); // `Band`

$tag = $audio->write()
  ->title('New Title')
  ->albumArtist('New Band') // `albumArtist` will set `band` for `id3v2`, exception safe
  ->save();

$audio = Audio::read('path/to/audio.mp3');
$audio->getAlbumArtist(); // `New Band`
```

#### Skip errors

[](#skip-errors)

You can use `skipErrors` to prevent exception if you use unsupported format.

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');

$tag = $audio->write()
  ->tags([
    'title' => 'New Title',
    'title2' => 'New title', // not supported by `id3v2`, will throw an exception
  ])
  ->skipErrors() // will prevent exception
  ->save();
```

Note

Arrow functions are exception safe for properties but not for unsupported formats.

### Raw tags

[](#raw-tags)

Audio files format metadata with different methods, `JamesHeinrich/getID3` offer to check these metadatas by different methods. In `raw_all` property of `Audio::class`, you will find raw metadata from `JamesHeinrich/getID3` package, like `id3v2`, `id3v1`, `riff`, `asf`, `quicktime`, `matroska`, `ape`, `vorbiscomment`...

If you want to extract specific field which can be skipped by `Audio::class`, you can use `raw_all` property.

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');
$raw_all = $audio->getRawAll(); // all formats
$raw = $audio->getRaw(); // main format
```

### AudioMetadata

[](#audiometadata)

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');
$metadata = $audio->getMetadata();

$metadata->getFileSize(); // `?int` in bytes
$metadata->getSizeHuman(); // `?string` (1.2 MB, 1.2 GB, ...)
$metadata->getExtension(); // `?string` (mp3, m4a, ...)
$metadata->getEncoding(); // `?string` (UTF-8...)
$metadata->getMimeType(); // `?string` (audio/mpeg, audio/mp4, ...)
$metadata->getDurationSeconds(); // `?float` in seconds
$metadata->getDurationReadable(); // `?string` (00:00:00)
$metadata->getBitrate(); // `?int` in kbps
$metadata->getBitrateMode(); // `?string` (cbr, vbr, ...)
$metadata->getSampleRate(); // `?int` in Hz
$metadata->getChannels(); // `?int` (1, 2, ...)
$metadata->getChannelMode(); // `?string` (mono, stereo, ...)
$metadata->isLossless(); // `bool` to know if is lossless
$metadata->getCompressionRatio(); // `?float`
$metadata->getFilesize(); // `?int` in bytes
$metadata->getSizeHuman(); // `?string` (1.2 MB, 1.2 GB, ...)
$metadata->getDataFormat(); // `?string` (mp3, m4a, ...)
$metadata->getWarning(); // `?array`
$metadata->getQuicktime(); // `?Id3AudioQuicktime
$metadata->getCodec(); // `?string` (mp3, aac, ...)
$metadata->getEncoderOptions(); // `?string`
$metadata->getVersion(); // `?string`
$metadata->getAvDataOffset(); // `?int` in bytes
$metadata->getAvDataEnd(); // `?int` in bytes
$metadata->getFilePath(); // `?string`
$metadata->getFilename(); // `?string`
$metadata->getLastAccessAt(); // `?DateTime`
$metadata->getCreatedAt(); // `?DateTime`
$metadata->getModifiedAt(); // `?DateTime`
$metadata->toArray();
```

### Quicktime

[](#quicktime)

For `quicktime` type, like for M4B audiobook, you can use `Id3TagQuicktime` to get more informations.

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.m4b');
$quicktime = $audio->getMetadata()->getQuicktime();

$quicktime->getHinting();
$quicktime->getController();
$quicktime->getFtyp();
$quicktime->getTimestampsUnix();
$quicktime->getTimeScale();
$quicktime->getDisplayScale();
$quicktime->getVideo();
$quicktime->getAudio();
$quicktime->getSttsFramecount();
$quicktime->getComments();
$quicktime->getFree();
$quicktime->getWide();
$quicktime->getMdat();
$quicktime->getEncoding();
$quicktime->getChapters(); // ?Id3AudioQuicktimeChapter[]
```

### AudioCover

[](#audiocover)

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');
$cover = $audio->getCover();

$cover->getContents(); // `?string` raw file
$cover->getMimeType(); // `?string` (image/jpeg, image/png, ...)
$cover->getWidth(); // `?int` in pixels
$cover->getHeight(); // `?int` in pixels
```

Supported formats
-----------------

[](#supported-formats)

### Readable formats

[](#readable-formats)

- `id3v2` will be selected before `id3v1` or `riff` if both are available.

FormatSupportedAboutID3 typeNotesAAC❌Advanced Audio CodingALAC✅Apple Lossless Audio Codec`quicktime`AIF✅Audio Interchange File Format (aif)`id3v2`,`riff`AIFC✅Audio Interchange File Format (aifc)`id3v2`,`riff`AIFF✅Audio Interchange File Format (aiff)`id3v2`,`riff`DSF❌Direct Stream Digital AudioFLAC✅Free Lossless Audio Codec`vorbiscomment`MKA✅Matroska`matroska`*Cover not supported*MKV✅Matroska`matroska`*Cover not supported*APE❌Monkey's AudioMP3✅MPEG audio layer 3`id3v2`,`id3v1`MP4✅Digital multimedia container format`quicktime`*Partially supported*M4A✅mpeg-4 audio`quicktime`M4B✅Audiobook`quicktime`M4V✅mpeg-4 video`quicktime`MPC❌MusepackOGG✅Open container format`vorbiscomment`OPUS✅IETF Opus audio`vorbiscomment`OFR❌OptimFROGOFS❌OptimFROGSPX✅Speex`vorbiscomment`*Cover not supported*TAK❌Tom's Audio KompressorTTA✅True Audio`ape`*Cover not supported*WMA✅Windows Media Audio`asf`*Cover not supported*WV✅WavPack`ape`WAV✅Waveform Audio`id3v2`,`riff`WEBM✅WebM`matroska`*Cover not supported*You want to add a format? [See FAQ](#faq)

### Updatable formats

[](#updatable-formats)

`JamesHeinrich/getID3` can update some formats, but not all.

> - ID3v1 (v1 &amp; v1.1)
> - ID3v2 (v2.3, v2.4)
> - APE (v2)
> - Ogg Vorbis comments (need `vorbis-tools`)
> - FLAC comments (need `flac`)

FormatNotesRequiresFLAC*Cover not supported*`flac`MP3OGG*Cover not supported*`vorbis-tools`- `flac`: with `apt`, `brew` or `scoop`
- `vorbis-tools`: with `apt`, `brew` or `scoop`
    - With `scoop`, `vorbis-tools` is not available, you can use `extras/icecast` instead.

### Convert properties

[](#convert-properties)

`Audio::class` convert some properties to be more readable.

- `ape` format: [`Id3TagApe`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagApe.php)
- `asf` format: [`Id3TagAsf`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagAsf.php)
- `id3v1` format: [`Id3TagAudioV1`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagAudioV1.php)
- `id3v2` format: [`Id3TagAudioV2`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagAudioV2.php)
- `matroska` format: [`Id3TagMatroska`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagMatroska.php)
- `quicktime` format: [`Id3TagQuicktime`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagQuicktime.php)
- `vorbiscomment` format: [`Id3TagVorbisComment`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagVorbisComment.php)
- `riff` format: [`Id3TagRiff`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagRiff.php)
- `unknown` format: [`Id3TagVorbisComment`](https://github.com/kiwilan/php-audio/blob/main/src/Id3/Tag/Id3TagVorbisComment.php)

ID3 typeOriginalNew property`id3v2``band``album_artist``id3v2``part_of_a_set``disc_number``id3v2``part_of_a_compilation``is_compilation``quicktime``compilation``is_compilation``quicktime``encoded_by``encoding_by``quicktime``encoding_tool``encoding``quicktime``description_long``synopsis``asf``albumartist``album_artist``asf``partofset``disc_number``asf``encodingsettings``encoding``vorbiscomment``encoder``encoding``vorbiscomment``albumartist``album_artist``vorbiscomment``discnumber``disc_number``vorbiscomment``compilation``is_compilation``vorbiscomment``tracknumber``track_number``matroska``disc``disc_number``matroska``part_number``track_number``matroska``date``year``matroska``compilation``is_compilation``matroska``encoder``encoding``ape``disc``disc_number``ape``compilation``is_compilation``ape``track``track_number``ape``date``year``ape``encoder``encoding`Testing
-------

[](#testing)

```
composer test
```

Tools
-----

[](#tools)

- [ffmpeg](https://ffmpeg.org/): free and open-source software project consisting of a suite of libraries and programs for handling video, audio, and other multimedia files and streams.
- [MP3TAG](https://www.mp3tag.de/en/): powerful and easy-to-use tool to edit metadata of audio files (free on Windows).
- [Audiobook Builder](https://www.splasm.com/audiobookbuilder/): makes it easy to turn audio CDs and files into audiobooks (only macOS and paid).
- [Tag Editor](https://github.com/Martchus/tageditor): A tag editor with Qt GUI and command-line interface supporting MP4/M4A/AAC (iTunes), ID3, Vorbis, Opus, FLAC and Matroska.
- [Tag Editor](https://amvidia.com/tag-editor): a spreadsheet application for editing audio metadata in a simple, fast, and flexible way.

FAQ
---

[](#faq)

### I have a specific metadata field in my audio files, what can I do?

[](#i-have-a-specific-metadata-field-in-my-audio-files-what-can-i-do)

In `Audio::class`, you have a property `raw_all` which contains all raw metadata, if `JamesHeinrich/getID3` support this field, you will find it in this property.

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');
$raw_all = $audio->getRawAll());

$custom = null;
$id3v2 = $raw_all['id3v2'] ?? [];

if ($id3v2) {
  $custom = $id3v2['custom'] ?? null;
}
```

If your field could be added to global properties of `Audio::class`, you could create an [an issue](https://github.com/kiwilan/php-audio/issues/new/choose).

### Metadata are `null`, what can I do?

[](#metadata-are-null-what-can-i-do)

You can check `extras` property to know if some metadata are available.

```
use Kiwilan\Audio\Audio;

$audio = Audio::read('path/to/audio.mp3');

$raw_all = $audio->getRawAll();
var_dump($raw_all);
```

If you find metadata which are not parsed by `Audio::class`, you can create [an issue](https://github.com/kiwilan/php-audio/issues/new/choose), otherwise `JamesHeinrich/getID3` doesn't support this metadata.z

### My favorite format is not supported, what can I do?

[](#my-favorite-format-is-not-supported-what-can-i-do)

You can create [an issue](https://github.com/kiwilan/php-audio/issues/new/choose) with the format name and a link to the format documentation. If `JamesHeinrich/getID3` support this format, I will add it to this package but if you want to contribute, you can create a pull request with the format implementation.

**Please give me an example file to test the format.**

### I have an issue with a supported format, what can I do?

[](#i-have-an-issue-with-a-supported-format-what-can-i-do)

You can create [an issue](https://github.com/kiwilan/php-audio/issues/new/choose) with informations.

### How to convert audio files?

[](#how-to-convert-audio-files)

This package doesn't provide a way to convert audio files, but you can use [ffmpeg](https://ffmpeg.org/) to convert audio files and [PHP-FFMpeg/PHP-FFMpeg](https://github.com/PHP-FFMpeg/PHP-FFMpeg).

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Credits
-------

[](#credits)

- [`ewilan-riviere`](https://github.com/ewilan-riviere): package author
- [`JamesHeinrich/getID3`](https://github.com/JamesHeinrich/getID3): parser used to read audio files
- [`spatie/package-skeleton-php`](https://github.com/spatie/package-skeleton-php): package skeleton used to create this package

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

[![](https://user-images.githubusercontent.com/48261459/201463225-0a5a084e-df15-4b11-b1d2-40fafd3555cf.svg)](https://github.com/kiwilan)

###  Health Score

50

—

FairBetter than 96% of packages

Maintenance74

Regular maintenance activity

Popularity34

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 89.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~49 days

Recently: every ~131 days

Total

19

Last Release

189d ago

Major Versions

0.3.0 → 1.0.02023-06-05

1.0.2 → 2.0.02023-06-08

2.0.0 → 3.0.02023-08-08

3.0.08 → 4.0.02024-10-03

### Community

Maintainers

![](https://www.gravatar.com/avatar/58eb34eac9af07c3352e83060e472e1c280838ebe0568692561c00a2cfde9e57?d=identicon)[ewilan-riviere](/maintainers/ewilan-riviere)

---

Top Contributors

[![ewilan-riviere](https://avatars.githubusercontent.com/u/48261459?v=4)](https://github.com/ewilan-riviere "ewilan-riviere (211 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (14 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (9 commits)")[![panVag](https://avatars.githubusercontent.com/u/68543979?v=4)](https://github.com/panVag "panVag (1 commits)")

---

Tags

audioaudiobookflacid3id3v1id3v2m4bmetadatamkvmp3mp4musicoggphpwavphpaudiomusicid3mp3id3v1id3v2mp4wavoggflacwmaaudiobookwebmttamkvopusalacm4vaifaifcaiffmkam4am4bspxwv

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/kiwilan-php-audio/health.svg)

```
[![Health](https://phpackages.com/badges/kiwilan-php-audio/health.svg)](https://phpackages.com/packages/kiwilan-php-audio)
```

###  Alternatives

[wapmorgan/media-file

A unified reader of metadata from audio &amp; video files

158232.7k3](/packages/wapmorgan-media-file)[wapmorgan/mp3info

The fastest php library to extract mp3 tags &amp; meta information.

1481.4M7](/packages/wapmorgan-mp3info)[danog/madelineproto

Async PHP client API for the telegram MTProto protocol.

3.4k855.0k18](/packages/danog-madelineproto)[buggedcom/phpvideotoolkit

PHPVideoToolkit is a set of classes aimed to provide a modular, object oriented and accessible interface for interacting with videos and audio through the FFmpeg program.

26382.1k1](/packages/buggedcom-phpvideotoolkit)[dereuromark/media-embed

A PHP library to deal with all those media services around, parsing their URLs and embedding their audio/video content in websites.

182530.3k11](/packages/dereuromark-media-embed)[duncan3dc/meta-audio

A library to read and write metadata tags to audio files

353.4k](/packages/duncan3dc-meta-audio)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
