Repository navigation
Releases: AudDMusic/audd-cpp
Release list
v1.5.16
The custom-catalog access error message and custom-catalog docs now say to use the enterprise endpoint to scan beyond the first 12 seconds of a file. The standard endpoint analyzes only the first 12 seconds of the audio; the previous text said 25 seconds.
v1.5.15
Recognition and mutating calls no longer retry a request once its body may have reached the server. Transport failures are now classified pre- vs post-upload: CURLcodes that can only occur before the transfer starts (DNS resolution, TCP connect, TLS handshake, malformed URL) count as pre-upload, while ambiguous codes such as a timeout count as pre-upload only when zero request-body bytes were handed to the transport and no HTTP status line came back. recognize, recognize_enterprise, and mutating stream operations (add, set_url, del, set_callback_url) retry only pre-upload failures, so a metered request is never re-submitted — and re-billed — after the upload completed; previously every connection error was retried, including timeouts after a completed upload. AudDConnectionError now exposes failed_before_upload() so callers can make the same distinction. Idempotent reads (stream list, callback URL reads, longpoll fetches) keep retrying all connection errors, and custom-catalog add remains single-attempt.
v1.5.14
Response fields that arrive with an unexpected but convertible JSON scalar type are now coerced to the field's declared type instead of degrading to a default. Integer fields accept numeric strings ("85" -> 85), doubles (truncated toward zero), and booleans; string fields accept numbers (rendered without a trailing ".0" for integers) and booleans; double fields accept ints and numeric strings; boolean fields accept numbers (nonzero is true) and a strict case-insensitive whitelist of words ("true"/"1"/"yes"/"on" vs "false"/"0"/"no"/"off"/""). Numeric-string parsing is full-string strict and rejects partial parses and non-decimal forms (nan, inf, hex), so a value that cannot be converted still degrades to the field's default rather than a garbage result. Wrong-shaped containers keep degrading and well-typed responses are unaffected.
v1.5.13
Fixes a crash when a multipart upload or GET hit a DNS/connect/TLS/timeout failure — libcurl handles are now released exactly once on every path. Success responses whose result field has an unexpected shape degrade to empty results instead of throwing. Longpoll reconnects with bounded backoff on transient connection errors and skips unparseable event bodies instead of ending the subscription. The callback-URL return collision check matches the exact query key, so parameters like _return no longer false-positive. Installing the vendored nlohmann/json is now opt-in (-DAUDD_INSTALL_VENDORED_JSON=ON, placed under include/audd/third_party). The version macro is now AUDD_CPP_VERSION, with AUDD_VERSION kept as a guarded alias, and LongpollOptions.since_time is a long long.
v1.5.12
Enterprise matches now carry start_seconds / end_seconds — where each song plays in your file, in seconds. recognize_enterprise asks for accurate offsets by default so they're precise. The raw start_offset / end_offset remain as the fragment-relative milliseconds.
v1.5.11
Response parsing is now lenient: the SDK no longer throws when a field is missing or has an unexpected type. Enterprise responses with no score (or missing isrc/upc/label, and some fields on YouTube-sourced entries) now parse cleanly, with absent fields degrading to null/empty/zero instead of raising. Genuine errors (API status=error, undecodable JSON, transport failures, and invalid caller input) still raise as before.