All Projects → polyfloyd → rust-id3

polyfloyd / rust-id3

Licence: MIT license
A rust library for reading and writing ID3 metadata

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to rust-id3

dart-tags
ID3 Tag parser written on the pure dart language.
Stars: ✭ 35 (-78.26%)
Mutual labels:  metadata, id3v2, id3
audio-metadata
A library for reading and, in the future, writing audio metadata. https://audio-metadata.readthedocs.io/
Stars: ✭ 41 (-74.53%)
Mutual labels:  metadata, id3v2, id3
go-xmp
A native Go SDK for the Extensible Metadata Platform (XMP)
Stars: ✭ 36 (-77.64%)
Mutual labels:  metadata, id3
audio-tag-analyzer
Extracts metadata music metadata found in audio files
Stars: ✭ 18 (-88.82%)
Mutual labels:  metadata, id3
Mp3ID3Tagger
🎶🎵A macOS application to edit the ID3 tag of your mp3 files. Developed with RxSwift and RxCocoa. 🎸🎼
Stars: ✭ 17 (-89.44%)
Mutual labels:  id3v2, id3
replica
Replica, the id3 metadata cloner
Stars: ✭ 13 (-91.93%)
Mutual labels:  metadata, id3
Ytmdl
A simple app to get songs from YouTube in mp3 format with artist name, album name etc from sources like iTunes, Spotify, LastFM, Deezer, Gaana etc.
Stars: ✭ 2,070 (+1185.71%)
Mutual labels:  metadata, id3
laravel-getid3
A Laravel package to extract metadata from media files. mp3, aac, etc. It can be used with files stored on different disks such as local disk, S3 etc.
Stars: ✭ 50 (-68.94%)
Mutual labels:  id3v2, id3
mp3tag.js
MP3 tagging library written in pure JavaScript for Node.js and browsers
Stars: ✭ 39 (-75.78%)
Mutual labels:  id3v2, id3
torrent-spider
基于DHT的p2p网络资源爬虫
Stars: ✭ 65 (-59.63%)
Mutual labels:  metadata
LLVM-Metadata-Visualizer
LLVM Metadata Visualizer
Stars: ✭ 20 (-87.58%)
Mutual labels:  metadata
loudgain
ReplayGain 2.0 loudness normalizer based on the EBU R128/ITU BS.1770 standard (-18 LUFS, FLAC, Ogg, MP2, MP3, MP4, M4A, AAC, ALAC, Opus, ASF, WMA, WAV, AIFF, WavPack, APE)
Stars: ✭ 127 (-21.12%)
Mutual labels:  id3v2
qiqqa-open-source
The open-sourced version of the award-winning Qiqqa research management tool for Windows (a bleeding edge dev fork) ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ☞☞☞ File any issues you find in the main repo issue tracker at https://github.com/jimmejardine/qiqqa-open-source/issues
Stars: ✭ 32 (-80.12%)
Mutual labels:  metadata
langauge
🎨 Stylize your readme files with colorful gauges
Stars: ✭ 16 (-90.06%)
Mutual labels:  metadata
k8s-labeler
⚓️ Apply labels to Kubernetes pods on startup
Stars: ✭ 17 (-89.44%)
Mutual labels:  metadata
sp-metadata
🔬 SharePoint Metadata Tracker
Stars: ✭ 12 (-92.55%)
Mutual labels:  metadata
ghost-meta
Ghost meta allows you to store multiple meta values in a single meta record, with an API that mirrors the Metadata API. It integrates with ElasticPress to expand all ghost meta so Elasticsearch can query as normal meta too.
Stars: ✭ 18 (-88.82%)
Mutual labels:  metadata
Manga-Tagger
The only tool you'll need to rename and write metadata to your digital manga library
Stars: ✭ 110 (-31.68%)
Mutual labels:  metadata
dataspice
🌶️ Create lightweight schema.org descriptions of your datasets
Stars: ✭ 151 (-6.21%)
Mutual labels:  metadata
Valour
An open source chat client for freedom
Stars: ✭ 52 (-67.7%)
Mutual labels:  metadata

rust-id3

Build Status Crate Documentation

A library for reading and writing ID3 metadata.

Implemented Features

  • ID3v1 reading
  • ID3v2.2, ID3v2.3, ID3v2.4 reading/writing
  • MP3, WAV and AIFF files
  • Latin1, UTF16 and UTF8 encodings
  • Text frames
  • Extended Text frames
  • Link frames
  • Extended Link frames
  • Comment frames
  • Lyrics frames
  • Synchronised Lyrics frames
  • Picture frames
  • Encapsulated Object frames
  • Chapter frames
  • Unsynchronisation
  • Compression
  • MPEG Location Lookup Table frames
  • Tag and File Alter Preservation bits

Examples

Reading tag frames

use id3::{Tag, TagLike};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let tag = Tag::read_from_path("testdata/id3v24.id3")?;

    // Get a bunch of frames...
    if let Some(artist) = tag.artist() {
        println!("artist: {}", artist);
    }
    if let Some(title) = tag.title() {
        println!("title: {}", title);
    }
    if let Some(album) = tag.album() {
        println!("album: {}", album);
    }

    // Get frames before getting their content for more complex tags.
    if let Some(artist) = tag.get("TPE1").and_then(|frame| frame.content().text()) {
        println!("artist: {}", artist);
    }
    Ok(())
}

Modifying any existing tag.

use id3::{Error, ErrorKind, Tag, TagLike, Version};
use std::fs::copy;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    copy("testdata/quiet.mp3", "/tmp/music.mp3")?;

    let mut tag = match Tag::read_from_path("/tmp/music.mp3") {
        Ok(tag) => tag,
        Err(Error{kind: ErrorKind::NoTag, ..}) => Tag::new(),
        Err(err) => return Err(Box::new(err)),
    };

    tag.set_album("Fancy Album Title");

    tag.write_to_path("/tmp/music.mp3", Version::Id3v24)?;
    Ok(())
}

Creating a new tag, overwriting any old tag.

use id3::{Tag, TagLike, Frame, Version};
use id3::frame::Content;
use std::fs::copy;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    copy("testdata/quiet.mp3", "/tmp/music.mp3")?;

    let mut tag = Tag::new();
    tag.set_album("Fancy Album Title");

    // Set the album the hard way.
    tag.add_frame(Frame::text("TALB", "album"));

    tag.write_to_path("/tmp/music.mp3", Version::Id3v24)?;
    Ok(())
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].