Releases: benrr101/node-taglib-sharp
v5.2.3 Id3v2 GEOB Frame Fix
Fixes
- This release exclusively fixes a bug in GEOB frame parsing where reading GEOB frames encoded with Latin1 would throw an argument out of range error.
Note: with this change, non-picture attachment frames will be visible in file.tag.pictures
. This was the expected behavior all along, but may be an unexpected change. Filtering base on IPicture.pictureType
can be used as a workaround
v5.2.2 ID3v2 Non-Standard Frame Identifier Hotfix
This release adds a fix for a bug that prevented ID3v2 frames with non-standard identifiers from being loaded. It also caused affected files to fail to load.
Fixes
- Fix the above bug by treating non-standard frame identifiers as
UnknownFrame
s
Special Thanks
- @stuartambient & @digimezzo for reporting the issue and testing solutions
v5.2.1 MPEG4 Support Readme Fix
Tiny fix in README. See feature changes in v5.2.0
v5.2.0 MPEG4 Support
At extremely long last, MPEG4 audio and video support has been added! A massive massive thank you to @digimezzo for contributing this feature!! (and massive shame on me for not releasing it sooner)
New Features/Fixes
- MPEG4 support - Read/write support for M4A, M4B, M4V, M4P, and MP4 files (again big thanks to @digimezzo!)
- Fixed static settings classes that were missed from the index (thanks to @stuartambient for reporting)
MpegAudioFileSettings
(MPEG1/2)MpegVideoFileSettings
(MPEG1/2)AviFileSettings
(RIFF)WaveFileSettings
(RIFF)
- Fixed APE MusicBrainz Release Artist ID backing field
Not Really Breaking Changes
- Ogg page header absolute granular positions have been changed to simply be
ByteVectors
- Absolute granular positions are used to calculate duration for Ogg files
- According to the Ogg docs, this value means something different to each codec, the only requirement is that it is monotonically increasing. As such, we can just read it as raw bytes and let the codec classes interpret the meaning of the value.
- This eliminates issues with the number being too big or having special cased values (ie, -1)
v5.1.0 Matroska/WebM Read-Only Support
At long last, some semblance of support for Matroska/WebM files. Unfortunately, this is release took forever to develop and even then it's only read-only support. The primary reason for the delay is that the original .NET implementation was very difficult to comprehend and required a lot of rewriting. What's worse is that the Matroska tagging format is very open ended, but in such a way as to make it very complicated to derive a "unified" tagging interface. Please provide feedback if you find the unified tagging interface is not satisfactory.
New Features/Fixes
- Matroska/WebM read-only support
- If you try to write a mkv/webm file, it'll throw an error
Not Really Breaking Changes, But Stuff You Should Be Aware Of
- Official builds are now done using Node 14.21.x. I still plan to target 12.16.1 as the minimum version.
v5.0.1 Ogg 0xFFFFFFFFFFFFFFFF Granule Support
New Features/Fixes
- Fixing a bug where the special
0xFFFFFFFFFFFFFFF
granule position on Ogg pages would throw exceptions. Thanks to @digimezzo for reporting this and testing the fix!
v5.0.0 Ogg Support (and other sundry items)
Ogg support had been sitting around ready to go for a while, might as well release it since matroska/webm support is going to be a while longer...
New Features/Fixes
- Support for Ogg files (Vorbis, Theora, Opus)
- Large rewrite of
ByteVector
class to reduce needless copying of bytes.ByteVector
s are now copy-on-write and use node's buffer views to implement subarray processing without a copying the entire contents. This greatly improves performance!fromBase64String
andtoBase64String
have been added- see breaking changes notes below for stuff that's been broken
Breaking Changes
- The interface for working with
ByteVector
s has changed significantlyfromByteVector
has been removed, usetoByteVector
on an existing object to make the copy-on-write copyByteVector
construction methods no longer takeisReadOnly
as an argument, instead usemakeReadOnly()
on the new object to make it read only.fromString
no longer has a defaulttype
, default behavior was to useStringType.UTF8
fromU*
andtoU*
methods were renamed to be consistently named - eg,fromUShort
is nowfromUshort
lastUtf16Encoding
property has moved into theEncoding
class which now handles all encoding and decoding- Direct access to the backing Uint8Array via
data
has been removed. The alternative is to usetoByteArray()
. Try to avoid using this as much as you can since it has the potential to break copy-on-write. It only exists for the the handful of instances where it is more performant to directly use the buffer for IO operations. get hashCode
has been removed, callget checksum
insteadget isView
is added (mostly as a diagnostic/debugging tool) to indicate if theByteVector
is backed by a buffer view over another buffer or if it is backed by the buffer.- Check for read-only now happens after checking the arguments for their proper type
containsAt
no longer accepts apatternOffset
or apatternLength
. If a subset of the pattern needs to be checked, usesub
on the pattern. It's super cheap now!find
no longer takes an offset. Iffind
needs to start at an offset in theByteVector
, use the shortcutoffsetFind
insertByte
,insertByteArray
, andinsertByteVector
have all been removed. (it behaves the same as splice for JS arrays)mid
is renamed tosubarray
(to better match JS array method names)removeAtIndex
andremoveRange
have been removed, usesplice
instead (it behaves the same as splice for JS arrays)resize
no longer returns the object, it is a pure function.rFind
no longer accepts an offset, userFind
on the result ofsubarray
if offset is neededtoFloat
now handlesByteVectors
of size <4 gracefully instead of throwing an errortoStrings
no longer accepts anoffset
parameter, usesubarray
to get an offsetByteVector
, then calltoStrings
- Lots of static readonly members have been renamed to SCREAMING_SNAKE_CASE. If you're using one and it shows up as not defined, try using the SCREAMING_SNAKE_CASE version. (eg,
AacAudioHeader.unknown
=>AacAudioHeader.UNKNOWN
)
v4.0.2 - AIFF Hotfix
This has been released officially on npm for months now, but somehow I forgot to write the github release
New Features/Fixes
- Fix a bug in AIFF implementation that doesn't correctly update the file size when writing the tag (#49)
Breaking Changes
None
v4.0.0 FLAC File Support (and RIFF/Start/End tag rewrite)
Better late than never...
New Features / Fixes
- Support for FLAC files (supports ID3v1, ID3v2, APE, and Xiph tagging formats)
- Rewriting the entire RIFF implementation to support "non-standard" files better
- Support for configuring the default tags to create when the file is read, configure using the appropriate
FileTypeFileSettings
class - Rewriting
NonContainer
implementation to be much cleaner
Breaking Changes
- "Non-Container" file implementation was rewritten
- RIFF implementation was rewritten
AviStream
,AviStreamList
, andAviStreamHeader
classes combined intoAviStream
classAviHeader
added to represent the collection ofAviStreams
and general info about the AVI fileDivxTag.fromFile
removed, useDivxTag.fromData
and pass in chunk dataInfoTag.fromData
replaced withInfoTag.fromList
, pass aRiffList
in directlyMovieIdTag.fromData
replaced withMovieIdTag.fromList
, pass aRiffList
in directlyRiffChunk
andRiffList
written to be treated asIRiffChunk
,RiffFile
has a list of chunks it maintains and uses to determine how to read / write the file- ... probably some others in there. Feel free to raise issues if you're confused on how to upgrade.
MpegFile
renamedMpegContainerFile
NonContainer
renamed toSandwich
RiffFile
now has a singleRiffTag
that collects all the tags aRiffFile
can holdFile.invariantStartPosition
andFile.invariantEndPosition
removed. For "sandwich" files, the information is retained inSandwichFile.mediaStartPosition
andSandwichFile.mediaEndPosition
- Attempting to add a tag to a file that is not support will now throw an error
CombinedTag
will now do tree traversal when performing operations, egCombinedTag.tags
will return all tags under the current instanceTagTypes.FlacMetadata
is renamedTagTypes.FlacPictures
and used to represent if a file contains FLAC style pictures. Value remains the same.
v3.4.0 RIFF File Support
Happy Fourth of July!
New Features / Fixes
- Support for RIFF files (spans a lot of different codecs, but is generally the AVI, WAV, and DIVX containers)
CombinedTag
objects return default values to match behavior of theTag
base class0
for integer numeric propertiesNaN
for floating point properties
Probably Not Breaking Changes
- Updated to v4.1 of TypeScript, though this shouldn't cause too many issues