Notable changes to this project based on the Keep a Changelog format. This project adheres to Semantic Versioning.
0.11.1 (2020-05-14)
- Attribute-style access for some
Tags
subclasses using field map aliases.
0.11.0 (2020-05-01)
ID3v2Disc
.ID3v2DiscFrame
.ID3v2Track
.ID3v2TrackFrame
.ID3v2TPROFrame
.- Support for ID3v2 Popularimeter frames.
ID3v2Popularimeter
.ID3v2PopularimeterFrame
.
ID3v2PodcastFrame
.- Support for Apple
GRP1
andTCAT
ID3v2 frames. ID3v2AudioEncryptionFrame
.- Support for ID3v2 play counter frames.
ID3v2PlayCounterFrame
.
- Support for ID3v2 recommended buffer frames.
ID3v2RecommendedBuffer
.ID3v2RecommendedBufferFrame
.
- Support for ID3v2 event timing codes frames.
ID3v2Event
.ID3v2Events
.ID3v2EventTypes
.ID3v2EventTimingCodesFrame
.
ID3v2NumberFrame
value is not the appropriate class (ID3v2Disc
orID3v2Track
) rather than having the number/total abstraction on the frame class itself.- Use a single enum for ID3v2 timestamp format.
- Remove
ID3v2LyricsTimestampFormat
. - Remove
ID3v2TempoTimestampFormat
.
- Remove
ID3v2LyricsTimestampFormat
.ID3v2TempoTimestampFormat
.
- Missing maxsplit argument in
ID3v2UniqueFileIdentiferFrame
parsing.
0.10.0 (2020-04-08)
WAVSubchunk
.audio_format
attribute toWAVEStreamInfo
.WAVEAudioFormat
enum.- Audio format extension data to
WAVEStreamInfo
. - Support for bitmap images.
- Properly support ID3v2 header flag differences between versions.
- Support for ID3v2 unsynchronization and frame flags.
encode_synchsafe_int
.
- 'WAV' -> 'WAVE' to match the name rather than extension.
- Refactor
WAVE.parse
.- Move subchunk parsing into separate method.
- Add
WAVESubchunk
.
- Keep unhandled WAVE subchunks.
- Store
ID3v2
inFLAC
in_id3
attribute. - Emit warning when ignoring ID3v2 frames with bad values.
- Ignore ID3v2 frames with no value.
- Catch and raise more exceptions when parsing ID3v2 frames.
- Raise exception when decoding too large synchsafe integer.
- Invalid duration calculation for
WAV
. - Properly handle invalid comment, involved people list, and TMCL frames
- Properly support ID3v2.2
PIC
frames. - Make
apply_unsynchronization
/remove_unsynchronization
functions fully comply with the ID3v2 unsynchronization scheme.
0.9.0 (2020-03-25)
Tag
.RIFFTag
.ID3v1Field
.ID3v1AlbumField
.ID3v1ArtistField
.ID3v1CommentField
.ID3v1GenreField
.ID3v1TitleField
.ID3v1TrackNumberField
.ID3v1YearField
.- `ID3v2InvolvedPeopleListFrame
as subclass of
ID3v2PeopleListFrame``. ID3v2TMCLFrame
as subclass ofID3v2PeopleListFrame
.FormatError
.TagError
.FLACVorbisComments
.- Support for ID3v2 unique file identifier frames.
ID3v2UniqueFileIdentifier
.ID3v2UniqueFileIdentifierFrame
.
- Support for ID3v2 synchronized tempo codes frames.
ID3v2TempoTimestampFormat
,ID3v2SynchronizedTempoCodes
.ID3v2SynchronizedTempoCodesFrame
.
- Support for multiple text strings in ID3v2 user text frames.
- Support for ID3v2
USER
frames.ID3v2TermsOfUse
.ID3v2USERFrame
.
- Support for ID3v2
GRID
frames.ID3v2GroupID
.ID3v2GRIDFrame
.
- Support for ID3v2
OWNE
frames.ID3v2OwnershipTransaction
.ID3v2OWNEFrame
.
- Rename
value
attribute ofID3v2GeneralEncapsulatedObject
toobject
. - Make
VorbisComment
subclassTag
. - Refactor ID3v1 to use tag classes.
ID3v1Field
.ID3v1AlbumField
.ID3v1ArtistField
.ID3v1CommentField
.ID3v1GenreField
.ID3v1TitleField
.ID3v1TrackNumberField
.ID3v1YearField
.
- Rename
ID3v2MappingListFrame
toID3v2PeopleListFrame
. - Use
ID3v2Frame
as base class for all ID3v2 frame classes. - Make
ID3v2Frame
subclassTag
. - Refactor ID3v2 frame parsing.
- Add
_parse_frame_header
helper method onID3v2Frame
. - Add
_parse_frame_data
helper method to all ID3v2 frame classes. ID3v2Frame.parse
calls into helper methods for appropriate subclass.
- Add
- Revise exceptions.
- Check for framing bit in Ogg Vorbis comments.
- Check for invalid characters in Vorbis comment field names.
- Rename some ID3v2 frame classes:
ID3v2GEOBFrame
->ID3v2GeneralEncapsulatedObjectFrame
.ID3v2TDATFrame
->ID3v2DateFrame
.ID3v2TIMEFrame
->ID3v2TimeFrame
.
- Refactor
FLAC.parse
.- Move metadata block parsing into separate method.
- Add
FormatError
exceptions where needed.
ID3v2BaseFrame
.InvalidBlock
.InvalidChunk
.InvalidComment
.InvalidFormat
.InvalidFrame
.InvalidHeader
.
ID3v2BinaryDataFrame
not inheriting fromID3v2BaseFrame
.- Support for ID3v2 frames with more than 2 values.
- ID3v2 genre frame parsing.
0.8.0 (2020-03-05)
- Support for ID3v2 involved people list frames.
ID3v2InvolvedPerson
.ID3v2MappingListFrame
.
ID3v2Comment
.- Ogg machinery.
Ogg
.OggPage
.OggPageHeader
.OggPageSegments
.
- Ogg Opus load(s) support.
OggOpus
.OggOpusStreaminfo
.OggOpusVorbisComments
.
AudioMetadataWarning
.ID3v2BinaryDataFrame
.- Support for MCDI ID3v2 frame.
- Finish support for ID3v2.4 timestamp frames.
TDEN
.TDOR
.TDRC
.TDRL
.TDTG
.
- Support for TMCL ID3v2.4 frame.
ID3v2Performer
.
- Ogg Vorbis load(s) support.
OggVorbis
.OggVorbisStreamInfo
.OggOpusVorbisComments
.
ID3v2GeneralEncapsulatedObject
.ID3v2PrivateInfo
.ID3v2UserURLLink
.ID3v2UserText
.ID3v2Lyrics
.ID3v2SynchronizedLyrics
.ID3v2UnsynchronizedLyrics
.ID3v2LyricsFrame
.ID3v2LyricsContentType
.ID3v2LyricsTimestampFormat
.ID3v2FrameAliases
.ID3v2FrameTypes
.
- Make all attrs classes require keyword arguments.
- Rework ID3v2 comments abstractions.
- Add
ID3v2Comment
class to encapsulate each comment. - Change
ID3v2CommentFrame
to have only value attribute that contains a single comment. - Change
ID3v2Frames
to present a list of comments forcomment
key.
- Add
- Rename
formats.vorbis
module toformats.vorbis_comments
. - Load most commonly used unoffical ID3v2 frames.
- Rename class builder methods to
parse
. - Rework ID3v2 general encapsulated object abstractions.
- Add
ID3v2GeneralEncapsulatedObject
class. - Change
ID3v2GEOBFrame
to have only value attribute that contains a single general encapsulated object. - Change
ID3v2Frames
to present a list of general encapsulated objects forGEOB
key.
- Add
- Rework ID3v2 private information frame abstractions.
- Add
ID3v2PrivateInfo
class. - Change
ID3v2PrivateFrame
to have only value attribute that contains a single private information object. - Change
ID3v2Frames
to present a list of private info objects forPRIV
key.
- Add
- Rework ID3v2 user URL link frame abstractions.
- Add
ID3v2UserURLLink
class. - Change
ID3v2UserURLLinkFrame
to have only value attribute that contains a single user URL link object. - Change
ID3v2Frames
to present a list of user URL link objects forWXXX
key.
- Add
- Rework ID3v2 user text frame abstractions.
- Add
ID3v2UserText
class. - Change
ID3v2UserTextFrame
to have only value attribute that contains a single user text object. - Change
ID3v2Frames
to present a list of user text objects forTXXX
key.
- Add
- Rework ID3v2 lyrics frames abstractions.
- Add
ID3v2Lyrics
,ID3v2SynchronizedLyrics
, andID3v2UnsynchronizedLyrics
classes. - Change
ID3v2SynchronizedLyricsFrame
andID3v2UnsynchronizedLyricsFrame
to have only value attribute that contains a single lyrics object. - Change
ID3v2Frames
to present a list of lyrics objects forSYLT
/USLT
keys.
- Add
- Move ID3v2 frame alias map out of
ID3v2Frames
. - Move ID3v2 frame type map out of
ID3v2Frame
.
- Move
DataReader
class anddatareader
decorator totbm-utils
.
- Apply CBR bitrate mode check to MP3s with non-LAME Xing headers.
- Properly determine UTF-16 encodings in ID3v2 frames.
0.7.0 (2020-02-17)
- ID3 version as attribute on
ID3v2Frames
. VorbisComment
.InvalidComment
exception.
- Set
FIELD_MAP
on instance rather than class inID3v2Frames.load
. - Convert
LAMEHeader.unwise_settings_used
to boolean. - Handle ID3 frames not valid for ID3 header version. Ignore them and emit a warning to the user.
- Move models module to top level.
vorbis.VorbisPicture
->flac.FLACPicture
.
RIFFTags
field values are now lists.- Regression with
MP3StreamInfo.find_mpeg_frames
caching.
0.6.0 (2019-10-18)
InvalidChunk
exception.- Support for VBRI headers in MP3.
LAMEEncodingFlags
.ID3v2Flags
.- ABR presets to
LAMEPreset
enum. InvalidBlock
exception.
- Refactor high-level API functions and
DataReader
to handle various inputs better, especially file-like objects. - Support 0-duration FLAC files.
- Raise proper exception if WAV stream info not found.
- Make LAMEReplayGain contain both track and album gains.
- Attributes are now:
peak, track_type, track_origin, track_adjustment, album_type, album_origin, album_adjustment
- LAMEHeader attributes from
album_gain, track_gain
toreplay_gain
.
- Attributes are now:
- Use MusicBrainz Picard tag mappings.
- RIFFTags loading.
It now expects
INFO
at start and raises an exception if not. - Use find_mp3_frames for all possible MP3 inputs in determine_format. This prevents some misidentification, specifically in the case of little-endian BOM of UTF-16-encoded text.
- Rename
XingTOC
toXingToC
. - Improve load(s) performance:
* Use
functools.lru_cache
to remove penalty of callingMP3Streaminfo.find_mpeg_frames
once when determining format of MP3s and again when loading the MP3. * Usebitstruct
C extension when available.
extension
parameter fromdetermine_format
. The purpose it served is no longer necessary.
- APEv2/ID3v1 searching for MP3 causing load failures in some cases.
0.5.0 (2019-07-22)
bit_depth
toWAVStreamInfo
.- Support for RIFF tags to WAV.
- Expose full ID2v2 object in MP3 instead of just the header.
- Use ID3v1.1 format instead of ID3v1.0.
determine_format
extension check:- Force lowercase comparison.
- Don't require period.
- Rename
VorbisComment
toVorbisComments
. - Improve MP3 frame detection.
- Actually check if a bytes-like object was given to
loads
.
0.4.0 (2019-01-31)
- Validation for
ID3v2NumberFrame
andID3v2NumericTextFrame
. ID3Version
enum.
- Use different field maps for different ID3v2 versions.
0.3.4 (2019-01-27)
TDAT
andTIME
frame validation to support multiple values.
0.3.3 (2019-01-26)
- Missing
encoding
argument todecode_bytestring
call.
0.3.2 (2019-01-26)
- Support for multiple values in ID3v2.4 text information frames.
- Support for
TDRC
andTDRL
frames.
0.3.1 (2019-01-16)
- Move
Tags
subclass__init__
methods toTags
class. This should have been the case from the beginning; I just didn't notice. This should have no effect to users except thatTags
can now be initialized like a dict itself.
0.3.0 (2019-01-15)
- ID3v1 support. ID3v1 is loaded from MP3s if, and only if, no ID3v2 header is found.
items
property toListMixin
.
- High memory usage spikes when loading some ID3 tags.
0.2.0 (2018-11-13)
- Add support for loading ID3v2.2 tags.
- Refactor
determine_format
.
- Loading MP3 files with less than 4 MPEG frames now works so long as there is a XING header.
- Various bugs with loading WAV files.
0.1.0 (2018-10-19)
- Initial release.