diff --git a/CMakeLists.txt b/CMakeLists.txt index f61900c10ad..cf44b174833 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2425,7 +2425,7 @@ string(REPLACE ";" "|" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}") option(KEYFINDER "KeyFinder support" ON) if(KEYFINDER) set(MIN_LIBKEYFINDER_VERSION 2.2.4) - set(FETCH_LIBKEYFINDER_VERSION 2.2.6) + set(FETCH_LIBKEYFINDER_VERSION 2.2.8) find_package(KeyFinder ${MIN_LIBKEYFINDER_VERSION}) if (KeyFinder_FOUND) target_link_libraries(mixxx-lib PRIVATE KeyFinder::KeyFinder) @@ -2443,8 +2443,8 @@ if(KEYFINDER) # copy it into DOWNLOAD_DIR under DOWNLOAD_NAME prior to starting # the configuration. ExternalProject_Add(libkeyfinder - URL "https://github.com/mixxxdj/libkeyfinder/archive/refs/tags/v${FETCH_LIBKEYFINDER_VERSION}.zip" - URL_HASH SHA256=f15deb56c2dcaa6b10dc3717a7d2f42a8407c04ad550f694de42118be998d256 + URL "https://github.com/mixxxdj/libkeyfinder/archive/refs/tags/${FETCH_LIBKEYFINDER_VERSION}.zip" + URL_HASH SHA256=4f10e9e5673d948776e47e78273fa4d61408155cb0e210af1538c83222f285d4 DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/downloads" DOWNLOAD_NAME "libkeyfinder-${FETCH_LIBKEYFINDER_VERSION}.zip" INSTALL_DIR "${KeyFinder_INSTALL_DIR}" diff --git a/res/controllers/Traktor-Kontrol-S3-hid-scripts.js b/res/controllers/Traktor-Kontrol-S3-hid-scripts.js index e5d35a0a7d0..c7e9d3b8ef1 100644 --- a/res/controllers/Traktor-Kontrol-S3-hid-scripts.js +++ b/res/controllers/Traktor-Kontrol-S3-hid-scripts.js @@ -286,21 +286,16 @@ TraktorS3.Controller = class { engine.makeConnection(ch, "end_of_track", TraktorS3.Channel.prototype.endOfTrackHandler.bind(chanob)); } + // Set each InputReport to the bitwise inverted state first, + // and than apply the non-inverted initial state. + // This is done, because the common-hid-packet-parser only triggers + // the callback functions in case of a delta to the previous data. + for (let inputReportIdx = 0x01; inputReportIdx <= 0x02; ++inputReportIdx) { + const reportData = new Uint8Array(controller.getInputReport(inputReportIdx)); - // Query the current values from the controller and set them. The packet - // parser ignores the first time a value is set, so we'll need to set it - // with different values once. Report 2 contains the state of the mixer - // controls. - const report2Values = new Uint8Array(controller.getInputReport(2)); - TraktorS3.incomingData(new Uint8Array([2, ...Uint8Array.from(report2Values.map(x => ~x))])); - TraktorS3.incomingData(new Uint8Array([2, ...Uint8Array.from(report2Values)])); - - // Report 1 is the state of the deck controls. These shouldn't have any - // initial effect, and most of these values will be 0 anyways. We'll - // just tell the packet parser the current values so it won't ignore the - // next input. - const report1Values = new Uint8Array(controller.getInputReport(1)); - TraktorS3.incomingData(new Uint8Array([1, ...Uint8Array.from(report1Values)])); + TraktorS3.incomingData([inputReportIdx, ...reportData.map(x => ~x)]); + TraktorS3.incomingData([inputReportIdx, ...reportData]); + } // NOTE: Soft takeovers must only be enabled after setting the initial // value, or the above line won't have any effect diff --git a/src/sources/soundsourcemp3.cpp b/src/sources/soundsourcemp3.cpp index f41a9190c29..3b431376fbd 100644 --- a/src/sources/soundsourcemp3.cpp +++ b/src/sources/soundsourcemp3.cpp @@ -109,7 +109,11 @@ inline bool isUnrecoverableError(mad_error error) { return (MAD_ERROR_NONE != error) && !MAD_RECOVERABLE(error); } -inline bool hasUnrecoverableError(const mad_stream* pMadStream) { +#ifndef MIXXX_DEBUG_ASSERTIONS_ENABLED +[[maybe_unused]] +#endif +inline bool +hasUnrecoverableError(const mad_stream* pMadStream) { if (pMadStream) { return isUnrecoverableError(pMadStream->error); } diff --git a/tools/json2github.py b/tools/json2github.py index a258e4c68fc..a9f2b6a6259 100644 --- a/tools/json2github.py +++ b/tools/json2github.py @@ -630,7 +630,7 @@ def run_import(self, lp_issues, lp_milestones): lp_issues[issuedata["id"]]["gh_status_comment_imported"] = True self.logger.info( f"Imported {i}/{num_issues} " - f"({'{:.2f}'.format((i/num_issues)*100)}%)" + f"({'{:.2f}'.format((i / num_issues) * 100)}%)" ) for issuedata in sorted(