diff --git a/.gitignore b/.gitignore index b7e2626..378eac2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -*.*~ -*.o - +build diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3b14d96 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 3.16) +project(samplebrain VERSION 1.0 LANGUAGES C CXX) + +include(Dependencies.cmake) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +# Set up AUTOMOC and some sensible defaults for runtime execution +# When using Qt 6.3, you can replace the code block below with +# qt_standard_project_setup() +set(CMAKE_AUTOMOC ON) +include(GNUInstallDirs) +set(CMAKE_AUTOUIC ON) + +find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Widgets) + +qt_add_executable(samplebrain WIN32 MACOSX_BUNDLE + app/MainWindow.cpp app/MainWindow.h + app/SettingsDialog.cpp app/SettingsDialog.h + app/audio_thread.cpp + app/feedback.cpp + app/process_thread.cpp + app/qtmain.cpp + app/sound_items.cpp + brain/src/aquila/filter/MelFilter.cpp + brain/src/aquila/filter/MelFilterBank.cpp + brain/src/aquila/transform/Dct.cpp + brain/src/block.cpp + brain/src/block_stream.cpp + brain/src/brain.cpp + brain/src/fft.cpp + brain/src/mfcc.cpp + brain/src/renderer.cpp + brain/src/search_params.cpp + brain/src/spiralcore/OSC_server.cpp + brain/src/spiralcore/allocator.cpp + brain/src/spiralcore/audio.cpp + brain/src/spiralcore/command_ring_buffer.cpp + brain/src/spiralcore/portaudio_client.cpp + brain/src/spiralcore/ring_buffer.cpp + brain/src/spiralcore/sample.cpp + brain/src/spiralcore/stream.cpp + brain/src/status.cpp + brain/src/window.cpp + gui/samplebrain.ui + gui/settings.ui +) +target_include_directories(samplebrain PRIVATE + . + /opt/homebrew/include + /usr/local/include + 2 + brain/src +) + +target_link_libraries(samplebrain PRIVATE + # Remove: L.. + # Remove: L/opt/homebrew/lib + # Remove: L/usr/local/lib + Qt::Core + Qt::Gui + Qt::Widgets + dl + fftw3 + lo_shared + m + portaudio + pthread + sndfile +) + +target_compile_options(samplebrain PUBLIC + -O3 + -Wall + -Wno-unused + -std=c++11 +) + + +# Resources: +set(samplebrain_resource_files + "app/images/at.png" + "app/images/pause.png" + "app/images/play.png" + "app/images/record.png" + "app/images/settings.png" + "app/images/stop.png" +) + +qt_add_resources(samplebrain "samplebrain" + PREFIX + "/images" + BASE + "app" + FILES + ${samplebrain_resource_files} +) + +install(TARGETS samplebrain + BUNDLE DESTINATION . + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +# Consider using qt_generate_deploy_app_script() for app deployment if +# the project can use Qt 6.3. In that case rerun qmake2cmake with +# --min-qt-version=6.3. diff --git a/Dependencies.cmake b/Dependencies.cmake new file mode 100644 index 0000000..848c56a --- /dev/null +++ b/Dependencies.cmake @@ -0,0 +1,49 @@ +################################################################################ +# FetchContent +################################################################################ + +include(FetchContent) + +################################################################################ +# fftw3 +################################################################################ + +FetchContent_Declare( + fftw3 + URL http://fftw.org/fftw-3.3.10.tar.gz + URL_HASH MD5=8ccbf6a5ea78a16dbc3e1306e234cc5c) +FetchContent_MakeAvailable(fftw3) + +include_directories(${fftw3_SOURCE_DIR}/api) + +################################################################################ +# liblo +################################################################################ + +FetchContent_Declare( + liblo + URL http://downloads.sourceforge.net/liblo/liblo-0.31.tar.gz + URL_HASH MD5=14378c1e74c58e777fbb4fcf33ac5315) +FetchContent_MakeAvailable(liblo) + +add_subdirectory(${liblo_SOURCE_DIR}/cmake) + +################################################################################ +# PortAudio +################################################################################ + +FetchContent_Declare( + portaudio + URL http://files.portaudio.com/archives/pa_stable_v190700_20210406.tgz + URL_HASH MD5=ad319249932c6794b551d954b8844402) +FetchContent_MakeAvailable(portaudio) + +################################################################################ +# libsndfile +################################################################################ + +FetchContent_Declare( + libsndfile + GIT_REPOSITORY https://github.com/libsndfile/libsndfile + GIT_TAG 1.1.0) +FetchContent_MakeAvailable(libsndfile) diff --git a/app/MainWindow.h b/app/MainWindow.h index 14d05c4..ab687f5 100644 --- a/app/MainWindow.h +++ b/app/MainWindow.h @@ -18,7 +18,7 @@ #include #include #include -#include "ui_samplebrain.h" +#include "../gui/ui_samplebrain.h" #include "SettingsDialog.h" #include diff --git a/app/SettingsDialog.h b/app/SettingsDialog.h index df5248f..bdc5804 100644 --- a/app/SettingsDialog.h +++ b/app/SettingsDialog.h @@ -20,7 +20,7 @@ #include #include #include -#include "ui_settings.h" +#include "../gui/ui_settings.h" #include #include diff --git a/building.md b/building.md index f6d80c4..90c068e 100644 --- a/building.md +++ b/building.md @@ -1,8 +1,8 @@ # Building from source ## Linux (Ubuntu) -Install libraries for the sample engine (use brew on mac, MinGW on win): +Install cmake: - $ sudo apt install libsndfile1-dev portaudio19-dev liblo-dev libfftw3-dev + $ sudo apt install cmake Install dependencies for the interface: @@ -16,15 +16,14 @@ Build & run it: $ mkdir build $ cd build - $ qmake .. - $ make - $ sudo make install - $ samplebrain + $ cmake .. + $ cmake --build . + $ ./samplebrain ## Mac -Install libraries for sample engine: +Install cmake: - $ brew install fftw portaudio liblo libsndfile + $ brew install cmake Install dependencies for the interface: @@ -35,10 +34,10 @@ Build & run it: $ mkdir build $ cd build - $ qmake .. - $ make + $ cmake .. + $ cmake --build . -`samplebrain.app` should then be in the app folder for you to run. +`samplebrain.app` should then be in the build folder for you to run. # Mac build additions diff --git a/samplebrain.pro b/samplebrain.pro deleted file mode 100644 index 8b047df..0000000 --- a/samplebrain.pro +++ /dev/null @@ -1,71 +0,0 @@ -###################################################################### -# Automatically generated by qmake (2.01a) Sun Jul 5 17:49:45 2015 -###################################################################### - -TEMPLATE = app -TARGET = samplebrain -DEPENDPATH += . 2 -INCLUDEPATH += . 2 - -QT += core gui widgets - -# Input -HEADERS += app/MainWindow.h \ - app/SettingsDialog.h - -FORMS += gui/samplebrain.ui \ - gui/settings.ui - -SOURCES += app/MainWindow.cpp \ - app/SettingsDialog.cpp \ - app/sound_items.cpp \ - app/audio_thread.cpp \ - app/process_thread.cpp \ - app/feedback.cpp \ - app/qtmain.cpp \ - brain/src/block.cpp \ - brain/src/brain.cpp \ - brain/src/fft.cpp \ - brain/src/mfcc.cpp \ - brain/src/renderer.cpp \ - brain/src/search_params.cpp \ - brain/src/status.cpp \ - brain/src/window.cpp \ - brain/src/block_stream.cpp \ - brain/src/aquila/filter/MelFilterBank.cpp \ - brain/src/aquila/filter/MelFilter.cpp \ - brain/src/aquila/transform/Dct.cpp \ - brain/src/spiralcore/sample.cpp \ - brain/src/spiralcore/ring_buffer.cpp \ - brain/src/spiralcore/command_ring_buffer.cpp \ - brain/src/spiralcore/portaudio_client.cpp \ - brain/src/spiralcore/audio.cpp \ - brain/src/spiralcore/OSC_server.cpp \ - brain/src/spiralcore/allocator.cpp \ - brain/src/spiralcore/stream.cpp - -INCLUDEPATH += brain/src -INCLUDEPATH += /usr/local/include -INCLUDEPATH += /opt/homebrew/include -LIBS += -L.. -L/usr/local/lib -L/opt/homebrew/lib -lportaudio -lfftw3 -lsndfile -llo -ldl -lpthread -lm - -QMAKE_CXXFLAGS += -O3 -Wall -Wno-unused -std=c++11 - -# assets -RESOURCES = app/samplebrain.qrc -ICON = desktop/samplebrain.icns - -PREFIX = $$(PREFIX) -isEmpty(PREFIX) { - PREFIX = /usr -} - -unix:desktopfile.path = $$PREFIX/share/applications/ -unix:desktopfile.files = desktop/samplebrain.desktop -unix:iconfile.path = $$PREFIX/share/icons/hicolor/scalable/apps -unix:iconfile.files = desktop/samplebrain.svg -unix:metainfofile.path = $$PREFIX/share/metainfo -unix:metainfofile.files = desktop/org.thentrythis.Samplebrain.metainfo.xml - -target.path = $$PREFIX/bin -INSTALLS += target desktopfile iconfile metainfofile