- Add JSON-output support
- Always output length and fade length in verbose mode (id666). Previously zero-values were omitted.
- Bump dependencies
- Bump dependencies.
- Fix broken latin-1 parsing:
Latin-1 code points were parsed as utf-8 resulting in the replacement character
'�' (U+FFFD
).
The program now validates utf-8 tags when parsing. If validation fails the tag is parsed as latin-1.
This will still cause mojibake for other encodings such as UTF-16, JIS, EUC etcetera.
Bump dependencies.
Bump dependencies (JUnit)
- End length - allow negative values (
signed int 32
)
According to a better spec I found in kfile_spc
end length can contain
a negative value.
- Code refactoring (use new Java 17 features)
- Length in seconds is masked to 24-bits (id666)
- Convert SPC spec to utf-8
Some xid6-tags were signed int 32
whereas the spec says uint32
. Fixed the
following:
- loop length
- end length
- fade length
- intro length
A warning is printed if the minor version (binary) field doesn't match the minor version in the header (plain text).
Mixing (pre-amp) level is parsed correctly (xid6).
The length is 4 bytes. The old spec had an error where this field's length was set to 1 byte. This was fixed in commit 29082c0e but the code was never updated.
Add support for two ID666-fields:
- Fade length-field ("Number of seconds to play song before fading out")
- Length-field ("Length of fade in milliseconds")
- Code refactoring
- Bump dependencies
- Bump dependencies
- Add Maven-wrapper
- Migrate to Java 17
- Minor refactoring
- Documentation fixes (markdown and typos)
- Bug fix: Display empty string if dumped-date is not set (instead of printing
null
)
- Simplified factory pattern
- Replacing abstract class with interface
- Made
Name
-enum nested insideEmulator
- Bug fix. No longer crashes when parsing invalid "dumped-dates" in
YYYY-MM-DD
-format
- Bug fix: Make maven run unit tests
- API changes:
Id666
-class method return type changed fromString
toLocalDate
public String dateDumpWasCreated() // re-named method
public LocalDate getDateDumpWasCreated() // new method
Id666
"dumped date"-parsing is now spec compliant:
- Most dumped-dates in text-tag format are stored in the ISO-8601 date-format
(
YYYY/MM/DD
).
- The spec however, clearly states that text-tag dump-dates are in:
MM/DD/YYYY
-format.
- Dates were parsed as:
DD-MM-YYYY
if possible. - For example:
06/12/1999
was parsed as1999-12-06
(6 December 1999)
- Allowed formats:
YYYY-MM-DD
,MM-DD-YYYY
- Sometimes allowed:
YYYY-DD-MM
,DD-MM-YYYY
- For example:
06/12/1999
is parsed as1999-06-12
(12 June 1999)
- Try to parse as ISO-8601 date
YYYY-MM-DD
- Try to parse as spec-date
MM/DD/YYYY
- a) If month/day is invalid in step 1 or 2. Swap them and parse as
DD/MM
2005-31-12
gets parsed as2005-12-31
31-12-2005
gets parsed as2005-12-31
05-12-1999
gets parsed as1999-05-12
31-31-2005
fails parsing2001-02-29
fails parsing (not leap year)
- Migrating to JUnit 5 (jupiter)
- Refactor unit tests to use parameterized tests (data providers)
- Lenient date-string parsing. Allow dash-separator
-
in "dumped date"-tags. - For example:
12-31-2000
- Bug fix. Fix crash on
MM-DD-YYYY
date-format for "dumped date"-field. MM-DD-YYYY
is now allowed for text-format tags (as stated in the spec).- Note that dates will be parsed as
DD-MM-YYYY
if permitted.
- Breaking change: "Dumped date"-field (
Id666
) is consistently formatted on output asyyyy/MM/dd
- For example:
Date SPC was dumped: 2003/12/24
- Binary tags:
yyyyMMdd
(20031224
) - Text tags: Inconsistent. Any 11 (sic) byte string allowed
- Binary tags:
Date SPC was dumped: yyyy/MM/dd
- Text tags:
Date SPC was dumped: yyyy/MM/dd
Permitted date formats:
yyyy/MM/dd
dd/MM/yyyy
Permitted date formats:
dd/MM/yyyy
(stored as{ byte, byte, short }
)
- Fix bug in SPC spec (binary dump date)
- Log warning if "dumped date"-field pre-dates birth of SPC-format (from
SPCTool
). Only implemented for binary tags. - Fix typo in assertion message
- Code refactoring
- Add more unit tests for parsing of textual SPC-tags
- Fix broken binary dump-date parsing.
Binary dump dates are stored as: byte, byte, short { day, month, year }
in little-endian format. Previously they were incorrectly parsed as a 4-byte int
and
thus failed to parse as a valid ISO-8601 date.
09:25:57.125 WARN: Invalid date format: java.time.format.DateTimeParseException: Text '131402265' could not be parsed at index 0
09:25:57.129 WARN: Setting dump date to empty as fallback
$ java -jar spctag.jar -v "17 - Ending.spc"
File header: SNES-SPC700 Sound File Data v0.30
Tag format: Binary
Artist: Stefan Kramer, Jesper "Jo" Olsen
Song title: Ending
Game title: Rendering Ranger R2
Name of dumper: Knurek
Comments:
Date SPC was dumped: 20051025
Emulator used to dump SPC: ZSNES
-----------
XID6 tags:
-----------
OST track: 0
Publisher's name: Rainbow Arts
Copyright year: 1995
Introduction length: 3.0
Fade length: 448000
- Fix bug in xid6 dumped date-validation
Dates such as 20040404
failed to set the xid6 "dumped date" tag and resulted in
a log warning. Xid6 dump dates are extremely rare so this never happened in practice
- Fix broken API. Lenient dump date parsing: Set date to blank string instead of crashing
- Fix bug in dumped date output
- Fix bug that crashed if dumped date was missing (introduced in v0.3.3)
- Fix bug that caused log warnings
- Fixed id666 dumped date parsing (binary format)
- Bump dependencies
- Fixed bug in debug logging
- Increase test coverage
- Code refactoring
- Update dependencies
- Code refactoring
- Add new command line option for xid6.
- No longer crashes when file size is too small to fit xid6.
- Read and parse number of times to loop to xid6.
- Add logger for debugging
- Version 0.3 - Added xid6-support (extended tags).
- Update to Java 11. September 2021
- utf8 support. November 2019
- First release! February 2019