Flutter ID3标签解析插件zooper_flutter_id3的使用

Flutter ID3标签解析插件zooper_flutter_id3的使用

zooper_flutter_id3 是用Dart编写的最佳ID3标签读写库。据我所知,这也是唯一支持ID3版本1.0、1.1、2.2、2.3和2.4的库。

注意 此包目前处于Alpha阶段。尽管它应该按预期工作,但我们建议保留您的原始文件并检查写入的文件是否格式正确。

注意 并非所有帧都已支持,但它们将以读取时的方式写入,因此不会丢失数据。如果您希望支持特定帧,请提交Pull请求或提出问题 [这里]。

Zooper

zooper 家族是一系列用Dart/Flutter和C#编写的有用的开源包,包含辅助类和对其他库的包装。 您可以查看其他包 [这里]。

开始使用

在您的 pubspec.yaml 文件中添加以下行:

zooper_flutter_id3: <latest>

并在您的 Dart 类中导入:

import 'package:zooper_flutter_id3/zooper_flutter_id3.dart';

使用方法

解码

ZooperAudioFile 在读取后存储Id3v2和Id3v1标签,还包括音频数据本身。 您可以读取一个文件(您需要自行检查文件的兼容性)如下所示:

final file = File(filePath);
final bytes = await file.readAsBytes();

final audioFile = ZooperAudioFile.decode(bytes);

读取帧

读取文件后,您可以轻松访问帧:

final frame = audioFile.id3v2?.getFrameByNameOrNull(FrameName.track);

但这不是检索数据的推荐方式。此包以模型为导向开发。 这意味着每个帧都有一个模型,您可以获取和编辑这些模型。 例如:

var frameContent = audioFile.id3v2?.getContentGroupDescriptionModel();
frameContent?.value = 'Hello World';

添加帧

要添加新帧,有一个辅助方法:

// 添加新帧
audioFile.id3v2?.addFrame(frame);

这假定您已经创建了一个帧。请注意正确连接帧头与帧内容, 否则将导致文件损坏。 更好的方法是使用辅助方法:

// 如果可能,添加新艺术家帧
audioFile.id3v2?.addArtist('This is an artist test');

删除帧

// 删除特定帧
audioFile.id3v2?.deleteFrame(frame);

// 删除具有给定标识符的所有帧
audioFile.id3v2?.deleteFramesByName(FrameName.title);

更多关于Flutter ID3标签解析插件zooper_flutter_id3的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter ID3标签解析插件zooper_flutter_id3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


zooper_flutter_id3 是一个用于解析音频文件中的 ID3 标签的 Flutter 插件。ID3 标签通常包含音频文件的元数据,如标题、艺术家、专辑、年份等信息。通过这个插件,你可以轻松地读取这些信息并在 Flutter 应用中使用。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 zooper_flutter_id3 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  zooper_flutter_id3: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用插件

以下是一个简单的示例,展示如何使用 zooper_flutter_id3 插件来解析音频文件的 ID3 标签。

import 'package:flutter/material.dart';
import 'package:zooper_flutter_id3/zooper_flutter_id3.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ID3ParserScreen(),
    );
  }
}

class ID3ParserScreen extends StatefulWidget {
  [@override](/user/override)
  _ID3ParserScreenState createState() => _ID3ParserScreenState();
}

class _ID3ParserScreenState extends State<ID3ParserScreen> {
  ID3Tag? id3Tag;

  Future<void> parseID3() async {
    // 替换为你的音频文件路径
    String filePath = 'path/to/your/audio/file.mp3';

    try {
      ID3Tag tag = await ZooperFlutterId3.parse(filePath);
      setState(() {
        id3Tag = tag;
      });
    } catch (e) {
      print('Error parsing ID3 tag: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ID3 Tag Parser'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (id3Tag != null)
              Column(
                children: [
                  Text('Title: ${id3Tag!.title}'),
                  Text('Artist: ${id3Tag!.artist}'),
                  Text('Album: ${id3Tag!.album}'),
                  Text('Year: ${id3Tag!.year}'),
                  Text('Track: ${id3Tag!.track}'),
                  Text('Genre: ${id3Tag!.genre}'),
                ],
              ),
            ElevatedButton(
              onPressed: parseID3,
              child: Text('Parse ID3 Tag'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部