Skip to content
Draft
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ jobs:
with:
# This should always match the minimum required version in
# our CMakeLists.txt
cmake-version: "3.21.x"
cmake-version: "3.24.x"

- name: "[Windows] Set up cmake"
uses: jwlawson/actions-setup-cmake@v2.0
Expand All @@ -137,7 +137,7 @@ jobs:
# This is a workaround for a SSL false positive in cmake 3.26.4
# When downloading the manual. 3.21 is required for installing the
# ANGLE Dlls via IMPORTED_RUNTIME_ARTIFACTS
cmake-version: "3.21.x"
cmake-version: "3.24.x"

- name: "[Windows] Set up MSVC Developer Command Prompt"
if: runner.os == 'Windows'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ jobs:
with:
# This should always match the minimum required version in
# our CMakeLists.txt
cmake-version: "3.21.x"
cmake-version: "3.24.x"

- name: "[Windows] Set up cmake"
uses: jwlawson/actions-setup-cmake@v2.1
Expand All @@ -247,7 +247,7 @@ jobs:
# This is a workaround for a SSL false positive in cmake 3.26.4
# When downloading the manual. 3.21 is required for installing the
# ANGLE Dlls via IMPORTED_RUNTIME_ARTIFACTS
cmake-version: "3.21.x"
cmake-version: "3.24.x"

- name: "[Windows] Set up MSVC Developer Command Prompt"
if: runner.os == 'Windows'
Expand Down
61 changes: 61 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3488,6 +3488,56 @@ if(KEYFINDER)
target_compile_definitions(mixxx-lib PUBLIC __KEYFINDER__)
endif()

# SignalSmith
option(
SIGNALSMITH
"Enable the SignalSmith Stretch engine for pitch-bending (experimental)"
OFF
)
if(SIGNALSMITH)
set(
SIGNALSMITH_INSTALL_DIR
"${CMAKE_CURRENT_BINARY_DIR}/lib/signalsmith-install"
)
ExternalProject_Add(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not work with debian. We either need to contribute a debian folder for signal smith or copy signalsmith to our lib folder.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the issue with debian? I guess the copy option could be viable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They do not allow to download third party software during the build process.

@acolombier acolombier Jan 25, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh this is going to be a pain for #15888. Though TagLib merged to contribution this morning and I assume will likely release this in the next version, Debian will likely not upgrade to it till the next major release (same goes for Ubuntu).

Not a problem for SignalSmith tho, so let's discuss that there. Is there any objection with using submodules? The SignalSmith stretcher internally relies on submodules too.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Submodule do not really fit to the modular concept of vcpkg, Debian and RPM.
Having them in our lib folder is IMHO an unnecessary hassle. We don't have submodules yet. I prefer a literal copy in that case.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can try to contact the author to see if he has any interest.

@daschuer daschuer Jan 25, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's fair, but if we have the opportunity to centralise one in a single place, I guess this is better.

It depends. Currently while it is under active development a lib folder copy is better.
When I look after years to Rubberband and Soundtouch the VCPKG and Linux Distro maintained version is "better". Original we had Soundtouch in our lib folder and have removed it as soon a suitable version was found in all distros.

The Linux maintainer anyway try to rip off everything from our libs folder. So we need to keep an eye on the distro maintained version anyway.
See also the mess with "libshout"

In case of taglib we can also decide if we want to ship it via lib folder or PPA.
The same is an issue with Portaudio which has now Pulse support, but is not yet released to use it.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They do not allow to download third party software during the build process.

same for fedora/rpms afaik.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that Geraint (the library author) came back to me and mentioned they haven't had interest to maintain a Debian package at present, but were happy for us to vendor the code and add a copy to lib. They also offered to double license the library in case MIT wasn't ideal, but I believe we should be fine with the current license.
I will capture that as an issue. It should be pretty straight forward to setup if we want to make SignalSmith stretch part of the stable release, but this solution allows us to easily update during the trial.

signalsmith-stretch
GIT_REPOSITORY
"https://github.com/Signalsmith-Audio/signalsmith-stretch.git"
GIT_TAG "57b93f4e9206a089a45387eaa39bdc9f310d3308"
PREFIX "signalsmith-stretch"
INSTALL_DIR "${SIGNALSMITH_INSTALL_DIR}"
LIST_SEPARATOR "|"
CMAKE_ARGS
-DCMAKE_SKIP_INSTALL_ALL_DEPENDENCY=ON
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCMAKE_PREFIX_PATH=${PIPE_DELIMITED_CMAKE_PREFIX_PATH}
-$<IF:$<BOOL:${CMAKE_TOOLCHAIN_FILE}>,D,U>CMAKE_TOOLCHAIN_FILE:PATH=${CMAKE_TOOLCHAIN_FILE}
-$<IF:$<BOOL:${CMAKE_OSX_DEPLOYMENT_TARGET}>,D,U>CMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
-$<IF:$<BOOL:${CMAKE_OSX_ARCHITECTURES}>,D,U>CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-$<IF:$<BOOL:${CMAKE_ANDROID_NDK}>,D,U>CMAKE_ANDROID_NDK=${CMAKE_ANDROID_NDK}
-DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
BUILD_COMMAND ${CMAKE_COMMAND} --build .
INSTALL_COMMAND true
EXCLUDE_FROM_ALL TRUE
)

add_dependencies(mixxx-lib signalsmith-stretch)
target_include_directories(
mixxx-lib
SYSTEM
PUBLIC
"${CMAKE_CURRENT_BINARY_DIR}/signalsmith-stretch/src/signalsmith-stretch-build/_deps/signalsmith-linear-src/include/"
"${CMAKE_CURRENT_BINARY_DIR}/signalsmith-stretch/src/signalsmith-stretch/"
)
target_sources(
mixxx-lib
PRIVATE src/engine/bufferscalers/enginebufferscalesignalsmith.cpp
)
target_compile_definitions(mixxx-lib PUBLIC __SIGNALSMITH__)
endif()

# FLAC
find_package(FLAC REQUIRED)
target_link_libraries(mixxx-lib PRIVATE FLAC::FLAC)
Expand Down Expand Up @@ -3903,6 +3953,10 @@ if(QML)
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/res/qml"
DESTINATION "${MIXXX_INSTALL_DATADIR}"
)

if(SIGNALSMITH)
target_compile_definitions(mixxx-qml-lib PUBLIC __SIGNALSMITH__)
endif()
endif()

option(DEBUG_ASSERTIONS_FATAL "Fail if debug become true assertions" OFF)
Expand Down Expand Up @@ -5185,6 +5239,13 @@ if(QML)
target_compile_definitions(mixxx-qml-lib PRIVATE rendergraph=rendergraph_sg)
target_compile_definitions(mixxx-qml-lib PRIVATE __SCENEGRAPH__)
target_compile_definitions(mixxx-qml-lib PRIVATE allshader=allshader_sg)
target_include_directories(
mixxx-qml-lib
SYSTEM
PUBLIC
"${CMAKE_CURRENT_BINARY_DIR}/signalsmith-stretch/src/signalsmith-stretch-build/_deps/signalsmith-linear-src/include/"
"${CMAKE_CURRENT_BINARY_DIR}/signalsmith-stretch/src/signalsmith-stretch/"
)
endif()

# WavPack audio file support
Expand Down
Loading
Loading