flutter_audio_tagger 5.1.3 copy "flutter_audio_tagger: ^5.1.3" to clipboard
flutter_audio_tagger: ^5.1.3 copied to clipboard

PlatformAndroid

A Flutter plugin for reading and editing audio file metadata (tags) with support for multiple audio formats.

flutter_audio_tagger #

A Flutter plugin for reading and editing audio file metadata (ID3 tags) on Android. The plugin reads tag data from audio files and returns edited files as raw bytes (Uint8List), giving your app full control over where and how the resulting file is saved.

pub package

Platform Support #

Platform Supported
Android Yes
iOS No
Web No
Desktop No

Features #

  • Read all metadata tags from an audio file, including artwork
  • Read metadata tags only (without artwork)
  • Read artwork only
  • Edit metadata tags (without touching artwork)
  • Edit artwork only
  • Edit metadata tags and artwork together in a single call
  • Returns the complete modified audio file as bytes (Uint8List) along with the file extension, so your app decides where to write it

Supported Audio Formats #

MP3, MP4/M4A/M4P, OGG Vorbis, FLAC, WAV, AIF, DSF, WMA.

Supported Metadata Fields #

Field Description
artist Artist name
title Track title
album Album name
year Release year
genre Music genre
language Language of the track
composer Composer name
country Country of origin
quality Audio quality descriptor
lyrics Song lyrics
artwork Album cover image bytes

Installation #

Add the dependency to your pubspec.yaml:

dependencies:
  flutter_audio_tagger: ^5.1.1

Android Configuration #

In your android/app/build.gradle, disable minification and resource shrinking for the release build:

buildTypes {
    release {
        minifyEnabled false
        shrinkResources false
    }
}

API Overview #

import 'package:flutter_audio_tagger/flutter_audio_tagger.dart';
import 'package:flutter_audio_tagger/tag.dart';
import 'package:flutter_audio_tagger/audiofiledata.dart';

final tagger = FlutterAudioTagger();

Reading #

Method Returns Description
getAllTags(String path) Future<Tag?> All metadata fields including artwork
getTags(String path) Future<Map?> Metadata fields only (no artwork)
getArtWork(String path) Future<Uint8List?> Artwork bytes only

Editing #

All editing methods return Future<AudioFileData>. The AudioFileData object contains:

  • musicData (Uint8List) -- the full modified audio file as bytes
  • fileExtension (String) -- the original file extension (e.g. mp3, flac)
Method Description
editTags(Tag tag, String path) Edit metadata only (no artwork)
setArtWork(Uint8List? imageData, String path) Edit artwork only
editTagsAndArtwork(Tag tag, String path) Edit both metadata and artwork

Usage #

Reading metadata #

// Read all tags including artwork
Tag? tag = await tagger.getAllTags('/path/to/file.mp3');
print(tag?.artist);
print(tag?.title);

// Read tags without artwork
Map<dynamic, dynamic>? tags = await tagger.getTags('/path/to/file.mp3');

// Read artwork only
Uint8List? artwork = await tagger.getArtWork('/path/to/file.mp3');

Editing metadata #

Always pass a Tag object, even when updating a single field.

  • Set a field to null to leave it unchanged.
  • Set a field to an empty string "" to clear it.
  • Set a field to a value to update it.
Tag updatedTag = Tag(
  artist: 'New Artist',
  title: 'New Title',
  album: null,           // unchanged
  year: '2025',
  genre: '',             // cleared
  language: null,
  composer: null,
  country: null,
  quality: null,
  lyrics: 'New lyrics',
  artwork: null,         // not used by editTags; pass artwork to editTagsAndArtwork
);

AudioFileData result = await tagger.editTags(updatedTag, '/path/to/file.mp3');

Editing artwork #

import 'dart:io';

File imageFile = File('/path/to/cover.jpg');
Uint8List imageData = await imageFile.readAsBytes();

// Set artwork only
AudioFileData result = await tagger.setArtWork(imageData, '/path/to/file.mp3');

Editing tags and artwork together #

Tag tagWithArtwork = Tag(
  artist: 'Artist',
  title: 'Title',
  album: 'Album',
  year: '2025',
  genre: 'Pop',
  language: null,
  composer: null,
  country: null,
  quality: null,
  lyrics: null,
  artwork: imageData,
);

AudioFileData result = await tagger.editTagsAndArtwork(tagWithArtwork, '/path/to/file.mp3');

Saving the edited file #

Every editing method returns an AudioFileData object. The plugin does not write the file to disk. Your app receives the raw bytes and is responsible for saving them. Use dart:io to write the bytes to any path your app has access to.

import 'dart:io';

// Edit tags
AudioFileData editedFile = await tagger.editTags(updatedTag, originalFilePath);

// Write the bytes to a file
String savePath = '/storage/emulated/0/Download/edited.${editedFile.fileExtension}';
File outputFile = File(savePath);
await outputFile.writeAsBytes(editedFile.musicData);

You can save to any writable location: the app's documents directory, the downloads folder, an external storage path, or overwrite the original file. The fileExtension field tells you the format of the audio data so you can construct the correct filename.

import 'package:path_provider/path_provider.dart';

// Save to app documents directory
Directory appDir = await getApplicationDocumentsDirectory();
String fileName = 'my_song.${editedFile.fileExtension}';
File file = File('${appDir.path}/$fileName');
await file.writeAsBytes(editedFile.musicData);

// Or overwrite the original file
File original = File(originalFilePath);
await original.writeAsBytes(editedFile.musicData);

License #

MIT License. See the LICENSE file for details.

5
likes
150
points
278
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for reading and editing audio file metadata (tags) with support for multiple audio formats.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on flutter_audio_tagger

Packages that implement flutter_audio_tagger