You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
read and write embedded RIFF LIST/INFO tags for wav inputs in the
engine metadata flow, while keeping sidecar metadata for non-wav files.
this improves metadata persistence consistency for wav files.
route wav/aiff-family playback through an internal java sampled backend
before optional desktop-open fallback to reduce reliance on external
app integration and improve playback behavior.
add regression tests for wav metadata round-trip and playback routing,
and update docs/changelog plus project version to 1.1.4
Copy file name to clipboardExpand all lines: CHANGELOG.md
+12-1Lines changed: 12 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,21 +5,32 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
-
## [1.1.4] - 2026-03-16
8
+
## [1.1.4] - 2026-03-17
9
+
10
+
### Added
11
+
- Added WAV embedded metadata round-trip handling (RIFF `LIST/INFO`) in [`WavParser`](src/main/java/me/tamkungz/codecmedia/internal/audio/wav/WavParser.java) and engine metadata flow in [`StubCodecMediaEngine`](src/main/java/me/tamkungz/codecmedia/internal/StubCodecMediaEngine.java).
12
+
- Added internal Java sampled playback route (`java-sampled`) for WAV/AIFF-family playback in [`StubCodecMediaEngine`](src/main/java/me/tamkungz/codecmedia/internal/StubCodecMediaEngine.java).
13
+
- Added playback routing regression coverage in [`StubCodecMediaEnginePlaybackRoutingTest`](src/test/java/me/tamkungz/codecmedia/internal/StubCodecMediaEnginePlaybackRoutingTest.java).
9
14
10
15
### Changed
11
16
- Replaced temporary WAV/PCM stub converter with production path via [`WavPcmConverter`](src/main/java/me/tamkungz/codecmedia/internal/convert/WavPcmConverter.java), including real `wav -> pcm` data-chunk extraction and `pcm -> wav` container wrapping.
12
17
- Updated conversion hub wiring in [`DefaultConversionHub`](src/main/java/me/tamkungz/codecmedia/internal/convert/DefaultConversionHub.java) to route WAV/PCM through the renamed real converter.
13
18
- Added preset-driven PCM->WAV parameter parsing in [`WavPcmConverter.parsePcmWavParams()`](src/main/java/me/tamkungz/codecmedia/internal/convert/WavPcmConverter.java) supporting `sr=`, `ch=`, and `bits=`.
14
19
- Updated facade regression behavior in [`CodecMediaFacadeTest`](src/test/java/me/tamkungz/codecmedia/CodecMediaFacadeTest.java) to assert real re-encode behavior and preset-based output stream properties for WAV/PCM route.
20
+
- Updated metadata behavior to use embedded WAV `LIST/INFO` read/write for WAV inputs while keeping sidecar (`.codecmedia.properties`) persistence for non-WAV formats in [`StubCodecMediaEngine`](src/main/java/me/tamkungz/codecmedia/internal/StubCodecMediaEngine.java).
21
+
- Updated playback behavior in [`CodecMediaEngine.play()`](src/main/java/me/tamkungz/codecmedia/CodecMediaEngine.java) implementation path to prioritize internal Java sampled playback for WAV/AIFF family before desktop-open fallback.
15
22
16
23
### Fixed
17
24
- Added defensive bounds checks for little-endian reads in [`WavPcmConverter.readLeInt()`](src/main/java/me/tamkungz/codecmedia/internal/convert/WavPcmConverter.java) and [`WavPcmConverter.readLeUnsignedShort()`](src/main/java/me/tamkungz/codecmedia/internal/convert/WavPcmConverter.java).
18
25
- Added WAV `fmt ` validation before payload extraction in [`WavPcmConverter.extractWavDataChunk()`](src/main/java/me/tamkungz/codecmedia/internal/convert/WavPcmConverter.java), rejecting non-PCM WAV payload extraction.
19
26
- Hardened chunk traversal and container construction against arithmetic overflow in [`WavPcmConverter.extractWavDataChunk()`](src/main/java/me/tamkungz/codecmedia/internal/convert/WavPcmConverter.java) and [`WavPcmConverter.wrapPcmAsWav()`](src/main/java/me/tamkungz/codecmedia/internal/convert/WavPcmConverter.java).
27
+
- Fixed WAV metadata flow so write/read operations no longer rely on sidecar-only behavior for WAV files, improving in-file metadata persistence consistency.
28
+
- Fixed playback routing so WAV/AIFF-family inputs no longer depend solely on desktop integration when internal sampled playback is available.
20
29
21
30
### Verified
22
31
- Confirmed facade regression coverage with `mvn -Dtest=CodecMediaFacadeTest test`.
32
+
- Confirmed WAV metadata parser behavior with `mvn -Dtest=WavParserTest test`.
33
+
- Confirmed engine metadata and playback routing behavior with `mvn -Dtest=CodecMediaFacadeTest,StubCodecMediaEnginePlaybackRoutingTest test`.
CodecMedia is a Java library for media probing, validation, metadata sidecar persistence, audio extraction, playback workflow simulation, and conversion routing.
9
+
CodecMedia is a Java library for media probing, validation, metadata persistence (embedded LIST/INFO for WAV and sidecar for non-WAV), audio extraction, playback workflow handling, and conversion routing.
10
10
11
11
12
12
<palign="center">
@@ -39,28 +39,28 @@ CodecMedia is a Java library for media probing, validation, metadata sidecar per
39
39
- WebM (EBML container parsing)
40
40
- Validation with size limits and strict parser checks for MP3/OGG/WAV/AIFF/FLAC/PNG/JPEG/WebP/BMP/TIFF/HEIC/HEIF/AVIF/MOV/MP4/WebM
41
41
- MOV/MP4/WebM probe tags now include richer video metadata when present (for example `displayAspectRatio`, `bitDepth`, `videoBitrateKbps`, `audioBitrateKbps`)
42
-
- Metadata read/write with sidecar persistence (`.codecmedia.properties`)
42
+
- Metadata read/write with embedded WAV LIST/INFO support and sidecar persistence (`.codecmedia.properties`) for non-WAV inputs
43
43
- In-Java extraction and conversion file operations
- Playback API with dry-run supportand optional desktop-open backend
45
+
- Playback API with dry-run support, internal Java sampled backend for WAV/AIFF family, and optional desktop-open fallback
46
46
- Conversion hub routing with explicit unsupported routes and a real `wav <-> pcm` path (`WAV -> PCM` data-chunk extraction, `PCM -> WAV` wrapping)
47
47
48
48
## API Behavior Summary
49
49
50
50
-`get(input)`: alias of `probe(input)` for convenience.
51
51
-`probe(input)`: detects media/container characteristics and returns technical stream info for supported formats.
52
-
-`readMetadata(input)`: returns derived probe metadata plus sidecar entries when present.
53
-
-`writeMetadata(input, metadata)`: validates and writes metadata to a sidecar properties file next to the input.
52
+
-`readMetadata(input)`: returns derived probe metadata plus embedded LIST/INFO tags for WAV, and sidecar entries for non-WAV when present.
53
+
-`writeMetadata(input, metadata)`: validates and writes embedded LIST/INFO tags for WAV, and writes a sidecar properties file next to non-WAV inputs.
54
54
-`extractAudio(input, outputDir, options)`: validates audio input and writes extracted output into `outputDir`.
55
55
-`convert(input, output, options)`: performs routed conversion behavior and enforces `overwrite` handling.
56
-
-`play(input, options)`: supports dry-run playbackand optional system default app launch.
56
+
-`play(input, options)`: supports dry-run playback, routes WAV/AIFF-family playback through an internal Java sampled backend, and falls back to optional system default app launch.
57
57
-`validate(input, options)`: validates existence, max size, and optional strict parser-level checks.
58
58
59
59
## Notes and Limitations
60
60
61
61
- Current probing focuses on **technical media info** (mime/type/streams/basic tags).
62
62
- Probe routing now performs a lightweight header-prefix sniff before full decode to reduce unnecessary full-file reads for clearly unsupported/unknown inputs.
63
-
-`readMetadata`currently uses sidecar metadata persistence; it is **not** a full embedded tag extractor (for example ID3 album art/APIC).
63
+
-`readMetadata`supports embedded LIST/INFO for WAV plus sidecar metadata persistence for non-WAV inputs; it is **not** a full embedded tag extractor for other formats (for example ID3 album art/APIC).
64
64
- Audio-to-audio conversion is not implemented yet for general real transcode cases (for example `mp3 -> ogg`).
65
65
- The currently implemented audio route is `wav <-> pcm`:
66
66
-`wav -> pcm`: extracts raw PCM payload from WAV `data` chunk
0 commit comments