11.42.0 - 2018-12-26 2------------------- 3 4* ID3: Always read id3v1 tags and include them when no id3v2 equivalent 5 exists. Can be disabled with the new ``load_v1`` option, 6 see :meth:`id3.ID3.load` 7 :pr:`357` (:user:`Fredrik Strupe <frestr>`) 8* ID3: Add a pretty print implementation for SYLT 9 :pr:`359` (:user:`Hamid Alaei Varnosfaderani <halaei>`) 10* vorbis: Improved error messages when validating keys/values 11 :pr:`356` (:user:`Michael Booth <MJuddBooth>`) 12* Fix pylint warnings when using the various ``save()`` methods :pr:`364` 13 14 151.41.1 - 2018-08-11 16------------------- 17 18* MP4: fix rtng, stik, shwm getting saved as 16bit ints instead of 8bit :bug:`349` 19 20 211.41.0 - 2018-07-15 22------------------- 23 24* Documentation fixes :pr:`342` (:user:`Jakub Wilk <jwilk>`) 25* mid3v2: Add support for WXXX frames :bug:`344` :bug:`348` 26* Fix decoding of track_peak from MP3 Info Tag :pr:`345` 27 (:user:`Anton Yuzhaninov <citrin>`) 28* MonkeysAudio: set bits_per_sample for older files :bug:`347` 29 30 311.40.0 - 2018-01-25 32------------------- 33 34* APEv2: Ensures tags are saved in a deterministic way :pr:`329` 35 (:user:`cushy007`) 36* Restore WinXP support for the CLI tools :bug:`332` 37* easymp4: Fix EasyMP4.add_tags() when no tags exist :bug:`334` 38* id3: Fix PyCharm not being able to resolve id3 frame class references 39 :bug:`336` 40* Support pathlib.Path objects for paths (PEP 519) :bug:`337` :pr:`338` 41 (:user:`Andrew Rabert <nvllsvm>`) 42* Use semver for versioning 43 44 451.39 - 2017-11-05 46----------------- 47 48* Tests: 49 50 * Require `hypothesis <https://hypothesis.readthedocs.io>`__ 51 * Run pycodestyle/pyflakes tests by default. Skip with ``--no-quality`` or 52 ``-m no quality`` when using pytest directly. 53 54* Python 3.3 is no longer supported 55* MP3: Improved bitrate accuracy for files with XING header :bug:`328` 56 (thanks :user:`Michaël Defferrard <mdeff>`) 57* ASF: Fix case where some tags resulted in broken ASFUnicodeAttribute 58 instances :bug:`324` 59* Add support for filesystems which don't support opening files read/write 60 (gvfs over fuse for example) :bug:`300` 61* mid3v2: Add support for USLT :bug:`306` 62* Minor improvements by :user:`Borewit` and 63 :user:`Evan Purkhiser <EvanPurkhiser>` 64 65 661.38 - 2017-06-01 67----------------- 68 69* Note: New release tarballs are now hosted on github: 70 https://github.com/quodlibet/mutagen/releases 71* ID3: 72 73 * Add iTunes grouping frame `id3.GRP1` :bug:`304` 74 * Fix exposing text frames where the text can't be encoded with the 75 reported encoding due to merging of frames :bug:`307` 76 77* OGG: Fix wrong StreamInfo.length (small negative value) for all 78 ogg based formats in rare cases. :bug:`308` 79 80 811.37 - 2017.02.24 82----------------- 83 84* Relicense "GPLv2" → "GPLv2 or later" :bug:`291` 85* DSF: add `mutagen.dsf` module for DSF (DSD Stream File) support 86 :pr:`283` (Boris Pruessmann) 87* MP3: Add `mp3.MPEGInfo.encoder_settings` containing a guess of the encoder 88 settings used, for example ``"-V2"`` for LAME :bug:`66` 89* ID3: add iTunes movement related frames `id3.MVIN` and `id3.MVNM` 90* MP4: support ``©mvi``, ``©mvc``, ``shwm``, ``stik``, ``rtng``, ``tves``, 91 ``tvsn``, ``plID``, ``cnID``, ``geID``, ``atID``, ``sfID``, ``cmID``, 92 ``akID`` :bug:`130` 93 94 951.36.3 - 2017.02.24 96------------------- 97 98* MP3: fix error with xing frames without a frame count :bug:`292` 99 100 1011.36.2 - 2017.01.25 102------------------- 103 104* ID3: Always write little endian utf-16 with BOM. 105 Fixes tests on big endian machines :pr:`289` 106 107 1081.36.1 - 2017.01.22 109------------------- 110 111* Support GAE runtime :bug:`286` 112* FLAC: Fix crash when loading files with zero samples :bug:`287` 113* MP3: Handle broken lame tags written by older lame versions 114 115 1161.36 - 2016.12.22 117----------------- 118 119* ID3: Ignore trailing empty values for v2.3 text frames :bug:`276` 120* ID3: Write large APIC frames last :bug:`278` 121* EasyID3: support saving as v2.3 :bug:`188` 122* FLAC: Add StreamInfo.bitrate :bug:`279` 123* mid3cp: Add ``--merge`` option :bug:`277` 124* MP4: Allow loading files without audio tracks :bug:`272` 125 126 1271.35.1 - 2016.11.09 128------------------- 129 130* Revert back to distutils :bug:`273` 131 132 1331.35 - 2016.11.02 134----------------- 135 136* Tests: Require pytest 137* Tools: Install .exe launchers on Windows 138* setup.py: Require setuptools 139* ID3: 140 141 * Fix loading files with CRM frames :bug:`239` 142 * Fix loading AENC, LINK, GRID frames with no payload 143 * Merge duplicate text frames with same key on load :bug:`172` 144 * Allow parsing of duplicate APIC frames :bug:`172` 145 * Parse utf-16 text fields with missing BOM :bug:`267` 146 * Increase max resyncs for the mpeg frame search :bug:`268` 147 148 1491.34.1 - 2016.08.13 150------------------- 151 152* ID3: Expose some internals again to make Picard (mostly) work again. 153 154 * http://tickets.musicbrainz.org/browse/PICARD-833 155 * https://github.com/metabrainz/picard/pull/479 156 157 1581.34 - 2016.07.20 159----------------- 160 161* ID3: 162 163 * Add `CTOC <id3.CTOC>` and `CHAP <id3.CHAP>` frames. New classes: 164 `ID3Tags <id3.ID3Tags>`, `CTOCFlags <id3.CTOCFlags>`. :bug:`6` 165 * Add `TCAT <id3.TCAT>`, `TKWD <id3.TKWD>`, `PCST <id3.PCST>` frames. 166 :bug:`249` 167 * Validate user provided LNK/LINK frameid. :bug:`242` 168 * Add `RVAD <id3.RVAD>`, RVA frames 169 * Add TST, TSA, TS2, TSP and TSC frames 170 * Fix not writing optional fields when saving to v2.3 171 * Add default field values for all frames 172 173* Drop Python 2.6 support 174* EasyID3: Fix TXXX frame encoding when setting a non-latin1 encodable 175 value after a latin1 one. :bug:`263` 176 177 1781.33.2 - 2016.07.05 179------------------- 180 181* Fix loading of small ogg/apev2 files (1.33 regression) 182 183 1841.33.1 - 2016.06.29 185------------------- 186 187* Fix Overeager deprecation warnings :bug:`261` 188 189 1901.33 - 2016.06.29 191----------------- 192 193* FileType, Metadata: File-like object support :bug:`1` 194* mid3v2: Add APIC support. :bug:`47` 195* EasyID3: Fix handling of RVA2 frames with non-lowercase description 196 :bug:`215` 197* mid3v2: Add UFID support. :bug:`234` 198* ID3: Include human-readable representation of the picture type in 199 APIC._pprint() :bug:`244` 200* EasyID3: make albumartist use TPE2 and move performer to TXXX. :bug:`252` 201* ID3: id3.ID3TimeStamp comparator: check type :pr:`260` 202 (Fabian Peter Hammerle) 203* setup.py: follow PEP440 for the development version 204* FileType/Metadata.load/save/delete no longer raise IOError or IOError 205 subclasses. They only raise subclasses of MutagenError. 206 207 2081.32 - 2016.05.02 209----------------- 210 211* Add basic SMF (Standard MIDI File) support (:mod:`mutagen.smf`) 212* FLAC: add ``audio/flac`` mime type. :bug:`235` 213* ASF: Fixed crash when object size is longer than the header and file length 214 (Ben Ockmore) 215* ID3: Validate attributes set after frame creation :commit:`69368c31e00` 216 (:user:`Daniel Plachotich <danpla>`) 217* MP4: validate values in ``__setitem__`` so things don't fail in save() 218 :bug:`236` 219* tests: Fix SynchronizedTextSpec test on big-endian machines :bug:`247` 220 (Daniel Plachotich) 221* ID3: do type checking in ``__setitem__`` :bug:`251` 222* Building the documentation now requires sphinx >= 1.3 223* New :class:`mutagen.Tags` base class for tags 224* Moved from Bitbucket to GitHub 225 226 2271.31 - 2015.09.10 228----------------- 229 230* New padding control API for flac/id3/mp4/asf/ogg/aiff and everything 231 based on it, except oggflac :bug:`229` 232* Mutagen will now reduce padding on save if there is lots of it. 233* delete() will remove padding in addition to tags. 234 235* ASF: 236 237 * Padding support :bug:`201` 238 * Don't report negative lengths for some broken files 239 * New :class:`asf.ASFInfo`.codec_type/codec_name/codec_description 240 * Implement ASF.delete() 241 242* OGG: Padding support for Opus/Vorbis/Theora/Speex 243* M4A: Implementation removed. Every operation will raise. Use mp4 instead. 244* Tools: Support Unicode output under Windows :bug:`232` 245 246 2471.30 - 2015.08.22 248----------------- 249 250* FLAC: 251 252 * Fix :meth:`flac.FLAC.save` in case the source contained a too large 253 (invalid but recovered) image block :bug:`226` 254 255* MP3: 256 257 * Improved length and bitrate accuracy: 258 259 * Read lame "Info" tags for improved bitrate/length accuracy 260 * Use bytes info of VBRI headers for improved bitrate accuracy 261 * Subtract encoder delay/padding from length for improved length accuracy 262 (especially for short tracks) 263 * Fix rare false identification of Xing headers :bug:`182` 264 265 * New :class:`mp3.MPEGInfo`.encoder_info attribute containing the encoder 266 name and version :bug:`66` 267 * New :class:`mp3.MPEGInfo`.bitrate_mode attribute exposing if the file is 268 VBR, ABR or CBR :bug:`24` :bug:`66` 269 * New :class:`mp3.MPEGInfo`.channels attribute providing the channel count 270 * New :class:`mp3.MPEGInfo`.track_gain/track_peak/album_gain values exposing 271 the replaygain info provided by the lame header :bug:`36` 272 273* ID3: 274 275 * New :class:`id3.PictureType` enum for the picture type used in APIC frames :bug:`222` 276 277* MP4: 278 279 * Fix MP4FreeForm.__eq__ and MP4Cover.__eq__ when comparing with bytes 280 :bug:`218` 281 282* Don't raise on :meth:`FileType.save` if there are no tags. :bug:`227` 283* Minor fixes: :bug:`228` 284 285 2861.29 - 2015.05.09 287----------------- 288 289* mid3v2: Fix an error under Python 3 with files without tags :bug:`219` 290* mid3v2: Various Windows+Python2+Unicode fixes :bug:`214` 291* Don't emit warnings during loading (ID3Warning) :bug:`223` 292* py.test support 293 294 2951.28 - 2015.03.06 296----------------- 297 298* Various minor fixes to make mutagen behave the same under Python3 as under 299 Python2. 300* Update gpl text :bug:`205` 301* Documentation: Add example for how to create a new flac.Picture :bug:`209` 302 303* ID3: 304 305 * Various error handling fixes (:bug:`110`, :bug:`211`, ...) 306 * Don't hide ID3 loading errors with ID3FileType. 307 * In case a synch safe marked frame isn't sync safe, only warn :bug:`210` 308 * Removed PEDANTIC mode 309 310* Tools: 311 312 * Add signal handling :bug:`170` 313 * mid3cp: Make it work under Windows. 314 * mutagen-inspect: Make it work under Windows+Python3 :bug:`216` 315 * Support unicode file paths under Windows+Python2 :bug:`214` 316 * Support file paths with invalid encoding under Unix+Python3. 317 318 3191.27 - 2014.11.28 320----------------- 321 322* MP4: 323 324 * New ``MP4Info.codec`` for identifying the contained audio codec 325 e.g. ``"mp4a"``, ``"alac"``, ``"mp4a.40.2"``, ``"ac-3"`` etc. 326 :commit:`b2f22b81c77` 327 * New ``MP4Info.codec_description``: name of the audio codec 328 e.g. ``"ALAC"``, ``"AAC LC"``, ``"AC-3"`` 329 330* OggOpus: 331 332 * Preserve data after vorbis comment ( 333 See https://tools.ietf.org/html/draft-ietf-codec-oggopus-05#section-5.2) 334 :bug:`202` 335 336* AAC: 337 338 * New AAC FileType. Supports loading ADTS/ADIF AAC files. :bug:`15` 339 340 3411.26 - 2014.11.10 342----------------- 343 344* MP4: 345 346 * Parse channels/sample_rate/bits_per_sample/bitrate for ALAC files 347 :bug:`199` :commit:`192cfcaf14` (Adrian Sampson, Christoph Reiter) 348 349* ASF: 350 351 * Support writing multiple values for 352 Author/Title/Copyright/Description/Rating :bug:`151` 353 * Fix read order for multi value tags 354 * Various Python3 fixes 355 356* EasyID3: Add more tag mappings :bug:`136` (Ben Ockmore) 357 358* MPC/SV8: Fix parsing of SH packets with padding :bug:`198` 359 360* docs: 361 362 * New logo :commit:`b728fa75` (:user:`Samuel Messner <obskyr>`) 363 * Add examples for handling cover art in vorbiscomment :bug:`200` 364 * Add examples for id3v2.3 365 366 3671.25.1 - 2014.10.13 368------------------- 369 370* ID3: Fix parsing of some files with Python 3 :bug:`194` 371 372 3731.25 - 2014.10.03 374----------------- 375 376* Python 3 support (Ben Ockmore et al) :bug:`27` 377 Supported: Python 2.6, 2.7, 3.3, 3.4 (CPython and PyPy) 378* All custom exceptions now have a common mutagen.MutagenError base class 379* mutagen.File: prefer theora over vorbis/flac streams in ogg :bug:`184` 380* New mid3cp script for copying id3 tags :bug:`178` 381 (Marcus Sundman, Ben Ockmore) 382 383* ID3: 384 385 * Parse 2.3/4 frames with 2.2 names :bug:`177` 386 * Try to detect apev2 tags when looking for id3v1 tags :bug:`122` 387 * New id3.Encoding, id3.ID3v1SaveOptions enums :bug:`190` 388 389* ASF: 390 391 * Raise a proper exception on invalid utf-16 :bug:`127` 392 393* APEv2: 394 395 * Fix UnicodeDecodeError during parsing :bug:`174` 396 397* MP4: 398 399 * Fix struct.error exception during parsing :bug:`119` 400 * New AtomDataType enum for MP4FreeForm.dataformat values 401 * Read some previously ignored purl/egit atoms 402 * Read multi value reverse DNS tags written by foobar2000 403 * Read multi value atoms written by MusicBee :bug:`165` 404 * Write back unknown atoms and ones that failed to parse. 405 406 4071.24 - 2014.08.13 408----------------- 409 410* Moved to Bitbucket: https://bitbucket.org/lazka/mutagen 411* ID3: 412 413 * Parse utf-16 text frames with wrong termination :bug:`169` 414 * Fix parsing of utf-16 SYLT frames :bug:`173` 415 416* WavPack: 417 418 * Fix length calculation if sample count is missing in the header :bug:`180` 419 420* setup.py: Don't install leftover files produced by the test suite :bug:`179` 421* tests: Fix error with POSIX locale :bug:`181` 422 4231.23 - 2014.05.14 424----------------- 425 426* tools: Don't crash in misconfigured envs, fall back to utf-8. 427* mp3: Return correct mimetype for MP2 files. :bug:`163` 428* id3: deterministic sorting of frames. :bug:`166` 429* AIFF support :bug:`146` (Evan Purkhiser) 430 4311.22 - 2013.09.08 432----------------- 433 434* Minimum required Python version is now 2.6 435* Online API reference at https://mutagen.readthedocs.org/ 436* EasyID3: 437 438 * Fix crash with empty TXXX values. :bug:`135` 439 440* ID3: 441 442 * id3v2.3 writing support :bug:`85` 443 * Add iTunes podcast frames (TGID, TDES, WFED) :bug:`141` 444 * Updated id3v1 genre list 445 446* MP4: 447 448 * add_tags() will not replace existing tags. :bug:`101` 449 * Don't ignore tags if parsing unknown atoms fails. 450 * Raise on invalid 64bit atom size :bug:`132` (Sidnei da Silva) 451 452* APEv2: 453 454 * Handle invalid tag item count. :bug:`145` (Dawid Zamirski) 455 456* Ogg: 457 458 * Faster parsing of files with large packets. 459 460* VComment: 461 462 * Preserve text case for field names added through the dict interface 463 :bug:`152` 464 465* mid3v2: 466 467 * New -e,--escape switch to enable interpretation of escape sequences and 468 makes escaping of the colon separator possible. :bug:`159` 469 470* mid3iconv: 471 472 * Convert COMM frames :bug:`128` 473 4741.21 - 2013.01.30 475----------------- 476 477* Fix Python 2.3 compatibility (broken in 1.19). 478* Fix many warnings triggered by -3. :bug:`27` 479* mid3v2: 480 481 * Add --TXXX support. :bug:`62` (Tim Phipps) 482 * Add --POPM support. :bug:`71` 483 * Allow setting multiple COMM or TXXX frames with one command line. 484 485* FLAC: 486 487 * Try to handle corrupt Vorbis comment block sizes. :bug:`52` 488 * Try to handle corrupt Picture block sizes :bug:`106` (Christoph Reiter) 489 * Don't leak file handle with PyPy :bug:`111` (Marien Zwart) 490 491* ID3: 492 493 * MakeID3v1: Do not generate bad tags when given short dates. :bug:`69` 494 * ParseID3v1: Parse short (< 128 byte) tags generated by old Mutagen 495 implementations of MakeID3v1, and tags with garbage on the front. 496 * pprint: Sort frames by name. 497 * Upgrade unknown 2.3 frames :bug:`97` (Christoph Reiter) 498 * Fix handling of invalid SYLT frames :bug:`105` (Christoph Reiter) 499 500* MP3: 501 502 * Fix error when loading extremely small MP3s. :bug:`72` 503 * Fix rounding error in CBR length calculation :bug:`93` (Christoph Reiter) 504 505* Use 'open' rather than 'file' everywhere. :bug:`74` (Dan Callahan) 506* mid3iconv: 507 508 * Accurately copy QL-style frame encoding behavior. :bug:`75` 509 * Skip unopenable files. :bug:`79` 510 511* ID3FileType: 512 513 * Remember which tag type load() was called with even if the file 514 doesn't yet have any ID3 tags. :bug:`89` 515 516* VComment: 517 518 * Prevent MemoryError when parsing invalid header :bug:`112` 519 (Jyrki Pulliainen) 520 521* ASF: 522 523 * Don't corrupt files on the second save() call :bug:`81` (Christoph Reiter) 524 * Always store GUID objects in the MetadataLibraryBlock :bug:`81` 525 526* OggTheora: Fix length/bitrate calculation. :bug:`99` (Christoph Reiter) 527* MP4: 528 529 * Less strict MP4 covr atom parsing. :bug:`86` (Lukáš Lalinský) 530 * Support atoms that extend to the end of the file. :bug:`109` 531 (Sidnei da Silva) 532 * Preserve freeform format flags :bug:`103` (Christoph Reiter) 533 534* OggOpus support. :bug:`115` (Christoph Reiter) 535* Musepack: 536 537 * Fix SV7 bitrate calculation :bug:`7` (Christoph Reiter) 538 * Support SV8 :bug:`7` (Christoph Reiter) 539 5401.20 - 2010.08.04 541----------------- 542 543* ASF: Don't store blocks over 64K in the MetadataObject block; 544 use the MetadataLibraryBlock instead. :bug:`60` (Lukáš Lalinský) 545* ID3: Faster parsing of files with lots of padding. :bug:`65` 546 (Christoph Reiter) 547* FLAC: Correct check for audio data start. :bug:`67` 548 5491.19 - 2010.02.18 550----------------- 551 552* ID3: 553 554 * POPM: 'count' is optional; the attribute may not exist. :bug:`33` 555 * TimeStampTextFrame: Fix a TypeError in unicode comparisons. :bug:`43` 556 * MakeID3v1: Translate TYER into ID3v1 year if TDRC is not present. :bug:`42` 557 558* mid3v2: 559 560 * Allow --delete followed by --frame, and --genre 1 --genre 2. :bug:`37` 561 * Add --quiet and --verbose flags. :bug:`40` 562 563* moggsplit: --m3u option to write an M3U playlist of the new files. :bug:`39` 564* mid3iconv: Fix crash when processing TCML or TIPL frames. :bug:`41` 565* VCommentDict: Correctly normalize key names for .keys() iterator. :bug:`45` 566* MP3: Correct length calculation for MPEG-2 files. :bug:`46` 567* oggflac: Fix typo in docstring. :bug:`53` 568* EasyID3: Force UTF-8 encoding. :bug:`54` 569* EasyMP4: Fix 'genre' translation. :bug:`56` 570 5711.18 - 2009.10.22 572----------------- 573 574* ASF: 575 576 * Distinguish between empty and absent tag values in 577 ContentDescriptionObjects. :bug:`29` 578 579* mid3iconv: 580 581 * Fix a crash when processing empty (invalid) text frames. 582 583* MAJOR API INCOMPATIBILITY!!!! 584 585 * EasyID3FileType is now in mutagen.easyid3, not mutagen.id3. This 586 change was necessary to restore API compatibility with 1.16, as 587 1.17 accidentally contained a circular import preventing 588 mutagen.easyid3 from importing by itself. :bug:`32` 589 5901.17 - 2009.10.07 591----------------- 592 593* ID3: 594 595 * Support for the iTunes non-standard TSO2 and TSOC frames. 596 * Attempt to recover from bad SYLT frames. :bug:`2` 597 * Attempt to recover from faulty extended header flags. :bug:`4` :bug:`21` 598 * Fix a bug in ID3v2.4 footer flag detection, :bug:`5` 599 600* MP4: 601 602 * Don't fail or double-encode UTF-8 strings when given a str. 603 * Don't corrupt 64 bit atom sizes when resizing atoms. :bug:`17` 604 605* EasyID3: 606 607 * Extension API for defining new "easy" tags at runtime. 608 * Support for many, many more tags. 609 610* OggVorbis, OggSpeex: Handle bitrates below 0 as per the spec. :bug:`30` 611* EasyMP4: Like EasyID3, but for iTunes MPEG-4 files. 612* mutagen.File: New 'easy=True' argument to create new EasyMP3, EasyMP4, 613 EasyTrueAudio, and EasyID3FileType instances. 614 6151.16 - 2009.06.15 616----------------- 617 618* Website / code repository move. 619* Bug Fixes: 620 621 * EasyID3: Invalid keys now raise KeyError (and ValueError). 622 * mutagen.File: .flac files with an ID3 tag will be opened as FLAC. 623 624* MAJOR API INCOMPATIBILITY!!!! 625 626 * Python 2.6 has required us to rename the .format attribute of M4A/MP4 627 cover atoms, because it conflicts with the new str.format method. 628 It has been renamed .imageformat. 629 6301.15 - 2008.12.01 631----------------- 632 633* Bug Fixes: 634 635 * mutagen.File: Import order no longer affects what type is returned. 636 * mutagen.id3: Compression of frames is now disabled. 637 * mutagen.flac.StreamInfo: Fix channel mask (support channels > 2). :bug:`35` 638 * mutagen.mp3: Ignore Xing headers if they are obviously wrong. 639 6401.14 - 2008.05.31 641----------------- 642 643* Bug Fixes: 644 645 * MP4/M4A: Fixed saving of atoms with 64-bit size on 64-bit platforms. 646 * MP4: Conversion of 'gnre' atoms to '\xa9gen' text atoms now correctly 647 produces a list of string values, not just a single value. 648 * ID3: Broken RVA2 frames are now discarded. (Vladislav Naumov) 649 * ID3: Use long integers when appropriate. 650 * VCommentDict: Raise UnicodeEncodeErrors when trying to use a Unicode 651 key that is not valid ASCII; keys are also normalized to ASCII 652 str objects. (Forest Bond) 653 654* Tests: 655 * FLAC: Use 2**64 instead of 2**32 to test overflow behavior. 656 6571.13 - 2007.12.03 658----------------- 659 660* Bug Fixes: 661 662 * FLAC: Raise IOError, instead of UnboundLocalError, when trying 663 to open a non-existent file. (Lukáš Lalinský, Debian #448734) 664 * Throw out invalid frames when upgrading from 2.3 to 2.4. 665 * Fixed reading of Unicode strings from ASF files on big-endian 666 platforms. 667 668* TCP/TCMP support. (Debian #452231) 669* Faster implementation of file-writing when mmap fails, and 670 exclusive advisory locking when available. 671* Test cases to ensure Mutagen is not vulnerable to CVE-2007-4619. 672 It is not now, nor was it ever. 673* Use VBRI header to calculate length of VBR MP3 files if the Xing 674 header is not found. 675 6761.12 - 2007.08.04 677----------------- 678 679* Write important ID3v2 frames near the start. (Lukáš Lalinský) 680* Clean up distutils functions. 681 6821.11 - 2007.04.26 683----------------- 684 685* New Features: 686 687 * mid3v2 can now set URL frames. (Vladislav Naumov) 688 * Musepack: Skip ID3v2 tags. (Lukáš Lalinský) 689 690* Bug Fixes: 691 692 * mid3iconv: Skip all timestamp frames. (Lukáš Lalinský) 693 * WavPack: More accurate length calculation. ('ak') 694 * PairedTextFrame: Fix typo in documentation. (Lukáš Lalinský) 695 * ID3: Fixed incorrect TDAT conversion. The format is DDMM, not 696 MMDD. (Lukáš Lalinský) 697 698* API: 699 700 * Metadata no longer inherits from dict. 701 * Relatedly, the MRO has changed on several types. 702 * More documentation for MP4 atoms. (Lukáš Lalinský) 703 * Prefer MP3 for files with unknown extensions and ID3 tags. 704 7051.10.1 - 2007.01.23 706------------------- 707 708* Bug Fixes: 709 710 * Documentation mentions ASF support. 711 * APEv2 flags and valid keys are fixed. 712 * Tests pass on Python 2.3 again. 713 7141.10 - 2007.01.21 715----------------- 716 717* New Features: 718 719 * FLAC: Skip ID3 tags. Added option to delete them on save. 720 * EncodedTextSpec: Make private members more private. 721 * Corrupted Oggs generated by GStreamer (e.g. Sound Juicer) can be read. 722 * FileTypes have a .mime attribute which is a list of likely MIME types 723 for the file. 724 * ASF (WMA/WMV) support. 725 726* Bug Fixes: 727 728 * ID3: Fixed reading of v2.3 tags with unsynchronized data. 729 * ID3: The data length indicator for compressed tags is written 730 as a synch-safe integer. 731 7321.9 - 2006.12.09 733---------------- 734 735* New Features: 736 737 * OptimFROG support. 738 * New mutagen.mp4 module with support for multiple data fields per atom 739 and more compatible tag saving implementation. 740 * Support for embedded pictures in FLAC files (new in FLAC 1.1.3). 741 742* mutagen.m4a is deprecated in favor of mutagen.mp4. 743 7441.8 - 2006.10.02 745---------------- 746 747* New Features: 748 749 * MonkeysAudio support. (#851, Lukáš Lalinský) 750 * APEv2 support on Python 2.5; see API-NOTES. (#852) 751 7521.7.1 - 2006.09.24 753------------------ 754 755* Bug Fixes: 756 757 * Expose full ID3 tag size as .size. (#848) 758 759* New Features: 760 761 * Musepack Replay Gain data is available in SV7 files. 762 7631.7 - 2006.09.15 764---------------- 765 766* Bug Fixes: 767 768 * Trying to save an empty tag deletes it. (#813) 769 * The semi-public API removal mentioned in 1.6's API-NOTES happened. 770 * Stricter frame ID validation. (#830, Lukáš Lalinský) 771 * Use os.path.devnull on Win32/Mac OS X. (#831, Lukáš Lalinský) 772 773* New Features: 774 775 * FLAC cuesheet and seektable support. (#791, Nuutti Kotivuori) 776 * Kwargs can be passed to ID3 constructors. (#824, Lukáš Lalinský) 777 * mutagen.musepack: Read/tag Musepack files. (#825, Lukáš Lalinský) 778 779* Tools: 780 781 * mutagen-inspect responds immediately to keyboard interrupts. 782 7831.6 - 2006.08.09 784---------------- 785 786* Bug Fixes: 787 788 * IOError rather than NameError is raised when File succeeds in 789 typefinding but fails in stream parsing. 790 * errors= kwarg is correctly interpreted for FLAC tags now. 791 * Handle struct.pack API change in Python 2.5b2. (SF #1530559) 792 * Metadata 'load' methods always reset in-memory tags. 793 * Metadata 'delete' methods always clear in-memory tags. 794 795* New Features: 796 797 * Vorbis comment vendor strings include the Mutagen version. 798 * mutagen.id3: Read ASPI, ETCO, SYTC, MLLT, EQU2, and LINK frames. 799 * mutagen.m4a: Read/tag MPEG-4 AAC audio files with iTunes tags. (#681) 800 * mutagen.oggspeex: Read/tag Ogg Speex files. 801 * mutagen.trueaudio: Read/tag True Audio files. 802 * mutagen.wavpack: Read/tag WavPack files. 803 804* Tools: 805 806 * mid3v2: --delete-frames. (#635) 807 8081.5.1 - 2006.06.26 809------------------ 810 811* Bug Fixes: 812 813 * Handle ENODEV from mmap (e.g. on fuse+sshfs). 814 * Reduce test rerun time. 815 8161.5 - 2006.06.20 817---------------- 818 819* Bug Fixes: 820 821 * APEv2 822 823 * Invalid Lyrics3v2 tags are ignored/overwritten. 824 * Binary values are autodetected as documented. 825 826 * OggVorbis, OggFLAC: 827 828 * Write when the setup packet spans multiple pages. 829 * Zero granule position for header packets. 830 831* New Features: 832 833 * mutagen.oggtheora: Read/tag Ogg Theora files. 834 * Test Ogg formats with ogginfo, if present. 835 8361.4 - 2006.06.03 837---------------- 838 839* Bug Fixes: 840 841 * EasyID3: Fix tag["key"] = "string" handler. (#693) 842 * APEv2: 843 844 * Skip Lyrics3v2 tags. (Miguel Angel Alvarez) 845 * Avoid infinite loop on malformed tags at the start of the file. 846 847 * Proper ANSI semantics for file positioning. (#707) 848 849* New Features: 850 851 * VComment: Handle malformed Vorbis comments when errors='ignore' or 852 errors='replace' is passed to VComment.load. 853 (Bastian Kleineidam, #696) 854 * Test running is now controlled through setup.py (./setup.py test). 855 * Test coverage data can be generated (./setup.py coverage). 856 * Considerably more test coverage. 857 8581.3 - 2006.05.29 859---------------- 860 861* New Features: 862 863 * mutagen.File: Automatic file type detection. 864 * mutagen.ogg: Generic Ogg stream parsing. (#612) 865 * mutagen.oggflac: Read/tag Ogg FLAC files. 866 * mutagen.oggvorbis no longer depends on pyvorbis. 867 * ID3: SYLT support. (#672) 868 8691.2 - 2006.04.23 870---------------- 871 872* Bug Fixes: 873 874 * MP3: Load files with zeroed Xing headers. (#626) 875 * ID3: Upgrade ID3v2.2 PIC tags to ID3v2.4 APIC tags properly. 876 * Tests exit with non-zero status if any have failed. 877 * Full dict protocol support for VCommentDict, FileType, and APEv2 objects. 878 879* New features: 880 881 * mutagen.oggvorbis gives pyvorbis a Mutagen-like API. 882 * mutagen.easyid3 makes simple ID3 tag changes easier. 883 * A brief TUTORIAL was added. 884 885* Tools: 886 887 * mid3iconv, a clone of id3iconv, was added by Emfox Zhou. (#605) 888 8891.1 - 2006.04.04 890---------------- 891 892* ID3: 893 894 * Frame and Spec objects are not hashable. 895 * COMM, USER: Accept non-ASCII (completely invalid) language codes. 896 * Enable redundant data length bit for compressed frames. 897 8981.0 - 2006.03.13 899---------------- 900 901* mutagen.FileType, an abstract container for tags and stream information. 902* MP3: A new FileType subclass for MPEG audio files. 903* FLAC: 904 905 * Add FLAC.delete. 906 * Raise correct exception when saving to a non-FLAC file. 907 * FLAC.vc is deprecated in favor of FLAC.tags. 908 909* VComment (used by FLAC): 910 911 * VComment.clear to clear all tags. 912 * VComment.as_dict to return a dict of the tags. 913 914* ID3: 915 916 * Fix typos in PRIV._pprint, OWNE._pprint, UFID._pprint. 917 918* mutagen-pony: Try finding lengths as well as tags. 919* mutagen-inspect: Output stream information with tags. 920 9210.9 - 2006.02.21 922---------------- 923 924* Initial release. 925