metadata_god 1.0.0 copy "metadata_god: ^1.0.0" to clipboard
metadata_god: ^1.0.0 copied to clipboard

Plugin for retrieving and writing audio tags/metadata from audio files

Metadata God #

A flutter plugin for retrieving and writing audio tags/metadata from audio files. It supports almost all kind of audio files

Supported Audio Formats #

File Format Metadata Format
mp3 id3v2.4
m4a, mp4 MPEG-4 audio metadata
flac Vorbis comment

Installation #

Run in terminal:

$ flutter pub add metadata_god

Requirements #

  • Make sure rustup is installed.

Support this project #

Configuration #

Android #

For using metadata_god in Android it needs READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions

So, add following green highlighted lines to android/app/src/main/AndroidManifest.xml file:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.example">

+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

  
  <application 
    android:label="Example"
    android:name="${applicationName}"
    android:icon="@mipmap/ic_launcher"
    android:usesCleartextTraffic="true"
+   android:requestLegacyExternalStorage="true"
  >
// .... rest of the file

Finally, use packages like permission_handler to request storage permissions from user if not granted already

// before calling any method of MetadataGod in android
// check if storage permission is granted or not
// if not, request for permission
  initState(){
    final hasStorageAccess = Platform.isAndroid ? await Permission.storage.isGranted : true
    if(!hasStorageAccess){
      await Permission.storage.request();
      if(!await Permission.storage.isGranted){
        return;
      }
    }
    // ... call all the metadata_god methods from here
  }

Following configuration would work with file path that are allowed explicitly by android. If you want entire storage access you'll need MANAGE_EXTERNAL_STORAGE permission and request the user to enable access to entire storage in app info settings.

Other platforms #

Linux, Windows and MacOS doesn't need any extra configuration and good to go after installation

Usage #

import 'package:flutter/material.dart';
import 'package:mime/mime.dart';
import 'package:metadata_god/metadata_god.dart';

// Initialize the plugin
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await MetadataGod.initialize();
  runApp(const MyApp());
}

// Get metadata from file
Metadata metadata = await MetadataGod.getMetadata("/path/to/audio-file");

// Set metadata to file
await MetadataGod.writeMetadata(
  "/path/to/audio-file",
  Metadata(
    title: "Leave the Door Open",
    artist: "Bruno Mars, Anderson .Paak, Silk Sonic",
    album: "An Evening with Silk Sonic",
    genre: "R&B, Soul",
    year: 2021,
    albumArtist: "Bruno Mars, Anderson .Paak",
    trackNumber: 1,
    trackTotal: 12,
    discNumber: 1,
    discTotal: 5,
    durationMs: 248000,
    fileSize: file.lengthSync(),
    picture: Picture(
      data: File("/path/to/cover-image").readAsBytesSync(),
      mimeType: lookupMimeType("/path/to/cover-image"),
    ),
  ),
);

Contributing #

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License #

MIT

Author #

Kingkor Roy Tirtho

27
likes
80
points
688
downloads

Publisher

verified publisherkrtirtho.dev

Weekly Downloads

Plugin for retrieving and writing audio tags/metadata from audio files

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

ffi, flutter, flutter_rust_bridge, meta, uuid

More

Packages that depend on metadata_god