Crate lofty[][src]

Expand description

GitHub Workflow Status Downloads Version

This is a fork of Audiotags, adding support for more file types and (optionally) duration.

Parse, convert, and write metadata to audio files of different file types.

This crate aims to provide a unified trait for parsers and writers of different audio file formats. Without this crate, you would otherwise need to learn the different APIs in id3, mp4ameta, etc. in order to parse metadata in different file formats.

Supported Formats

File FormatExtensionsReadWriteDurationMetadata Format(s)
ApeapeXXAPEv2
AIFFaiff, aifXXID3v2
FLACflacXXVorbis Comments
MP3mp3XXXID3v2
MP4mp4, m4a, m4b, m4p, m4v, isomXXVorbis Comments
OpusopusXXVorbis Comments
Oggogg, ogaXXVorbis Comments
WAVwav, waveXXRIFF INFO, ID3v2

Examples

use lofty::{Tag, TagType};

// Guess the format from the extension, in this case `mp3`
let mut tag = Tag::new().read_from_path("tests/assets/a.mp3").unwrap();
tag.set_title("Foo");

// You can also guess the format from the file signature
let mut tag_sig = Tag::new().read_from_path_signature("tests/assets/a.wav").unwrap();
tag_sig.set_artist("Foo artist");

// You can convert the tag type and save the metadata to another file.
tag.to_dyn_tag(TagType::Mp4).write_to_path("tests/assets/a.m4a");

// You can specify the tag type, but when you want to do this
// also consider directly using the concrete type
let tag = Tag::new().with_tag_type(TagType::Mp4).read_from_path("tests/assets/a.m4a").unwrap();
assert_eq!(tag.title(), Some("Foo"));

Features

By default, full (all_tags and duration) are enabled.

all_tags provides all tag types (ID3, RIFF, Vorbis, etc).

duration provides the duration field in each tag (ex. Tag.duration).

Either one can be disabled if it doesn’t fit your use case.

In addition to this, each format can be individually enabled. All features are: ape, flac, id3, mp4, opus, vorbis, riff.

Performance

Using lofty incurs a little overhead due to vtables if you want to guess the metadata format (from file extension). Apart from this, the performance is almost the same as directly calling the function provided from those ‘specialized’ crates.

No copies will be made if you only need to read and write metadata of one format. If you want to convert between tags, copying is unavoidable, no matter if you use lofty or use getters and setters provided by specialized libraries. Lofty is not making additional unnecessary copies.

Macros

convert

Convert a concrete tag type into another

Structs

Album

A struct for representing an album for convenience.

AnyTag

Used to convert between tags

Picture

Represents a picture, with its data and mime type.

Tag

A builder for Box<dyn AudioTag>. If you do not want a trait object, you can use individual types.

Enums

Error

Errors that could occur within Lofty.

Id3Format

ID3 tag’s underlying format

MimeType

Mime types for covers.

PictureType

The picture type

TagType

The tag type, based on the file extension.

VorbisFormat

File formats using vorbis comments

Traits

AudioTag

Combination of AudioTagEdit, AudioTagWrite, and ToAnyTag

AudioTagEdit

Implementors of this trait are able to read and write audio metadata.

AudioTagWrite

Functions for writing to a file

ToAny

Tag conversion to Any

ToAnyTag

Conversions between tag types

Type Definitions

Result

Type for the result of tag operations.