Skip to content

v0.2.0

Choose a tag to compare

@decriptor decriptor released this 29 Dec 19:14
· 96 commits to main since this release

What's New in v0.2.0

This release significantly expands format support and adds critical features for professional audio workflows.

🎵 ID3v2.2 Legacy Support

  • Full ID3v2.2 (3-character frame ID) parsing support
  • Complete v2.2 → v2.3/v2.4 frame ID mapping (66 mappings)
  • Proper 3-byte big-endian size handling for v2.2 frames

🔄 ID3v2 Unsynchronization

  • Global unsynchronization support (tag-level, v2.3/v2.4)
  • Per-frame unsynchronization support (v2.4 frame flag)
  • Proper 0xFF 0x00 byte sequence removal during parsing

🏷️ ID3v2 Frame Flags Processing

  • Compression support with zlib decompression (v2.3 and v2.4)
  • Grouping identity flag handling
  • Data length indicator parsing (v2.4 syncsafe 4-byte prefix)
  • Encryption flag detection

🔐 FLAC MD5 Audio Signature

  • FlacFile.AudioMd5Signature property for 128-bit MD5 hash of unencoded audio
  • FlacFile.AudioMd5SignatureHex for hex string representation
  • Essential for bit-perfect archive verification

🖼️ Picture Support for WAV and AIFF

  • WavFile.Pictures and AiffFile.Pictures via embedded ID3v2 tag
  • CoverArt convenience property for primary album art
  • Full PictureType support (FrontCover, BackCover, etc.)

💾 SaveToFile Convenience Overloads

  • SaveToFile(path) on Mp3File, FlacFile, OggVorbisFile, WavFile, AiffFile
  • All with async variants accepting CancellationToken

✍️ AIFF Write Support

  • AiffFile.Render for serializing AIFF files to binary data
  • AiffFile.SaveToFile and SaveToFileAsync for atomic file saves
  • Settable Tag property for modifying ID3v2 metadata

📦 Metadata Preservation

  • FLAC: Preserve SEEKTABLE and APPLICATION blocks during render
  • WAV: Preserve all unknown chunks (fact, cue, smpl, etc.) during render

🎚️ AIFC Compression Support

  • AiffAudioProperties.CompressionType for AIFC compression type
  • AiffAudioProperties.CompressionName for human-readable description

📻 BWF (Broadcast Wave Format) Support

  • BextTag class for parsing and writing bext chunks
  • Description, Originator, OriginatorReference fields
  • TimeReference for sample-accurate synchronization
  • UMID for Version 1+ and CodingHistory tracking

🔊 WAVEFORMATEXTENSIBLE Support

  • Extended fmt chunk parsing for professional audio
  • ValidBitsPerSample, ChannelMask, SubFormat properties
  • 5.1, 7.1 surround sound speaker position support

✅ Ogg CRC Validation

  • Optional validateCrc parameter on OggVorbisFile read methods
  • Useful for detecting file corruption in critical applications

🛡️ Security

  • Integer overflow protection for malformed chunk sizes
  • Defense-in-depth checks in AIFF, RIFF, and WAV parsers

📊 Quality

  • Test count increased from 1528 to 1658 (+130 tests)

Full Changelog: v0.1.0...v0.2.0