This library allow you to read and write ID3 tags to MP3 files.
Library actually works only on Android.
dependencies:
audiotagger: ^2.0.0
Audiotagger need access to read and write storage.
To do this you can use Permission Handler library.
Initialize a new instance of the tagger;
final tagger = new Audiotagger();
You can get a Map
of the ID3 tags.
void getTagsAsMap() async {
final String filePath = "/storage/emulated/0/file.mp3";
final Map map = await tagger.readTagsAsMap(
path: filePath
);
}
This method does not read the artwork of the song. To do this, use the readArtwork
method.
The map has this schema:Tag schema.
You can get a Tag
object of the ID3 tags.
void getTags() async {
final String filePath = "/storage/emulated/0/file.mp3";
final Tag tag = await tagger.readTags(
path: filePath
);
}
This method does not read the artwork of the song. To do this, use the readArtwork
method.
The Tag
object has this schema: Tag schema.
To get the artwork of the song, use this method.
void getArtwork() async {
final String filePath = "/storage/emulated/0/file.mp3";
final Uint8List bytes = await tagger.readArtwork(
path: filePath
);
}
It return a Uint8List
of the bytes of the artwork.
You can write the ID3 tags from a Map
.
To reset a field, pass an empty string (""
).
If the value is null
, the field will be ignored and it will not be written.
void setTagsFromMap() async {
final path = "storage/emulated/0/Music/test.mp3";
final tags = <String, String>{
"title": "Title of the song",
"artist": "A fake artist",
"album": "", //This field will be reset
"genre": null, //This field will not be written
};
final result = await tagger.writeTagsFromMap(
path: path,
tags: tags
);
}
The map has this schema:Tag schema.
You can write the ID3 tags from a Tag
object.
To reset a field, pass an empty string (""
).
If the value is null
, the field will be ignored and it will not be written.
void setTags() async {
final path = "storage/emulated/0/Music/test.mp3";
final tag = Tag(
title: "Title of the song",
artist: "A fake artist",
album: "", //This field will be reset
genre: null, //This field will not be written
);
final result = await tagger.writeTags(
path: path,
tag: tag,
);
}
The Tag
object has this schema: Tag schema.
You can write a single tag field by specifying the field name.
To reset the field, pass an empty string (""
).
If the value is null
, the field will be ignored and it will not be written. \
void setTags() async {
final path = "storage/emulated/0/Music/test.mp3";
final result = await tagger.writeTag(
path: path,
tagField: "title",
value: "Title of the song"
);
}
Refer to map of tags for fields name.
These are the schemes of the Map
asked and returned by Audiotagger and of the Tag
class.
<String, String>{
"title": value,
"artist": value,
"genre": value,
"trackNumber": value,
"trackTotal": value,
"discNumber": value,
"discTotal": value,
"lyrics": value,
"comment": value,
"album": value,
"albumArtist": value,
"year": value,
"artwork": value, // Null if obtained from readTags or readTagsAsMap
};
String title;
String artist;
String genre;
String trackNumber;
String trackTotal;
String discNumber;
String discTotal;
String lyrics;
String comment;
String album;
String albumArtist;
String year;
String artwork; // It represents the file path of the song artwork.
This library is developed and maintained by Nicolò Rebaioli
🌐 My website
📫 [email protected]
Released under MIT license
Copyright 2019 Nicolò Rebaioli