1
0
mirror of synced 2026-05-22 22:53:20 +00:00
Commit Graph

560 Commits

Author SHA1 Message Date
Borewit c619ac4a5a Replace text-coded with @exodus/bytes for text encoding and decoding 2026-02-21 16:13:00 +01:00
Borewit 952ceae807 Fix miscalculation Ogg/Vorbis, duration miscalculation
Fix miscalculation occurring when Ogg/Vorbis files when the duration option is not explicitly enabled. In that case, the parser performs a partial read of the file and reports the duration based only on the processed portion, resulting in an incomplete value.

Resolves #2518
2026-02-16 19:30:57 +01:00
ma225tq 7c57bdcbdf refactor(MetadataCollector): add common types for SingularArtistId & PluralArtistId 2026-02-08 14:15:46 +01:00
ma225tq 86b5d9b7c7 refactor(MetaDataCollector): extract artist/albumartist handling into helper functions 2026-02-08 14:15:46 +01:00
ma225tq 17216a903a fix(type.ts): correct indentation in albumartist field description 2026-02-08 14:15:46 +01:00
ma225tq d1916dea39 test: add test for multiple album artists in FLAC files 2026-02-08 14:15:46 +01:00
ma225tq 2f35aacd29 fix(type.ts): correct albumartist field description 2026-02-08 14:15:46 +01:00
ma225tq 829b923e37 fix(type.ts): clarify albumartist field description
This was done to help tell the difference between the existing albumartist and the new albumartists
2026-02-08 14:15:46 +01:00
ma225tq cd43849970 feat(MetadataCollector): add common.albumartists array support
Add albumartists field following the same pattern as artists:
  - Multiple TPE2 frames or null-separated values now populate common.albumartists array (like TPE1 does for common.artists)
  - Cross-population between albumartist/albumartists fields
2026-02-08 14:15:46 +01:00
glebrock e191ae87e8 #2574: add support for correctly populating the 'metadata.common.grouping' field for a file with an Tunes IDv2.2 tag with the 'GP1' frame 2026-02-02 20:18:17 +01:00
Borewit 4909b6fe12 fix(id3v2): prevent crash when no tag frames present
Fix TypeError: Cannot read properties of undefined (reading 'filter') by defaulting missing frame/tag collections to empty arrays/objects.

- Add MP3 sample without tags + regression test
- Update related TS configs and dependencies/lockfile
2026-01-28 19:54:25 +01:00
Borewit 8c822709d3 Add ID3v2 chapter support 2026-01-24 19:48:05 +01:00
Borewit b13fab0e7b Depend on win-guid for Windows GUID conversion 2026-01-14 18:04:39 +01:00
Borewit 81dca61fee Fix small code smalls, update Biome to 2.3.11 2026-01-06 15:50:42 +01:00
Borewit 64d2148d11 id3v2: harden frame parsing and fix edge cases
- Correctly handle missing null terminators in text fields
- Avoid reading text encoding for frames that do not define it
- Decode URL link frames according to ID3v2 specification
- Improve robustness of POPM and GEOB frame parsing
2026-01-06 13:39:38 +01:00
Borewit fd8b32b309 Improve findZero:
- eliminates all OOB reads.
- makes the “not found” behavior explicit and consistent.
2026-01-06 13:39:38 +01:00
Borewit 7ad0198d67 Improve readNullTerminatedString
- Don’t overwrite `uint8Array`, keep `valueArray` so the length comparison is correct and readable.
- Replace `zeroIndex === -`1 with `zeroIndex >= valueArray.length`.
2026-01-06 13:39:38 +01:00
Borewit 0e4156b986 id3v2: tighten frame decoding, trim nulls without regex, reduce allocations
- Use flatMap for TCON genre expansion to avoid concat/reduce allocations
- Add trimNullPadding helper and replace regex-based trailing null trimming
- Add defensive length checks for COMM/USLT and POPM parsing
- Use decodeUintBE consistently for POPM counter decoding
2026-01-06 13:39:38 +01:00
Borewit 26696ec75f Removed the eager, unconditional TextEncodingToken.get(...) at the start of readData() 2026-01-06 13:39:38 +01:00
Borewit da2f4ca2e9 Better reuse FrameParser.readNullTerminatedString 2026-01-06 13:39:38 +01:00
Borewit abbe09323d Improve MP3 parsing code
Favor Uint8Array.subarray, over passing offset and length
2026-01-06 13:39:38 +01:00
Borewit 65ec1c8fbd Move header parsing to FrameHeader.ts file, to allow re-using
Replace passing offset, and utilize `Uint8Array.subarray` instead.
2026-01-06 13:39:38 +01:00
Borewit af6caa7738 Improve MP4 bitrate calculation
Avoid using bitrate using `mdat` box, which could contain multiple streams
2025-11-23 12:25:29 +01:00
Borewit 1944b80e8c Fix bitrate calculation over multiple mdat boxes 2025-11-19 21:50:04 +01:00
Borewit 9f5f545136 Fix Ogg/Opus duration calculation.
Duration calculation requires to parse the entire Ogg/Opus file.
2025-11-15 19:24:15 +01:00
Gérald LEBAN 44f262f011 Add support for vorbis unsynced lyrics (#2489)
Extract unsynced vorbis lyrics
---------
Co-authored-by: Borewit <Borewit@users.noreply.github.com>
2025-11-09 14:55:57 +01:00
Borewit 65e6146668 Add support Apple’s QuickTime File Format 2025-11-09 14:14:54 +01:00
Borewit 044e565de8 Update Biome to 2.3.4 2025-11-09 14:10:39 +01:00
Borewit 5445cbb816 Support variable length PCNT and POPM numeric values.
Add `common.playCounter`
2025-09-15 20:36:21 +02:00
Borewit bcae011214 Favor subarray over slice, reusing instead of copying data 2025-09-15 20:28:29 +02:00
Borewit ff13f3e03c Map Vorbis.ENCODER and Vorbis VORBIS_COMMENT vendor to common.tool 2025-09-15 17:25:37 +02:00
Borewit 95c35ff566 Update Biome to 2.2.0 2025-08-19 12:28:41 +02:00
Borewit 06d83b2e7a Fix missing uint8array-extras dependency 2025-08-19 12:09:40 +02:00
Borewit 763f72854c Replace @kayahr/text-encoding with @borewit/text-codec 2025-08-13 21:48:37 +01:00
Borewit a5bc776e6d Remove uint8array-extras dependency
Remove `uint8array-extras` dependency in favour of having the same TextEncoder everywhere.
2025-08-13 09:58:54 +01:00
Borewit d3bfd7ae4e Use @kayahr/text-encoding for decoding
To avoid problems with unsupported character sets.
2025-08-12 20:39:42 +01:00
Borewit 2849deb89e CI: Improve structure Ogg unit tests
- Move an Ogg/Vorbis test to the correct description.
- Move some Ogg files, to the `ogg` subfolder
2025-07-20 13:32:23 +02:00
Borewit 26104b943e Embed media logo's 2025-07-20 12:49:49 +02:00
Borewit c2c9ad9a8d CI: Update to Biome 2.1.2 2025-07-20 10:09:15 +02:00
Borewit eb17a5ce65 Fix peek Ogg radio streams 2025-07-19 22:14:35 +02:00
Borewit 3b688f1546 Use strtok3.parseBlob()
Instead of streaming Blob, uses `Blob.slice()`.
2025-07-17 00:26:37 +02:00
Borewit 121078b757 Add support for Ogg/FLAC 2025-07-03 22:17:42 +02:00
Borewit 1824cc1394 Implement handling multiple Ogg sub streams 2025-07-01 12:34:25 +02:00
Borewit a9094e9829 Indicate on every media file if it contains an audio and/or video stream.
Introduces: `format.hasAudio` and `format.hasVideo`
2025-06-30 17:33:09 +02:00
Borewit 754a393fbf Optimize efficiency ordering tags 2025-06-30 10:31:13 +02:00
Borewit b16866e666 Add support for MP4 fragments
Add support to decode `moof`, `traf`, `tfhd`, and `trak` boxes
2025-06-26 20:52:44 +02:00
Borewit f16f584b0b Fix code style issues 2025-06-26 20:24:05 +02:00
wizcheu 48f21a4698 Support both 2 and 3 digit milliseconds in LRC timestamp parsing
The LRC parser now handles timestamps with either 2-digit centiseconds
(e.g., [00:45.52]) or 3-digit milliseconds (e.g., [00:45.520]) by
updating the regex pattern and conversion logic to properly parse
both formats into milliseconds.
2025-06-14 11:12:06 +02:00
Borewit ab5fcbf273 Be able to auto-detect MPEG frames, starting at slightly incorrect offset
Update file-type to 21.0.0
2025-05-23 14:49:05 +02:00
Borewit 5f67a6d3d5 Add missing MIME-type video/matroska 2025-05-15 20:34:09 +02:00