Flutter音频文件ID3标签读取插件id3tag的使用

Flutter音频文件ID3标签读取插件id3tag的使用

ID3Tag简介

ID3Tag 是一个用于从MP3文件和其他类型媒体文件中读取常见ID3元数据的小型库。虽然已经有许多类似的库,但在创建此库时,其他库在以下三个关键领域缺乏支持:

  • 读取 章节CHAP)和 目录CTOC)帧
  • 不需要将整个文件加载到内存中即可读取ID3元数据
  • 易于扩展以实现对其他帧类型的支持

因此,上述列表是创建此库的基本动机。此外,支持MP3有声读物的具体用例(如章节和大文件大小的支持)也是另一个推动因素。

功能特性

  • 支持 ID3 v2.3 及以上版本
  • 支持常见的 ID3 帧类型,包括:
    • 文本信息帧
    • 章节帧(CHAP
    • 目录帧(CTOC
    • 附加图片帧(APIC
    • 评论帧(COMM

使用方法

要使用此插件,首先需要在 pubspec.yaml 文件中添加依赖项,然后导入包并使用 ID3TagReader 类来读取文件中的 ID3 标签。

示例代码

以下是一个完整的示例代码,展示了如何使用 id3tag 插件读取音频文件的 ID3 标签信息:

// ignore_for_file: avoid_print
import 'package:id3tag/id3tag.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'dart:typed_data';

void main() async {
  // 从资产资源中加载文件
  final ByteData fileData = await rootBundle.load('assets/audio.mp3');
  final Directory tempDir = await getTemporaryDirectory();
  final String filePath = '${tempDir.path}/audio.mp3';
  File(filePath).writeAsBytesSync(fileData.buffer.asUint8List(fileData.offsetInBytes, fileData.lengthInBytes));

  // 创建 ID3TagReader 实例
  final parser = ID3TagReader.path(filePath);
  final tag = parser.readTagSync();

  // 打印 ID3 标签信息
  print('ID3 tag found: ${tag.tagFound} - version: ${tag.tagVersion}');
  print('Title: ${tag.title}');
  print('Duration: ${tag.duration}');
  print('Chapters: ${tag.chapters}');
  print('Top Level Chapters: ${tag.topLevelChapters}');
  print('Comments: ${tag.comments}');
  
  // 如果存在 APIC 帧(封面图片),可以保存图片
  if (tag.apicFrames.isNotEmpty) {
    final apicFrame = tag.apicFrames.first;
    final imageFile = File('${tempDir.path}/cover.${apicFrame.format}');
    await imageFile.writeAsBytes(apicFrame.data);
    print('Cover image saved to: ${imageFile.path}');
  }
}

更多关于Flutter音频文件ID3标签读取插件id3tag的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,下面是一个使用Flutter中的id3tag插件来读取音频文件ID3标签的示例代码。id3tag插件允许你访问音频文件的元数据,比如标题、艺术家、专辑等。

首先,确保你的Flutter项目中已经添加了id3tag依赖。在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  id3tag: ^0.1.0  # 请检查最新版本号并替换

然后运行flutter pub get来安装依赖。

接下来是一个完整的示例代码,展示如何使用id3tag插件读取音频文件的ID3标签信息:

import 'package:flutter/material.dart';
import 'package:id3tag/id3tag.dart';
import 'dart:io';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  File? audioFile;
  Map<String, String>? id3Tags;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ID3 Tag Reader'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              TextButton(
                onPressed: _pickAudioFile,
                child: Text('Pick Audio File'),
              ),
              SizedBox(height: 20),
              if (audioFile != null)
                Text('Selected Audio File: ${audioFile!.path}'),
              if (id3Tags != null)
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    SizedBox(height: 20),
                    Text('ID3 Tags:', style: TextStyle(fontWeight: FontWeight.bold)),
                    ...id3Tags!.entries.map((entry) {
                      return Text('${entry.key}: ${entry.value}');
                    }).toList(),
                  ],
                ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> _pickAudioFile() async {
    FilePickerResult? result = await FilePicker.platform.pickFiles(
      type: FileType.audio,
    );

    if (result != null && result.files.isNotEmpty) {
      File file = File(result.files.first.path!);
      setState(() {
        audioFile = file;
        _readId3Tags(file);
      });
    }
  }

  Future<void> _readId3Tags(File file) async {
    try {
      Id3Tag id3Tag = await Id3Tag.fromFile(file);
      Map<String, String> tags = {
        'title': id3Tag.title ?? '',
        'artist': id3Tag.artist ?? '',
        'album': id3Tag.album ?? '',
        'year': id3Tag.year?.toString() ?? '',
        'genre': id3Tag.genre ?? '',
        // 根据需要添加更多标签
      };
      setState(() {
        id3Tags = tags;
      });
    } catch (e) {
      print('Error reading ID3 tags: $e');
      // 可以在这里处理错误,比如显示Snackbar给用户
    }
  }
}

注意

  1. 这个示例代码使用了file_picker插件来选择音频文件。你需要在pubspec.yaml中添加file_picker依赖,并运行flutter pub get
  2. id3tag插件可能不支持所有ID3标签版本和所有标签类型,所以你可能需要根据具体需求调整代码。
  3. 确保处理文件选择和读取过程中的潜在错误,比如文件不存在或文件不是有效的音频文件。
dependencies:
  file_picker: ^4.3.3  # 请检查最新版本号并替换

这个示例代码提供了一个基本的框架,展示了如何使用id3tag插件读取音频文件的ID3标签。你可以根据实际需求进一步扩展和完善。

回到顶部