From b9eebb628aac878d584ff12dcb50814331ec9d40 Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Fri, 2 Aug 2019 14:09:11 +0300 Subject: [PATCH] audaspace: Fix exports for mingw. Add upstream patches to be compatible with blender. Fix dependencies --- ...-Fix-for-seeking-with-modified-pitch.patch | 25 + ... 0002-Bugfix-for-building-with-gcc7.patch} | 27 +- .../0003-Make-fftw3-optional.patch | 491 ++++++++++++++++++ ...figure-whether-to-build-versioned-pl.patch | 80 +++ ... 0005-Support-newer-ffmpeg-versions.patch} | 9 +- .../0006-Udpate-for-travis.ci.patch | 25 + ...-Some-fixes-backported-from-Blender.patch} | 28 +- .../0008-Silence-some-warnings.patch | 158 ++++++ ...09-Bugfix-memory-leak-in-python-API.patch} | 5 +- ...nAL-recreate-device-if-disconnected.patch} | 9 +- ...-non-existing-devices-to-the-device-.patch | 31 ++ ...0012-Adding-a-modulator-sound-effect.patch | 463 +++++++++++++++++ ...rrect-length-for-modulator-and-super.patch | 73 +++ ...rate-parameter-to-silence-generation.patch | 274 ++++++++++ ...inor-CMakeLists.txt-formatting-fixes.patch | 36 ++ ...Fix-Missing-include-in-FileManager.h.patch | 24 + ...locate.patch => 0100-mingw-relocate.patch} | 0 mingw-w64-audaspace/0101-mingw-exports.patch | 11 + mingw-w64-audaspace/PKGBUILD | 86 ++- 19 files changed, 1783 insertions(+), 72 deletions(-) create mode 100644 mingw-w64-audaspace/0001-Fix-for-seeking-with-modified-pitch.patch rename mingw-w64-audaspace/{01-gcc7-build.patch => 0002-Bugfix-for-building-with-gcc7.patch} (50%) create mode 100644 mingw-w64-audaspace/0003-Make-fftw3-optional.patch create mode 100644 mingw-w64-audaspace/0004-Build-option-configure-whether-to-build-versioned-pl.patch rename mingw-w64-audaspace/{02-support-new-ffmpeg.patch => 0005-Support-newer-ffmpeg-versions.patch} (99%) create mode 100644 mingw-w64-audaspace/0006-Udpate-for-travis.ci.patch rename mingw-w64-audaspace/{03-backport-from-blender.patch => 0007-Some-fixes-backported-from-Blender.patch} (82%) create mode 100644 mingw-w64-audaspace/0008-Silence-some-warnings.patch rename mingw-w64-audaspace/{04-python-memory-leak.patch => 0009-Bugfix-memory-leak-in-python-API.patch} (89%) rename mingw-w64-audaspace/{05-openal-recreate-device.patch => 0010-OpenAL-recreate-device-if-disconnected.patch} (97%) create mode 100644 mingw-w64-audaspace/0011-Bugfix-don-t-add-non-existing-devices-to-the-device-.patch create mode 100644 mingw-w64-audaspace/0012-Adding-a-modulator-sound-effect.patch create mode 100644 mingw-w64-audaspace/0013-Bugfix-Return-correct-length-for-modulator-and-super.patch create mode 100644 mingw-w64-audaspace/0014-Add-sample-rate-parameter-to-silence-generation.patch create mode 100644 mingw-w64-audaspace/0015-Minor-CMakeLists.txt-formatting-fixes.patch create mode 100644 mingw-w64-audaspace/0016-Fix-Missing-include-in-FileManager.h.patch rename mingw-w64-audaspace/{10-mingw-relocate.patch => 0100-mingw-relocate.patch} (100%) create mode 100644 mingw-w64-audaspace/0101-mingw-exports.patch diff --git a/mingw-w64-audaspace/0001-Fix-for-seeking-with-modified-pitch.patch b/mingw-w64-audaspace/0001-Fix-for-seeking-with-modified-pitch.patch new file mode 100644 index 0000000000..d03a54eed1 --- /dev/null +++ b/mingw-w64-audaspace/0001-Fix-for-seeking-with-modified-pitch.patch @@ -0,0 +1,25 @@ +From 10413c522900d3aaadd5f5ae12163eee80ef18ae Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Sun, 5 Mar 2017 12:22:00 +0100 +Subject: [PATCH 01/16] Fix for seeking with modified pitch. + +Check Blender bug report T50843: Pitched Audio renders incorrectly in VSE. +--- + src/devices/SoftwareDevice.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/devices/SoftwareDevice.cpp b/src/devices/SoftwareDevice.cpp +index 5fbb68c..c944b9e 100644 +--- a/src/devices/SoftwareDevice.cpp ++++ b/src/devices/SoftwareDevice.cpp +@@ -357,6 +357,7 @@ bool SoftwareDevice::SoftwareHandle::seek(float position) + if(!m_status) + return false; + ++ m_pitch->setPitch(m_user_pitch); + m_reader->seek((int)(position * m_reader->getSpecs().rate)); + + if(m_status == STATUS_STOPPED) +-- +2.22.0 + diff --git a/mingw-w64-audaspace/01-gcc7-build.patch b/mingw-w64-audaspace/0002-Bugfix-for-building-with-gcc7.patch similarity index 50% rename from mingw-w64-audaspace/01-gcc7-build.patch rename to mingw-w64-audaspace/0002-Bugfix-for-building-with-gcc7.patch index 9952c44f89..a0c3eb31a0 100644 --- a/mingw-w64-audaspace/01-gcc7-build.patch +++ b/mingw-w64-audaspace/0002-Bugfix-for-building-with-gcc7.patch @@ -1,7 +1,7 @@ From aa11968dbf60f7e329a53ed49f67a5849d58114a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Fri, 31 Mar 2017 18:33:47 +0200 -Subject: [PATCH] Bugfix for building with gcc7. +Subject: [PATCH 02/16] Bugfix for building with gcc7. Thanks for reporting @ Dave Plater. --- @@ -20,32 +20,13 @@ index 2f62276..24ec089 100644 AUD_NAMESPACE_BEGIN /** -@@ -115,4 +116,4 @@ class AUD_API ThreadPool +@@ -115,4 +116,4 @@ private: */ void threadFunction(); }; -AUD_NAMESPACE_END \ No newline at end of file +AUD_NAMESPACE_END +-- +2.22.0 -From 2fb9862bfd7dd953a51f9bf4763bf0b308ddee13 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= -Date: Fri, 10 May 2019 23:04:14 +0200 -Subject: [PATCH] Fix: Missing include in FileManager.h. - ---- - include/file/FileManager.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/include/file/FileManager.h b/include/file/FileManager.h -index 03943ea..5670860 100644 ---- a/include/file/FileManager.h -+++ b/include/file/FileManager.h -@@ -27,6 +27,7 @@ - - #include - #include -+#include - - AUD_NAMESPACE_BEGIN - diff --git a/mingw-w64-audaspace/0003-Make-fftw3-optional.patch b/mingw-w64-audaspace/0003-Make-fftw3-optional.patch new file mode 100644 index 0000000000..f5bee46130 --- /dev/null +++ b/mingw-w64-audaspace/0003-Make-fftw3-optional.patch @@ -0,0 +1,491 @@ +From 19c8d9f5f2f0fbe386ba52e7b04fc3e4a1c8a553 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Sun, 13 Aug 2017 14:29:33 +0200 +Subject: [PATCH 03/16] Make fftw3 optional. + +--- + CMakeLists.txt | 130 ++++++++++++++++++++++++------------ + bindings/C/AUD_Sound.cpp | 4 ++ + bindings/C/AUD_Sound.h | 6 +- + bindings/python/PyAPI.cpp | 18 +++-- + bindings/python/PySound.cpp | 20 ++++-- + bindings/python/setup.py.in | 4 +- + 6 files changed, 126 insertions(+), 56 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0d549b5..d82dc21 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -42,14 +42,9 @@ set(SRC + src/fx/ADSR.cpp + src/fx/ADSRReader.cpp + src/fx/BaseIIRFilterReader.cpp +- src/fx/BinauralSound.cpp +- src/fx/BinauralReader.cpp + src/fx/ButterworthCalculator.cpp + src/fx/Butterworth.cpp + src/fx/CallbackIIRFilterReader.cpp +- src/fx/Convolver.cpp +- src/fx/ConvolverReader.cpp +- src/fx/ConvolverSound.cpp + src/fx/Delay.cpp + src/fx/DelayReader.cpp + src/fx/DynamicIIRFilter.cpp +@@ -60,13 +55,10 @@ set(SRC + src/fx/Envelope.cpp + src/fx/Fader.cpp + src/fx/FaderReader.cpp +- src/fx/FFTConvolver.cpp + src/fx/HighpassCalculator.cpp + src/fx/Highpass.cpp +- src/fx/HRTF.cpp + src/fx/IIRFilter.cpp + src/fx/IIRFilterReader.cpp +- src/fx/ImpulseResponse.cpp + src/fx/Limiter.cpp + src/fx/LimiterReader.cpp + src/fx/Loop.cpp +@@ -126,7 +118,6 @@ set(SRC + src/util/Barrier.cpp + src/util/Buffer.cpp + src/util/BufferReader.cpp +- src/util/FFTPlan.cpp + src/util/StreamBuffer.cpp + src/util/ThreadPool.cpp + ) +@@ -158,14 +149,9 @@ set(PUBLIC_HDR + include/fx/ADSR.h + include/fx/ADSRReader.h + include/fx/BaseIIRFilterReader.h +- include/fx/BinauralSound.h +- include/fx/BinauralReader.h + include/fx/ButterworthCalculator.h + include/fx/Butterworth.h + include/fx/CallbackIIRFilterReader.h +- include/fx/Convolver.h +- include/fx/ConvolverReader.h +- include/fx/ConvolverSound.h + include/fx/Delay.h + include/fx/DelayReader.h + include/fx/DynamicIIRFilter.h +@@ -176,15 +162,11 @@ set(PUBLIC_HDR + include/fx/Envelope.h + include/fx/Fader.h + include/fx/FaderReader.h +- include/fx/FFTConvolver.h + include/fx/HighpassCalculator.h + include/fx/Highpass.h +- include/fx/HRTF.h +- include/fx/HRTFLoader.h + include/fx/IDynamicIIRFilterCalculator.h + include/fx/IIRFilter.h + include/fx/IIRFilterReader.h +- include/fx/ImpulseResponse.h + include/fx/Limiter.h + include/fx/LimiterReader.h + include/fx/Loop.h +@@ -246,7 +228,6 @@ set(PUBLIC_HDR + include/util/Barrier.h + include/util/Buffer.h + include/util/BufferReader.h +- include/util/FFTPlan.h + include/util/ILockable.h + include/util/Math3D.h + include/util/StreamBuffer.h +@@ -281,6 +262,7 @@ option(SHARED_LIBRARY "Build Shared Library" TRUE) + option(WITH_C "Build C Module" TRUE) + option(WITH_DOCS "Build C++ HTML Documentation with Doxygen" TRUE) + option(WITH_FFMPEG "Build With FFMPEG" TRUE) ++option(WITH_FFTW "Build With FFTW" TRUE) + option(WITH_JACK "Build With Plugin" TRUE) + option(WITH_LIBSNDFILE "Build With LibSndFile" TRUE) + option(WITH_OPENAL "Build With OpenAL" TRUE) +@@ -351,8 +333,6 @@ if(WITH_C) + set(C_SRC + bindings/C/AUD_ThreadPool.cpp + bindings/C/AUD_Source.cpp +- bindings/C/AUD_HRTF.cpp +- bindings/C/AUD_ImpulseResponse.cpp + bindings/C/AUD_Device.cpp + bindings/C/AUD_DynamicMusic.cpp + bindings/C/AUD_Handle.cpp +@@ -364,8 +344,6 @@ if(WITH_C) + set(C_HDR + bindings/C/AUD_ThreadPool.h + bindings/C/AUD_Source.h +- bindings/C/AUD_HRTF.h +- bindings/C/AUD_ImpulseResponse.h + bindings/C/AUD_Device.h + bindings/C/AUD_DynamicMusic.h + bindings/C/AUD_Handle.h +@@ -376,6 +354,18 @@ if(WITH_C) + bindings/C/AUD_Types.h + ) + ++if(WITH_FFTW) ++ list(APPEND C_SRC ++ bindings/C/AUD_HRTF.cpp ++ bindings/C/AUD_ImpulseResponse.cpp ++ ) ++ ++ list(APPEND C_HDR ++ bindings/C/AUD_HRTF.h ++ bindings/C/AUD_ImpulseResponse.h ++ ) ++ endif() ++ + if(NOT SEPARATE_C) + list(APPEND SRC ${C_SRC}) + list(APPEND HDR ${C_HDR}) +@@ -419,13 +409,50 @@ if(WITH_FFMPEG) + endif() + + # FFTW +-find_package(FFTW REQUIRED) +-list(APPEND INCLUDE ${FFTW_INCLUDE_DIR}) +-list(APPEND LIBRARIES ${FFTW_LIBRARY}) ++if(WITH_FFTW) ++ find_package(FFTW ${PACKAGE_OPTION}) ++ ++ if(FFTW_FOUND) ++ set(FFTW_SRC ++ src/fx/BinauralSound.cpp ++ src/fx/BinauralReader.cpp ++ src/fx/Convolver.cpp ++ src/fx/ConvolverReader.cpp ++ src/fx/ConvolverSound.cpp ++ src/fx/FFTConvolver.cpp ++ src/fx/HRTF.cpp ++ src/fx/ImpulseResponse.cpp ++ src/util/FFTPlan.cpp ++ ) ++ set(FFTW_HDR ++ include/fx/BinauralSound.h ++ include/fx/BinauralReader.h ++ include/fx/Convolver.h ++ include/fx/ConvolverReader.h ++ include/fx/ConvolverSound.h ++ include/fx/FFTConvolver.h ++ include/fx/HRTF.h ++ include/fx/HRTFLoader.h ++ include/fx/ImpulseResponse.h ++ include/util/FFTPlan.h ++ ) + +-if(WIN32) +- file(GLOB FFTW_DLLS ${LIBRARY_PATH}/fftw/bin/*.dll) +- list(APPEND DLLS ${FFTW_DLLS}) ++ add_definitions(-DWITH_CONVOLUTION) ++ ++ list(APPEND INCLUDE ${FFTW_INCLUDE_DIR}) ++ list(APPEND LIBRARIES ${FFTW_LIBRARY}) ++ ++ list(APPEND SRC ${FFTW_SRC}) ++ list(APPEND HDR ${FFTW_HDR}) ++ ++ if(WIN32) ++ file(GLOB FFTW_DLLS ${LIBRARY_PATH}/fftw/bin/*.dll) ++ list(APPEND DLLS ${FFTW_DLLS}) ++ endif() ++ else() ++ set(WITH_FFTW FALSE CACHE BOOL "Build With FFTW" FORCE) ++ message(WARNING "FFTW not found, convolution functionality will not be built.") ++ endif() + endif() + + # JACK +@@ -445,7 +472,7 @@ if(WITH_JACK) + plugins/jack/JackSymbols.h + ) + +- if(DYNLOAD_JACK) ++ if(DYNLOAD_JACK) + add_definitions(-DDYNLOAD_JACK) + endif() + +@@ -464,7 +491,7 @@ if(WITH_JACK) + list(APPEND DLLS ${JACK_DLLS}) + endif() + else() +- set(WITH_JACK FALSE CACHE BOOL "Build With Plugin" FORCE) ++ set(WITH_JACK FALSE CACHE BOOL "Build With JACK" FORCE) + message(WARNING "JACK not found, plugin will not be built.") + endif() + endif() +@@ -635,14 +662,20 @@ string(CONCAT STATIC_PLUGIN_REGISTERS ${STATIC_PLUGIN_REGISTERS}) + + if(WIN32) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/PluginManagerWindows.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/PluginManager.cpp ESCAPE_QUOTES @ONLY) +- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fx/HRTFLoaderWindows.cpp ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp COPYONLY) ++ if(WITH_FFTW) ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fx/HRTFLoaderWindows.cpp ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp COPYONLY) ++ endif() + else() + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/PluginManagerUnix.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/PluginManager.cpp ESCAPE_QUOTES @ONLY) +- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fx/HRTFLoaderUnix.cpp ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp COPYONLY) ++ if(WITH_FFTW) ++ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fx/HRTFLoaderUnix.cpp ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp COPYONLY) ++ endif() + endif() + + list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/PluginManager.cpp) +-list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp) ++if(WITH_FFTW) ++ list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp) ++endif() + + # directories + +@@ -743,7 +776,7 @@ endif() + if(BUILD_DEMOS) + include_directories(${INCLUDE}) + +- set(DEMOS audaplay audaconvert audaremap signalgen randsounds dynamicmusic playbackmanager convolution binaural) ++ set(DEMOS audaplay audaconvert audaremap signalgen randsounds dynamicmusic playbackmanager) + + add_executable(audaplay demos/audaplay.cpp) + target_link_libraries(audaplay audaspace) +@@ -766,11 +799,15 @@ if(BUILD_DEMOS) + add_executable(playbackmanager demos/playbackmanager.cpp) + target_link_libraries(playbackmanager audaspace) + +- add_executable(convolution demos/convolution.cpp) +- target_link_libraries(convolution audaspace) ++ if(WITH_FFTW) ++ list(APPEND DEMOS convolution binaural) ++ ++ add_executable(convolution demos/convolution.cpp) ++ target_link_libraries(convolution audaspace) + +- add_executable(binaural demos/binaural.cpp) +- target_link_libraries(binaural audaspace) ++ add_executable(binaural demos/binaural.cpp) ++ target_link_libraries(binaural audaspace) ++ endif() + + if(WITH_OPENAL) + list(APPEND DEMOS openaldevices) +@@ -813,8 +850,6 @@ if(WITH_PYTHON) + bindings/python/PyDevice.cpp + bindings/python/PyDynamicMusic.cpp + bindings/python/PyHandle.cpp +- bindings/python/PyHRTF.cpp +- bindings/python/PyImpulseResponse.cpp + bindings/python/PyPlaybackManager.cpp + bindings/python/PySequence.cpp + bindings/python/PySequenceEntry.cpp +@@ -827,8 +862,6 @@ if(WITH_PYTHON) + bindings/python/PyDevice.h + bindings/python/PyDynamicMusic.h + bindings/python/PyHandle.h +- bindings/python/PyHRTF.h +- bindings/python/PyImpulseResponse.h + bindings/python/PyPlaybackManager.h + bindings/python/PySequence.h + bindings/python/PySequenceEntry.h +@@ -837,6 +870,17 @@ if(WITH_PYTHON) + bindings/python/PyThreadPool.h + ) + ++if(WITH_FFTW) ++ list(APPEND PYTHON_SRC ++ bindings/python/PyHRTF.cpp ++ bindings/python/PyImpulseResponse.cpp ++ ) ++ list(APPEND PYTHON_HDR ++ bindings/python/PyHRTF.h ++ bindings/python/PyImpulseResponse.h ++ ) ++ endif() ++ + add_library(audaspace-py ${LIBRARY_TYPE} ${PYTHON_SRC} ${PYTHON_HDR}) + target_link_libraries(audaspace-py audaspace ${PYTHON_LIBRARIES}) + set_target_properties(audaspace-py PROPERTIES SOVERSION ${AUDASPACE_VERSION}) +diff --git a/bindings/C/AUD_Sound.cpp b/bindings/C/AUD_Sound.cpp +index 8d024b2..9c572cf 100644 +--- a/bindings/C/AUD_Sound.cpp ++++ b/bindings/C/AUD_Sound.cpp +@@ -668,6 +668,8 @@ AUD_API AUD_Sound* AUD_Sound_mutable(AUD_Sound* sound) + } + } + ++#ifdef WITH_CONVOLUTION ++ + AUD_API AUD_Sound* AUD_Sound_Convolver(AUD_Sound* sound, AUD_ImpulseResponse* filter, AUD_ThreadPool* threadPool) + { + assert(sound); +@@ -700,3 +702,5 @@ AUD_API AUD_Sound* AUD_Sound_Binaural(AUD_Sound* sound, AUD_HRTF* hrtfs, AUD_Sou + return nullptr; + } + } ++ ++#endif +diff --git a/bindings/C/AUD_Sound.h b/bindings/C/AUD_Sound.h +index 7d205fa..b18e3c3 100644 +--- a/bindings/C/AUD_Sound.h ++++ b/bindings/C/AUD_Sound.h +@@ -360,8 +360,10 @@ extern AUD_API int AUD_SoundList_addSound(AUD_Sound* list, AUD_Sound* sound); + */ + extern AUD_API AUD_Sound* AUD_Sound_mutable(AUD_Sound* sound); + +-extern AUD_API AUD_Sound* AUD_Sound_Convolver(AUD_Sound* sound, AUD_ImpulseResponse* filter, AUD_ThreadPool* threadPool); +-extern AUD_API AUD_Sound* AUD_Sound_Binaural(AUD_Sound* sound, AUD_HRTF* hrtfs, AUD_Source* source, AUD_ThreadPool* threadPool); ++#ifdef WITH_CONVOLUTION ++ extern AUD_API AUD_Sound* AUD_Sound_Convolver(AUD_Sound* sound, AUD_ImpulseResponse* filter, AUD_ThreadPool* threadPool); ++ extern AUD_API AUD_Sound* AUD_Sound_Binaural(AUD_Sound* sound, AUD_HRTF* hrtfs, AUD_Source* source, AUD_ThreadPool* threadPool); ++#endif + + #ifdef __cplusplus + } +diff --git a/bindings/python/PyAPI.cpp b/bindings/python/PyAPI.cpp +index e2b307c..cceadbc 100644 +--- a/bindings/python/PyAPI.cpp ++++ b/bindings/python/PyAPI.cpp +@@ -23,9 +23,12 @@ + #include "PyPlaybackManager.h" + #include "PyDynamicMusic.h" + #include "PyThreadPool.h" ++#include "PySource.h" ++ ++#ifdef WITH_CONVOLUTION + #include "PyImpulseResponse.h" + #include "PyHRTF.h" +-#include "PySource.h" ++#endif + + #include "respec/Specification.h" + #include "devices/IHandle.h" +@@ -95,14 +98,16 @@ PyInit_aud() + if(!initializeThreadPool()) + return nullptr; + +- if(!initializeImpulseResponse()) ++ if(!initializeSource()) + return nullptr; + +- if(!initializeHRTF()) ++#ifdef WITH_CONVOLUTION ++ if(!initializeImpulseResponse()) + return nullptr; + +- if(!initializeSource()) ++ if(!initializeHRTF()) + return nullptr; ++#endif + + module = PyModule_Create(&audmodule); + if(module == nullptr) +@@ -116,9 +121,12 @@ PyInit_aud() + addDynamicMusicToModule(module); + addPlaybackManagerToModule(module); + addThreadPoolToModule(module); ++ addSourceToModule(module); ++ ++#ifdef WITH_CONVOLUTION + addImpulseResponseToModule(module); + addHRTFToModule(module); +- addSourceToModule(module); ++#endif + + AUDError = PyErr_NewException("aud.error", nullptr, nullptr); + Py_INCREF(AUDError); +diff --git a/bindings/python/PySound.cpp b/bindings/python/PySound.cpp +index 635ac19..2ab1974 100644 +--- a/bindings/python/PySound.cpp ++++ b/bindings/python/PySound.cpp +@@ -14,12 +14,15 @@ + * limitations under the License. + ******************************************************************************/ + +-#include "PyHRTF.h" +-#include "PyImpulseResponse.h" + #include "PySound.h" + #include "PySource.h" + #include "PyThreadPool.h" + ++#ifdef WITH_CONVOLUTION ++#include "PyHRTF.h" ++#include "PyImpulseResponse.h" ++#endif ++ + #include "Exception.h" + #include "file/File.h" + #include "file/FileWriter.h" +@@ -31,8 +34,6 @@ + #include "generator/Triangle.h" + #include "fx/Accumulator.h" + #include "fx/ADSR.h" +-#include "fx/BinauralSound.h" +-#include "fx/ConvolverSound.h" + #include "fx/Delay.h" + #include "fx/Envelope.h" + #include "fx/Fader.h" +@@ -57,6 +58,11 @@ + #include "sequence/PingPong.h" + #include "sequence/Superpose.h" + ++#ifdef WITH_CONVOLUTION ++#include "fx/BinauralSound.h" ++#include "fx/ConvolverSound.h" ++#endif ++ + #include + #include + #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +@@ -1614,6 +1620,8 @@ Sound_list_addSound(Sound* self, PyObject* object) + } + } + ++#ifdef WITH_CONVOLUTION ++ + PyDoc_STRVAR(M_aud_Sound_convolver_doc, + "convolver()\n\n" + "Creates a sound that will apply convolution to another sound.\n\n" +@@ -1719,6 +1727,8 @@ Sound_binaural(Sound* self, PyObject* args) + return (PyObject *)parent; + } + ++#endif ++ + static PyMethodDef Sound_methods[] = { + {"data", (PyCFunction)Sound_data, METH_NOARGS, + M_aud_Sound_data_doc +@@ -1822,12 +1832,14 @@ static PyMethodDef Sound_methods[] = { + { "addSound", (PyCFunction)Sound_list_addSound, METH_O, + M_aud_Sound_list_addSound_doc + }, ++#ifdef WITH_CONVOLUTION + { "convolver", (PyCFunction)Sound_convolver, METH_VARARGS, + M_aud_Sound_convolver_doc + }, + { "binaural", (PyCFunction)Sound_binaural, METH_VARARGS, + M_aud_Sound_binaural_doc + }, ++#endif + {nullptr} /* Sentinel */ + }; + +diff --git a/bindings/python/setup.py.in b/bindings/python/setup.py.in +index 949e12b..add1a2d 100644 +--- a/bindings/python/setup.py.in ++++ b/bindings/python/setup.py.in +@@ -43,7 +43,7 @@ audaspace = Extension( + library_dirs = ['.', 'Release', 'Debug'], + language = 'c++', + extra_compile_args = extra_args, +- sources = [os.path.join(source_directory, file) for file in ['PyAPI.cpp', 'PyDevice.cpp', 'PyHandle.cpp', 'PySound.cpp', 'PySequenceEntry.cpp', 'PySequence.cpp', 'PyPlaybackManager.cpp', 'PyDynamicMusic.cpp', 'PyThreadPool.cpp', 'PyImpulseResponse.cpp', 'PyHRTF.cpp', 'PySource.cpp']] ++ sources = [os.path.join(source_directory, file) for file in ['PyAPI.cpp', 'PyDevice.cpp', 'PyHandle.cpp', 'PySound.cpp', 'PySequenceEntry.cpp', 'PySequence.cpp', 'PyPlaybackManager.cpp', 'PyDynamicMusic.cpp', 'PyThreadPool.cpp', 'PySource.cpp'] + (['PyImpulseResponse.cpp', 'PyHRTF.cpp'] if '@WITH_FFTW@' == 'ON' else [])] + ) + + setup( +@@ -56,6 +56,6 @@ setup( + license = 'Apache License 2.0', + long_description = codecs.open(os.path.join(source_directory, '../../README.md'), 'r', 'utf-8').read(), + ext_modules = [audaspace], +- headers = [os.path.join(source_directory, file) for file in ['PyAPI.h', 'PyDevice.h', 'PyHandle.h', 'PySound.h', 'PySequenceEntry.h', 'PySequence.h', 'PyPlaybackManager.h', 'PyDynamicMusic.h', 'PyThreadPool.h', 'PyImpulseResponse.h', 'PyHRTF.h', 'PySource.h']] + ['Audaspace.h'] ++ headers = [os.path.join(source_directory, file) for file in ['PyAPI.h', 'PyDevice.h', 'PyHandle.h', 'PySound.h', 'PySequenceEntry.h', 'PySequence.h', 'PyPlaybackManager.h', 'PyDynamicMusic.h', 'PyThreadPool.h', 'PySource.h'] + (['PyImpulseResponse.h', 'PyHRTF.h'] if '@WITH_FFTW@' == 'ON' else [])] + ['Audaspace.h'] + ) + +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0004-Build-option-configure-whether-to-build-versioned-pl.patch b/mingw-w64-audaspace/0004-Build-option-configure-whether-to-build-versioned-pl.patch new file mode 100644 index 0000000000..7ac46715ff --- /dev/null +++ b/mingw-w64-audaspace/0004-Build-option-configure-whether-to-build-versioned-pl.patch @@ -0,0 +1,80 @@ +From d27746ca8550e2adae6ba54ded0c6dfac58d69b8 Mon Sep 17 00:00:00 2001 +From: Joerg Mueller +Date: Mon, 23 Oct 2017 16:36:55 +0200 +Subject: [PATCH 04/16] Build option: configure whether to build versioned + plugins. + +--- + CMakeLists.txt | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index d82dc21..5c667ca 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -292,6 +292,7 @@ cmake_dependent_option(WITH_PYTHON_MODULE "Build Python Module" TRUE "WITH_PYTHO + cmake_dependent_option(USE_SDL2 "Use SDL2 instead of 1 if available" TRUE "WITH_SDL" FALSE) + cmake_dependent_option(DYNLOAD_JACK "Dynamically load JACK" FALSE "WITH_JACK" FALSE) + cmake_dependent_option(WITH_BINDING_DOCS "Build C/Python HTML Documentation with Sphinx" TRUE "WITH_PYTHON_MODULE" FALSE) ++cmake_dependent_option(WITH_VERSIONED_PLUGINS "Build Plugins With Sonumber" TRUE "SHARED_LIBRARY" FALSE) + + # compiler options + +@@ -719,7 +720,9 @@ if(WITH_FFMPEG AND PLUGIN_FFMPEG) + include_directories(${INCLUDE} ${FFMPEG_INCLUDE_DIRS}) + add_library(audffmpeg SHARED ${FFMPEG_SRC} ${FFMPEG_HDR} ${HDR}) + target_link_libraries(audffmpeg audaspace ${FFMPEG_LIBRARIES}) +- set_target_properties(audffmpeg PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ if(WITH_VERSIONED_PLUGINS) ++ set_target_properties(audffmpeg PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ endif() + install(TARGETS audffmpeg DESTINATION ${DEFAULT_PLUGIN_PATH}) + endif() + +@@ -732,7 +735,9 @@ if(WITH_JACK AND PLUGIN_JACK) + else() + target_link_libraries(audjack audaspace ${JACK_LIBRARIES}) + endif() +- set_target_properties(audjack PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ if(WITH_VERSIONED_PLUGINS) ++ set_target_properties(audjack PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ endif() + install(TARGETS audjack DESTINATION ${DEFAULT_PLUGIN_PATH}) + endif() + +@@ -740,7 +745,9 @@ if(WITH_LIBSNDFILE AND PLUGIN_LIBSNDFILE) + add_definitions(-DLIBSNDFILE_PLUGIN) + include_directories(${INCLUDE} ${LIBSNDFILE_INCLUDE_DIRS}) + add_library(audlibsndfile SHARED ${LIBSNDFILE_SRC} ${LIBSNDFILE_HDR} ${HDR}) +- set_target_properties(audlibsndfile PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ if(WITH_VERSIONED_PLUGINS) ++ set_target_properties(audlibsndfile PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ endif() + target_link_libraries(audlibsndfile audaspace ${LIBSNDFILE_LIBRARIES}) + install(TARGETS audlibsndfile DESTINATION ${DEFAULT_PLUGIN_PATH}) + endif() +@@ -749,7 +756,9 @@ if(WITH_OPENAL AND PLUGIN_OPENAL) + add_definitions(-DOPENAL_PLUGIN) + include_directories(${INCLUDE} ${OPENAL_INCLUDE_DIR}) + add_library(audopenal SHARED ${OPENAL_SRC} ${OPENAL_HDR} ${HDR}) +- set_target_properties(audopenal PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ if(WITH_VERSIONED_PLUGINS) ++ set_target_properties(audopenal PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ endif() + target_link_libraries(audopenal audaspace ${OPENAL_LIBRARY}) + install(TARGETS audopenal DESTINATION ${DEFAULT_PLUGIN_PATH}) + endif() +@@ -758,7 +767,9 @@ if(WITH_SDL AND PLUGIN_SDL) + add_definitions(-DSDL_PLUGIN) + include_directories(${INCLUDE} ${SDL_INCLUDE_DIR}) + add_library(audsdl SHARED ${SDL_SRC} ${SDL_HDR} ${HDR}) +- set_target_properties(audsdl PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ if(WITH_VERSIONED_PLUGINS) ++ set_target_properties(audsdl PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++ endif() + target_link_libraries(audsdl audaspace ${SDL_LIBRARY}) + install(TARGETS audsdl DESTINATION ${DEFAULT_PLUGIN_PATH}) + endif() +-- +2.22.0 + diff --git a/mingw-w64-audaspace/02-support-new-ffmpeg.patch b/mingw-w64-audaspace/0005-Support-newer-ffmpeg-versions.patch similarity index 99% rename from mingw-w64-audaspace/02-support-new-ffmpeg.patch rename to mingw-w64-audaspace/0005-Support-newer-ffmpeg-versions.patch index 689c050d8e..0b728b1d34 100644 --- a/mingw-w64-audaspace/02-support-new-ffmpeg.patch +++ b/mingw-w64-audaspace/0005-Support-newer-ffmpeg-versions.patch @@ -1,7 +1,7 @@ From 212b4b605d9a73b97a4bf95ec080731477b64741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Fri, 8 Jun 2018 18:18:09 +0200 -Subject: [PATCH] Support newer ffmpeg versions. +Subject: [PATCH 05/16] Support newer ffmpeg versions. --- plugins/ffmpeg/FFMPEG.cpp | 2 + @@ -279,7 +279,7 @@ diff --git a/plugins/ffmpeg/FFMPEGReader.h b/plugins/ffmpeg/FFMPEGReader.h index e2ae959..a69ac77 100644 --- a/plugins/ffmpeg/FFMPEGReader.h +++ b/plugins/ffmpeg/FFMPEGReader.h -@@ -79,6 +79,11 @@ class AUD_PLUGIN_API FFMPEGReader : public IReader +@@ -79,6 +79,11 @@ private: */ AVCodecContext* m_codecCtx; @@ -682,7 +682,7 @@ diff --git a/plugins/ffmpeg/FFMPEGWriter.h b/plugins/ffmpeg/FFMPEGWriter.h index 690185d..c22f479 100644 --- a/plugins/ffmpeg/FFMPEGWriter.h +++ b/plugins/ffmpeg/FFMPEGWriter.h -@@ -66,14 +66,19 @@ class AUD_PLUGIN_API FFMPEGWriter : public IWriter +@@ -66,14 +66,19 @@ private: AVCodecContext* m_codecCtx; /** @@ -706,3 +706,6 @@ index 690185d..c22f479 100644 /** * The input buffer for the format converted data before encoding. +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0006-Udpate-for-travis.ci.patch b/mingw-w64-audaspace/0006-Udpate-for-travis.ci.patch new file mode 100644 index 0000000000..3202cebdcb --- /dev/null +++ b/mingw-w64-audaspace/0006-Udpate-for-travis.ci.patch @@ -0,0 +1,25 @@ +From 40a0a34ca0a9276795c6814d6cdb05ab01329b72 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Fri, 8 Jun 2018 18:25:25 +0200 +Subject: [PATCH 06/16] Udpate for travis.ci. + +--- + .travis.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/.travis.yml b/.travis.yml +index 31d8a7f..b144e36 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -15,7 +15,7 @@ before_install: + - brew update + - brew install cmake || brew outdated cmake || brew upgrade cmake + - brew install ffmpeg +- - brew install python3 ++ - brew upgrade python + - brew install sdl2 + - brew install libsndfile + - brew install jack +-- +2.22.0 + diff --git a/mingw-w64-audaspace/03-backport-from-blender.patch b/mingw-w64-audaspace/0007-Some-fixes-backported-from-Blender.patch similarity index 82% rename from mingw-w64-audaspace/03-backport-from-blender.patch rename to mingw-w64-audaspace/0007-Some-fixes-backported-from-Blender.patch index b1e59caa7e..f5fce81793 100644 --- a/mingw-w64-audaspace/03-backport-from-blender.patch +++ b/mingw-w64-audaspace/0007-Some-fixes-backported-from-Blender.patch @@ -1,30 +1,7 @@ -From 10413c522900d3aaadd5f5ae12163eee80ef18ae Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= -Date: Sun, 5 Mar 2017 12:22:00 +0100 -Subject: [PATCH] Fix for seeking with modified pitch. - -Check Blender bug report T50843: Pitched Audio renders incorrectly in VSE. ---- - src/devices/SoftwareDevice.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/devices/SoftwareDevice.cpp b/src/devices/SoftwareDevice.cpp -index 5fbb68c..c944b9e 100644 ---- a/src/devices/SoftwareDevice.cpp -+++ b/src/devices/SoftwareDevice.cpp -@@ -357,6 +357,7 @@ bool SoftwareDevice::SoftwareHandle::seek(float position) - if(!m_status) - return false; - -+ m_pitch->setPitch(m_user_pitch); - m_reader->seek((int)(position * m_reader->getSpecs().rate)); - - if(m_status == STATUS_STOPPED) - From 9b38605bb1d2927bf9313ee7ac4c13654e2bb513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Fri, 8 Jun 2018 23:00:13 +0200 -Subject: [PATCH] Some fixes backported from Blender. +Subject: [PATCH 07/16] Some fixes backported from Blender. --- bindings/C/AUD_Sound.cpp | 7 +++++-- @@ -150,3 +127,6 @@ index e09a74c..1891be9 100644 { } +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0008-Silence-some-warnings.patch b/mingw-w64-audaspace/0008-Silence-some-warnings.patch new file mode 100644 index 0000000000..a53d2ab95f --- /dev/null +++ b/mingw-w64-audaspace/0008-Silence-some-warnings.patch @@ -0,0 +1,158 @@ +From 5fb21bbcd82b6c48f06599eb8abc1d7a8e8af028 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Thu, 17 Jan 2019 19:35:31 +0100 +Subject: [PATCH 08/16] Silence some warnings. + +--- + bindings/C/AUD_Sound.cpp | 2 +- + plugins/ffmpeg/FFMPEGWriter.cpp | 2 + + src/respec/ChannelMapperReader.cpp | 77 ++++++++++++++++-------------- + 3 files changed, 44 insertions(+), 37 deletions(-) + +diff --git a/bindings/C/AUD_Sound.cpp b/bindings/C/AUD_Sound.cpp +index 30860ac..1f40f5c 100644 +--- a/bindings/C/AUD_Sound.cpp ++++ b/bindings/C/AUD_Sound.cpp +@@ -212,7 +212,7 @@ AUD_API const char* AUD_Sound_write(AUD_Sound* sound, const char* filename, AUD_ + std::shared_ptr writer = FileWriter::createWriter(filename, specs, static_cast(container), static_cast(codec), bitrate); + FileWriter::writeReader(reader, writer, 0, buffersize); + } +- catch(Exception& e) ++ catch(Exception&) + { + return "An exception occured while writing."; + } +diff --git a/plugins/ffmpeg/FFMPEGWriter.cpp b/plugins/ffmpeg/FFMPEGWriter.cpp +index 09b7089..2cd3261 100644 +--- a/plugins/ffmpeg/FFMPEGWriter.cpp ++++ b/plugins/ffmpeg/FFMPEGWriter.cpp +@@ -261,6 +261,8 @@ FFMPEGWriter::FFMPEGWriter(std::string filename, DeviceSpecs specs, Container fo + case CHANNELS_SURROUND71: + channel_layout = AV_CH_LAYOUT_7POINT1; + break; ++ default: ++ AUD_THROW(FileException, "File couldn't be written, channel layout not supported."); + } + + try +diff --git a/src/respec/ChannelMapperReader.cpp b/src/respec/ChannelMapperReader.cpp +index 850e54b..1af5e70 100644 +--- a/src/respec/ChannelMapperReader.cpp ++++ b/src/respec/ChannelMapperReader.cpp +@@ -296,72 +296,77 @@ const Channel* ChannelMapperReader::CHANNEL_MAPS[] = + ChannelMapperReader::SURROUND71_MAP + }; + ++constexpr float deg2rad(double angle) ++{ ++ return float(angle * M_PI / 180.0); ++} ++ + const float ChannelMapperReader::MONO_ANGLES[] = + { +- 0.0f * M_PI / 180.0f ++ deg2rad(0.0) + }; + + const float ChannelMapperReader::STEREO_ANGLES[] = + { +- -90.0f * M_PI / 180.0f, +- 90.0f * M_PI / 180.0f ++ deg2rad(-90.0), ++ deg2rad( 90.0) + }; + + const float ChannelMapperReader::STEREO_LFE_ANGLES[] = + { +- -90.0f * M_PI / 180.0f, +- 90.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f ++ deg2rad(-90.0), ++ deg2rad( 90.0), ++ deg2rad( 0.0) + }; + + const float ChannelMapperReader::SURROUND4_ANGLES[] = + { +- -45.0f * M_PI / 180.0f, +- 45.0f * M_PI / 180.0f, +- -135.0f * M_PI / 180.0f, +- 135.0f * M_PI / 180.0f ++ deg2rad( -45.0), ++ deg2rad( 45.0), ++ deg2rad(-135.0), ++ deg2rad( 135.0) + }; + + const float ChannelMapperReader::SURROUND5_ANGLES[] = + { +- -30.0f * M_PI / 180.0f, +- 30.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f, +- -110.0f * M_PI / 180.0f, +- 110.0f * M_PI / 180.0f ++ deg2rad( -30.0), ++ deg2rad( 30.0), ++ deg2rad( 0.0), ++ deg2rad(-110.0), ++ deg2rad( 110.0) + }; + + const float ChannelMapperReader::SURROUND51_ANGLES[] = + { +- -30.0f * M_PI / 180.0f, +- 30.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f, +- -110.0f * M_PI / 180.0f, +- 110.0f * M_PI / 180.0f ++ deg2rad( -30.0), ++ deg2rad( 30.0), ++ deg2rad( 0.0), ++ deg2rad( 0.0), ++ deg2rad(-110.0), ++ deg2rad( 110.0) + }; + + const float ChannelMapperReader::SURROUND61_ANGLES[] = + { +- -30.0f * M_PI / 180.0f, +- 30.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f, +- 180.0f * M_PI / 180.0f, +- -110.0f * M_PI / 180.0f, +- 110.0f * M_PI / 180.0f ++ deg2rad( -30.0), ++ deg2rad( 30.0), ++ deg2rad( 0.0), ++ deg2rad( 0.0), ++ deg2rad( 180.0), ++ deg2rad(-110.0), ++ deg2rad( 110.0) + }; + + const float ChannelMapperReader::SURROUND71_ANGLES[] = + { +- -30.0f * M_PI / 180.0f, +- 30.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f, +- 0.0f * M_PI / 180.0f, +- -110.0f * M_PI / 180.0f, +- 110.0f * M_PI / 180.0f, +- -150.0f * M_PI / 180.0f, +- 150.0f * M_PI / 180.0f ++ deg2rad( -30.0), ++ deg2rad( 30.0), ++ deg2rad( 0.0), ++ deg2rad( 0.0), ++ deg2rad(-110.0), ++ deg2rad( 110.0), ++ deg2rad(-150.0), ++ deg2rad( 150.0) + }; + + const float* ChannelMapperReader::CHANNEL_ANGLES[] = +-- +2.22.0 + diff --git a/mingw-w64-audaspace/04-python-memory-leak.patch b/mingw-w64-audaspace/0009-Bugfix-memory-leak-in-python-API.patch similarity index 89% rename from mingw-w64-audaspace/04-python-memory-leak.patch rename to mingw-w64-audaspace/0009-Bugfix-memory-leak-in-python-API.patch index 644b8d16ae..f22fd3730b 100644 --- a/mingw-w64-audaspace/04-python-memory-leak.patch +++ b/mingw-w64-audaspace/0009-Bugfix-memory-leak-in-python-API.patch @@ -1,7 +1,7 @@ From a2ff4e8c55199ec622d30dc2e5d49f01e37cd40e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Thu, 17 Jan 2019 19:35:42 +0100 -Subject: [PATCH] Bugfix: memory leak in python API. +Subject: [PATCH 09/16] Bugfix: memory leak in python API. --- bindings/python/PySound.cpp | 2 -- @@ -20,3 +20,6 @@ index 2ab1974..82c6036 100644 return reinterpret_cast(array); } +-- +2.22.0 + diff --git a/mingw-w64-audaspace/05-openal-recreate-device.patch b/mingw-w64-audaspace/0010-OpenAL-recreate-device-if-disconnected.patch similarity index 97% rename from mingw-w64-audaspace/05-openal-recreate-device.patch rename to mingw-w64-audaspace/0010-OpenAL-recreate-device-if-disconnected.patch index 82e608c57b..e7fd6c728e 100644 --- a/mingw-w64-audaspace/05-openal-recreate-device.patch +++ b/mingw-w64-audaspace/0010-OpenAL-recreate-device-if-disconnected.patch @@ -1,7 +1,7 @@ From 7ad99dfb7790dfa70434391656f14444201d5e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Thu, 17 Jan 2019 20:53:36 +0100 -Subject: [PATCH] OpenAL: recreate device if disconnected. +Subject: [PATCH 10/16] OpenAL: recreate device if disconnected. --- plugins/openal/OpenALDevice.cpp | 153 +++++++++++++++++++++++++++++--- @@ -246,7 +246,7 @@ diff --git a/plugins/openal/OpenALDevice.h b/plugins/openal/OpenALDevice.h index b9b461a..c2bec44 100644 --- a/plugins/openal/OpenALDevice.h +++ b/plugins/openal/OpenALDevice.h -@@ -95,11 +95,16 @@ class AUD_PLUGIN_API OpenALDevice : public IDevice, public I3DDevice +@@ -95,11 +95,16 @@ private: /// Current status of the handle Status m_status; @@ -263,7 +263,7 @@ index b9b461a..c2bec44 100644 // delete copy constructor and operator= OpenALHandle(const OpenALHandle&) = delete; OpenALHandle& operator=(const OpenALHandle&) = delete; -@@ -173,11 +178,21 @@ class AUD_PLUGIN_API OpenALDevice : public IDevice, public I3DDevice +@@ -173,11 +178,21 @@ private: */ DeviceSpecs m_specs; @@ -285,3 +285,6 @@ index b9b461a..c2bec44 100644 /** * The list of sounds that are currently playing. */ +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0011-Bugfix-don-t-add-non-existing-devices-to-the-device-.patch b/mingw-w64-audaspace/0011-Bugfix-don-t-add-non-existing-devices-to-the-device-.patch new file mode 100644 index 0000000000..95d4dbad7f --- /dev/null +++ b/mingw-w64-audaspace/0011-Bugfix-don-t-add-non-existing-devices-to-the-device-.patch @@ -0,0 +1,31 @@ +From 101c714e1856c4c461f43741eac6d7ddb40ff6f5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Sun, 10 Mar 2019 23:28:10 +0100 +Subject: [PATCH 11/16] Bugfix: don't add non-existing devices to the device + manager. + +--- + src/devices/DeviceManager.cpp | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/src/devices/DeviceManager.cpp b/src/devices/DeviceManager.cpp +index 2ebc3d5..304f8b4 100644 +--- a/src/devices/DeviceManager.cpp ++++ b/src/devices/DeviceManager.cpp +@@ -35,7 +35,12 @@ void DeviceManager::registerDevice(std::string name, std::shared_ptr DeviceManager::getDeviceFactory(std::string name) + { +- return m_factories[name]; ++ auto it = m_factories.find(name); ++ ++ if(it == m_factories.end()) ++ return nullptr; ++ ++ return it->second; + } + + std::shared_ptr DeviceManager::getDefaultDeviceFactory() +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0012-Adding-a-modulator-sound-effect.patch b/mingw-w64-audaspace/0012-Adding-a-modulator-sound-effect.patch new file mode 100644 index 0000000000..a67d4ee4f0 --- /dev/null +++ b/mingw-w64-audaspace/0012-Adding-a-modulator-sound-effect.patch @@ -0,0 +1,463 @@ +From cb7a314092f6c10b6683473a63484662f13d5f35 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Wed, 3 Apr 2019 19:36:47 +0200 +Subject: [PATCH 12/16] Adding a modulator sound effect. + +--- + CMakeLists.txt | 4 ++ + bindings/C/AUD_Sound.cpp | 16 ++++++ + bindings/C/AUD_Sound.h | 8 +++ + bindings/python/PySound.cpp | 45 +++++++++++++++++ + include/fx/Modulator.h | 62 +++++++++++++++++++++++ + include/fx/ModulatorReader.h | 79 ++++++++++++++++++++++++++++++ + src/fx/Modulator.cpp | 35 +++++++++++++ + src/fx/ModulatorReader.cpp | 95 ++++++++++++++++++++++++++++++++++++ + 8 files changed, 344 insertions(+) + create mode 100644 include/fx/Modulator.h + create mode 100644 include/fx/ModulatorReader.h + create mode 100644 src/fx/Modulator.cpp + create mode 100644 src/fx/ModulatorReader.cpp + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5c667ca..0e88ee3 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -65,6 +65,8 @@ set(SRC + src/fx/LoopReader.cpp + src/fx/LowpassCalculator.cpp + src/fx/Lowpass.cpp ++ src/fx/Modulator.cpp ++ src/fx/ModulatorReader.cpp + src/fx/MutableReader.cpp + src/fx/MutableSound.cpp + src/fx/Pitch.cpp +@@ -173,6 +175,8 @@ set(PUBLIC_HDR + include/fx/LoopReader.h + include/fx/LowpassCalculator.h + include/fx/Lowpass.h ++ include/fx/Modulator.h ++ include/fx/ModulatorReader.h + include/fx/MutableReader.h + include/fx/MutableSound.h + include/fx/Pitch.h +diff --git a/bindings/C/AUD_Sound.cpp b/bindings/C/AUD_Sound.cpp +index 1f40f5c..00a59f4 100644 +--- a/bindings/C/AUD_Sound.cpp ++++ b/bindings/C/AUD_Sound.cpp +@@ -32,6 +32,7 @@ + #include "fx/Limiter.h" + #include "fx/Loop.h" + #include "fx/Lowpass.h" ++#include "fx/Modulator.h" + #include "fx/Pitch.h" + #include "fx/Reverse.h" + #include "fx/Sum.h" +@@ -465,6 +466,21 @@ AUD_API AUD_Sound* AUD_Sound_lowpass(AUD_Sound* sound, float frequency, float Q) + } + } + ++AUD_API AUD_Sound* AUD_Sound_modulate(AUD_Sound* first, AUD_Sound* second) ++{ ++ assert(first); ++ assert(second); ++ ++ try ++ { ++ return new AUD_Sound(new Modulator(*first, *second)); ++ } ++ catch(Exception&) ++ { ++ return nullptr; ++ } ++} ++ + AUD_API AUD_Sound* AUD_Sound_pitch(AUD_Sound* sound, float factor) + { + assert(sound); +diff --git a/bindings/C/AUD_Sound.h b/bindings/C/AUD_Sound.h +index b18e3c3..66d6c53 100644 +--- a/bindings/C/AUD_Sound.h ++++ b/bindings/C/AUD_Sound.h +@@ -246,6 +246,14 @@ extern AUD_API AUD_Sound* AUD_Sound_loop(AUD_Sound* sound, int count); + */ + extern AUD_API AUD_Sound* AUD_Sound_lowpass(AUD_Sound* sound, float frequency, float Q); + ++/** ++ * Modulates two sound, which means multiplying the sound samples. ++ * \param first The first sound. ++ * \param second The second sound. ++ * \return A handle of the modulated sound. ++ */ ++extern AUD_API AUD_Sound* AUD_Sound_modulate(AUD_Sound* first, AUD_Sound* second); ++ + /** + * Changes the pitch of a sound. + * \param sound The sound to change. +diff --git a/bindings/python/PySound.cpp b/bindings/python/PySound.cpp +index 82c6036..17fcdbe 100644 +--- a/bindings/python/PySound.cpp ++++ b/bindings/python/PySound.cpp +@@ -42,6 +42,7 @@ + #include "fx/Limiter.h" + #include "fx/Loop.h" + #include "fx/Lowpass.h" ++#include "fx/Modulator.h" + #include "fx/MutableSound.h" + #include "fx/Pitch.h" + #include "fx/Reverse.h" +@@ -1129,6 +1130,47 @@ Sound_lowpass(Sound* self, PyObject* args) + return (PyObject *)parent; + } + ++PyDoc_STRVAR(M_aud_Sound_modulate_doc, ++ "modulate(sound)\n\n" ++ "Modulates two factories.\n\n" ++ ":arg sound: The sound to modulate over the other.\n" ++ ":type sound: :class:`Sound`\n" ++ ":return: The created :class:`Sound` object.\n" ++ ":rtype: :class:`Sound`\n\n" ++ ".. note:: The two factories have to have the same specifications " ++ "(channels and samplerate)."); ++ ++static PyObject * ++Sound_modulate(Sound* self, PyObject* object) ++{ ++ PyTypeObject* type = Py_TYPE(self); ++ ++ if(!PyObject_TypeCheck(object, type)) ++ { ++ PyErr_SetString(PyExc_TypeError, "Object is not of type Sound!"); ++ return nullptr; ++ } ++ ++ Sound* parent = (Sound*)type->tp_alloc(type, 0); ++ Sound* child = (Sound*)object; ++ ++ if(parent != nullptr) ++ { ++ try ++ { ++ parent->sound = new std::shared_ptr(new Modulator(*reinterpret_cast*>(self->sound), *reinterpret_cast*>(child->sound))); ++ } ++ catch(Exception& e) ++ { ++ Py_DECREF(parent); ++ PyErr_SetString(AUDError, e.what()); ++ return nullptr; ++ } ++ } ++ ++ return (PyObject *)parent; ++} ++ + PyDoc_STRVAR(M_aud_Sound_pitch_doc, + "pitch(factor)\n\n" + "Changes the pitch of a sound with a specific factor.\n\n" +@@ -1791,6 +1833,9 @@ static PyMethodDef Sound_methods[] = { + {"lowpass", (PyCFunction)Sound_lowpass, METH_VARARGS, + M_aud_Sound_lowpass_doc + }, ++ {"modulate", (PyCFunction)Sound_modulate, METH_O, ++ M_aud_Sound_modulate_doc ++ }, + {"pitch", (PyCFunction)Sound_pitch, METH_VARARGS, + M_aud_Sound_pitch_doc + }, +diff --git a/include/fx/Modulator.h b/include/fx/Modulator.h +new file mode 100644 +index 0000000..db79d4a +--- /dev/null ++++ b/include/fx/Modulator.h +@@ -0,0 +1,62 @@ ++/******************************************************************************* ++ * Copyright 2009-2016 Jörg Müller ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ ******************************************************************************/ ++ ++#pragma once ++ ++/** ++ * @file Modulator.h ++ * @ingroup fx ++ * The Modulator class. ++ */ ++ ++#include "ISound.h" ++ ++AUD_NAMESPACE_BEGIN ++ ++/** ++ * This sound plays two other factories, playing them the same time and modulating/multiplying them. ++ * \note Readers from the underlying factories must have the same sample rate ++ * and channel count. ++ */ ++class AUD_API Modulator : public ISound ++{ ++private: ++ /** ++ * First played sound. ++ */ ++ std::shared_ptr m_sound1; ++ ++ /** ++ * Second played sound. ++ */ ++ std::shared_ptr m_sound2; ++ ++ // delete copy constructor and operator= ++ Modulator(const Modulator&) = delete; ++ Modulator& operator=(const Modulator&) = delete; ++ ++public: ++ /** ++ * Creates a new modulator sound. ++ * \param sound1 The first input sound. ++ * \param sound2 The second input sound. ++ */ ++ Modulator(std::shared_ptr sound1, std::shared_ptr sound2); ++ ++ virtual std::shared_ptr createReader(); ++}; ++ ++AUD_NAMESPACE_END +diff --git a/include/fx/ModulatorReader.h b/include/fx/ModulatorReader.h +new file mode 100644 +index 0000000..40cc843 +--- /dev/null ++++ b/include/fx/ModulatorReader.h +@@ -0,0 +1,79 @@ ++/******************************************************************************* ++ * Copyright 2009-2016 Jörg Müller ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ ******************************************************************************/ ++ ++#pragma once ++ ++/** ++ * @file ModulatorReader.h ++ * @ingroup fx ++ * The ModulatorReader class. ++ */ ++ ++#include "IReader.h" ++#include "util/Buffer.h" ++ ++#include ++ ++AUD_NAMESPACE_BEGIN ++ ++/** ++ * This reader plays two readers with the same specs in parallel multiplying their samples. ++ */ ++class AUD_API ModulatorReader : public IReader ++{ ++private: ++ /** ++ * The first reader. ++ */ ++ std::shared_ptr m_reader1; ++ ++ /** ++ * The second reader. ++ */ ++ std::shared_ptr m_reader2; ++ ++ /** ++ * Buffer used for mixing. ++ */ ++ Buffer m_buffer; ++ ++ // delete copy constructor and operator= ++ ModulatorReader(const ModulatorReader&) = delete; ++ ModulatorReader& operator=(const ModulatorReader&) = delete; ++ ++public: ++ /** ++ * Creates a new modulator reader. ++ * \param reader1 The first reader to read from. ++ * \param reader2 The second reader to read from. ++ * \exception Exception Thrown if the specs from the readers differ. ++ */ ++ ModulatorReader(std::shared_ptr reader1, std::shared_ptr reader2); ++ ++ /** ++ * Destroys the reader. ++ */ ++ virtual ~ModulatorReader(); ++ ++ virtual bool isSeekable() const; ++ virtual void seek(int position); ++ virtual int getLength() const; ++ virtual int getPosition() const; ++ virtual Specs getSpecs() const; ++ virtual void read(int& length, bool& eos, sample_t* buffer); ++}; ++ ++AUD_NAMESPACE_END +diff --git a/src/fx/Modulator.cpp b/src/fx/Modulator.cpp +new file mode 100644 +index 0000000..a1af1b8 +--- /dev/null ++++ b/src/fx/Modulator.cpp +@@ -0,0 +1,35 @@ ++/******************************************************************************* ++ * Copyright 2009-2016 Jörg Müller ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ ******************************************************************************/ ++ ++#include "fx/Modulator.h" ++#include "fx/ModulatorReader.h" ++ ++AUD_NAMESPACE_BEGIN ++ ++Modulator::Modulator(std::shared_ptr sound1, std::shared_ptr sound2) : ++ m_sound1(sound1), m_sound2(sound2) ++{ ++} ++ ++std::shared_ptr Modulator::createReader() ++{ ++ std::shared_ptr reader1 = m_sound1->createReader(); ++ std::shared_ptr reader2 = m_sound2->createReader(); ++ ++ return std::shared_ptr(new ModulatorReader(reader1, reader2)); ++} ++ ++AUD_NAMESPACE_END +diff --git a/src/fx/ModulatorReader.cpp b/src/fx/ModulatorReader.cpp +new file mode 100644 +index 0000000..c17cee0 +--- /dev/null ++++ b/src/fx/ModulatorReader.cpp +@@ -0,0 +1,95 @@ ++/******************************************************************************* ++ * Copyright 2009-2016 Jörg Müller ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ ******************************************************************************/ ++ ++#include "fx/ModulatorReader.h" ++#include "Exception.h" ++ ++#include ++#include ++ ++AUD_NAMESPACE_BEGIN ++ ++ModulatorReader::ModulatorReader(std::shared_ptr reader1, std::shared_ptr reader2) : ++ m_reader1(reader1), m_reader2(reader2) ++{ ++} ++ ++ModulatorReader::~ModulatorReader() ++{ ++} ++ ++bool ModulatorReader::isSeekable() const ++{ ++ return m_reader1->isSeekable() && m_reader2->isSeekable(); ++} ++ ++void ModulatorReader::seek(int position) ++{ ++ m_reader1->seek(position); ++ m_reader2->seek(position); ++} ++ ++int ModulatorReader::getLength() const ++{ ++ int len1 = m_reader1->getLength(); ++ int len2 = m_reader2->getLength(); ++ if((len1 < 0) || (len2 < 0)) ++ return -1; ++ return std::min(len1, len2); ++} ++ ++int ModulatorReader::getPosition() const ++{ ++ int pos1 = m_reader1->getPosition(); ++ int pos2 = m_reader2->getPosition(); ++ return std::max(pos1, pos2); ++} ++ ++Specs ModulatorReader::getSpecs() const ++{ ++ return m_reader1->getSpecs(); ++} ++ ++void ModulatorReader::read(int& length, bool& eos, sample_t* buffer) ++{ ++ Specs specs = m_reader1->getSpecs(); ++ Specs s2 = m_reader2->getSpecs(); ++ if(!AUD_COMPARE_SPECS(specs, s2)) ++ AUD_THROW(StateException, "Two readers with different specifiactions cannot be modulated."); ++ ++ int samplesize = AUD_SAMPLE_SIZE(specs); ++ ++ m_buffer.assureSize(length * samplesize); ++ ++ int len1 = length; ++ m_reader1->read(len1, eos, buffer); ++ ++ if(len1 < length) ++ std::memset(buffer + len1 * specs.channels, 0, (length - len1) * samplesize); ++ ++ int len2 = length; ++ bool eos2; ++ sample_t* buf = m_buffer.getBuffer(); ++ m_reader2->read(len2, eos2, buf); ++ ++ for(int i = 0; i < len2 * specs.channels; i++) ++ buffer[i] *= buf[i]; ++ ++ length = std::max(len1, len2); ++ eos &= eos2; ++} ++ ++AUD_NAMESPACE_END +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0013-Bugfix-Return-correct-length-for-modulator-and-super.patch b/mingw-w64-audaspace/0013-Bugfix-Return-correct-length-for-modulator-and-super.patch new file mode 100644 index 0000000000..94286ca95e --- /dev/null +++ b/mingw-w64-audaspace/0013-Bugfix-Return-correct-length-for-modulator-and-super.patch @@ -0,0 +1,73 @@ +From ed50f3bb3ce492bd6190d2c264ba00766346daf6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Fri, 10 May 2019 22:40:59 +0200 +Subject: [PATCH 13/16] Bugfix: Return correct length for modulator and + superpose. + +Also: +- Remove unnecessary includes in DynamicMusic.cpp +- Formatting fix in Sine.h +--- + include/generator/Sine.h | 3 +-- + src/fx/DynamicMusic.cpp | 3 --- + src/fx/ModulatorReader.cpp | 2 +- + src/sequence/SuperposeReader.cpp | 2 +- + 4 files changed, 3 insertions(+), 7 deletions(-) + +diff --git a/include/generator/Sine.h b/include/generator/Sine.h +index ee78fc7..0c7dd15 100644 +--- a/include/generator/Sine.h ++++ b/include/generator/Sine.h +@@ -53,8 +53,7 @@ public: + * \param frequency The desired frequency. + * \param sampleRate The target sample rate for playback. + */ +- Sine(float frequency, +- SampleRate sampleRate = RATE_48000); ++ Sine(float frequency, SampleRate sampleRate = RATE_48000); + + /** + * Returns the frequency of the sine wave. +diff --git a/src/fx/DynamicMusic.cpp b/src/fx/DynamicMusic.cpp +index 2b0acc0..c682108 100644 +--- a/src/fx/DynamicMusic.cpp ++++ b/src/fx/DynamicMusic.cpp +@@ -15,9 +15,6 @@ + ******************************************************************************/ + + #include "fx/DynamicMusic.h" +-#include "generator/Silence.h" +-#include "fx/Fader.h" +-#include "fx/Limiter.h" + + #include + #include +diff --git a/src/fx/ModulatorReader.cpp b/src/fx/ModulatorReader.cpp +index c17cee0..f7cdc1d 100644 +--- a/src/fx/ModulatorReader.cpp ++++ b/src/fx/ModulatorReader.cpp +@@ -48,7 +48,7 @@ int ModulatorReader::getLength() const + int len2 = m_reader2->getLength(); + if((len1 < 0) || (len2 < 0)) + return -1; +- return std::min(len1, len2); ++ return std::max(len1, len2); + } + + int ModulatorReader::getPosition() const +diff --git a/src/sequence/SuperposeReader.cpp b/src/sequence/SuperposeReader.cpp +index 9206a7a..a65185a 100644 +--- a/src/sequence/SuperposeReader.cpp ++++ b/src/sequence/SuperposeReader.cpp +@@ -48,7 +48,7 @@ int SuperposeReader::getLength() const + int len2 = m_reader2->getLength(); + if((len1 < 0) || (len2 < 0)) + return -1; +- return std::min(len1, len2); ++ return std::max(len1, len2); + } + + int SuperposeReader::getPosition() const +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0014-Add-sample-rate-parameter-to-silence-generation.patch b/mingw-w64-audaspace/0014-Add-sample-rate-parameter-to-silence-generation.patch new file mode 100644 index 0000000000..9732b47259 --- /dev/null +++ b/mingw-w64-audaspace/0014-Add-sample-rate-parameter-to-silence-generation.patch @@ -0,0 +1,274 @@ +From 734ef038a1db1f6dd819eb7f78a2b99ac10b79c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Fri, 10 May 2019 22:41:49 +0200 +Subject: [PATCH 14/16] Add sample rate parameter to silence generation. + +Also: minor documentation bug fixes. +--- + bindings/C/AUD_Sound.cpp | 4 ++-- + bindings/C/AUD_Sound.h | 3 ++- + bindings/C/AUD_Special.cpp | 6 +++--- + bindings/python/PySequence.cpp | 8 ++++---- + bindings/python/PySound.cpp | 16 ++++++++++++---- + demos/signalgen.cpp | 2 +- + include/generator/Silence.h | 9 ++++++++- + include/generator/SilenceReader.h | 8 +++++++- + src/generator/Silence.cpp | 5 +++-- + src/generator/SilenceReader.cpp | 7 ++++--- + 10 files changed, 46 insertions(+), 22 deletions(-) + +diff --git a/bindings/C/AUD_Sound.cpp b/bindings/C/AUD_Sound.cpp +index 00a59f4..8c99ce2 100644 +--- a/bindings/C/AUD_Sound.cpp ++++ b/bindings/C/AUD_Sound.cpp +@@ -277,9 +277,9 @@ AUD_API AUD_Sound* AUD_Sound_sawtooth(float frequency, AUD_SampleRate rate) + return new AUD_Sound(new Sawtooth(frequency, rate)); + } + +-AUD_API AUD_Sound*AUD_Sound_silence() ++AUD_API AUD_Sound* AUD_Sound_silence(AUD_SampleRate rate) + { +- return new AUD_Sound(new Silence()); ++ return new AUD_Sound(new Silence(rate)); + } + + AUD_API AUD_Sound* AUD_Sound_sine(float frequency, AUD_SampleRate rate) +diff --git a/bindings/C/AUD_Sound.h b/bindings/C/AUD_Sound.h +index 66d6c53..5317261 100644 +--- a/bindings/C/AUD_Sound.h ++++ b/bindings/C/AUD_Sound.h +@@ -113,9 +113,10 @@ extern AUD_API AUD_Sound* AUD_Sound_sawtooth(float frequency, AUD_SampleRate rat + + /** + * Creates a quiet sound. ++ * \param rate The sample rate of the silence sound. + * \return A handle of the sound. + */ +-extern AUD_API AUD_Sound* AUD_Sound_silence(); ++extern AUD_API AUD_Sound* AUD_Sound_silence(AUD_SampleRate rate); + + /** + * Creates a sine sound. +diff --git a/bindings/C/AUD_Special.cpp b/bindings/C/AUD_Special.cpp +index f8f4665..30148fa 100644 +--- a/bindings/C/AUD_Special.cpp ++++ b/bindings/C/AUD_Special.cpp +@@ -177,11 +177,11 @@ static void pauseSound(AUD_Handle* handle) + + AUD_API AUD_Handle* AUD_pauseAfter(AUD_Handle* handle, float seconds) + { +- std::shared_ptr silence = std::shared_ptr(new Silence); +- std::shared_ptr limiter = std::shared_ptr(new Limiter(silence, 0, seconds)); +- + auto device = DeviceManager::getDevice(); + ++ std::shared_ptr silence = std::shared_ptr(new Silence(device->getSpecs().rate)); ++ std::shared_ptr limiter = std::shared_ptr(new Limiter(silence, 0, seconds)); ++ + std::lock_guard lock(*device); + + try +diff --git a/bindings/python/PySequence.cpp b/bindings/python/PySequence.cpp +index d4773c7..e574d76 100644 +--- a/bindings/python/PySequence.cpp ++++ b/bindings/python/PySequence.cpp +@@ -100,7 +100,7 @@ Sequence_new(PyTypeObject* type, PyObject* args, PyObject* kwds) + + PyDoc_STRVAR(M_aud_Sequence_add_doc, + "add()\n\n" +- "Adds a new entry to the scene.\n" ++ "Adds a new entry to the sequence.\n\n" + ":arg sound: The sound this entry should play.\n" + ":type sound: :class:`Sound`\n" + ":arg begin: The start time.\n" +@@ -151,8 +151,8 @@ Sequence_add(Sequence* self, PyObject* args, PyObject* kwds) + } + + PyDoc_STRVAR(M_aud_Sequence_remove_doc, +- "reomve()\n\n" +- "Adds a new entry to the scene.\n" ++ "remove()\n\n" ++ "Removes an entry from the sequence.\n\n" + ":arg entry: The entry to remove.\n" + ":type entry: :class:`SequenceEntry`\n"); + +@@ -579,7 +579,7 @@ static PyGetSetDef Sequence_properties[] = { + }; + + PyDoc_STRVAR(M_aud_Sequence_doc, +- "This sound represents sequenced entries to play a sound scene."); ++ "This sound represents sequenced entries to play a sound sequence."); + + extern PyTypeObject SoundType; + +diff --git a/bindings/python/PySound.cpp b/bindings/python/PySound.cpp +index 17fcdbe..c589e71 100644 +--- a/bindings/python/PySound.cpp ++++ b/bindings/python/PySound.cpp +@@ -470,14 +470,22 @@ Sound_sawtooth(PyTypeObject* type, PyObject* args) + } + + PyDoc_STRVAR(M_aud_Sound_silence_doc, +- "silence()\n\n" ++ "silence(rate=48000)\n\n" + "Creates a silence sound which plays simple silence.\n\n" ++ ":arg rate: The sampling rate in Hz. It's recommended to set this " ++ "value to the playback device's samling rate to avoid resamping.\n" ++ ":type rate: int\n" + ":return: The created :class:`Sound` object.\n" + ":rtype: :class:`Sound`"); + + static PyObject * +-Sound_silence(PyTypeObject* type) ++Sound_silence(PyTypeObject* type, PyObject* args) + { ++ double rate = 48000; ++ ++ if(!PyArg_ParseTuple(args, "|d:sawtooth", &rate)) ++ return nullptr; ++ + Sound* self; + + self = (Sound*)type->tp_alloc(type, 0); +@@ -485,7 +493,7 @@ Sound_silence(PyTypeObject* type) + { + try + { +- self->sound = new std::shared_ptr(new Silence()); ++ self->sound = new std::shared_ptr(new Silence((SampleRate)rate)); + } + catch(Exception& e) + { +@@ -1788,7 +1796,7 @@ static PyMethodDef Sound_methods[] = { + {"sawtooth", (PyCFunction)Sound_sawtooth, METH_VARARGS | METH_CLASS, + M_aud_Sound_sawtooth_doc + }, +- {"silence", (PyCFunction)Sound_silence, METH_NOARGS | METH_CLASS, ++ {"silence", (PyCFunction)Sound_silence, METH_VARARGS | METH_CLASS, + M_aud_Sound_silence_doc + }, + {"sine", (PyCFunction)Sound_sine, METH_VARARGS | METH_CLASS, +diff --git a/demos/signalgen.cpp b/demos/signalgen.cpp +index ad7a79b..678db9e 100644 +--- a/demos/signalgen.cpp ++++ b/demos/signalgen.cpp +@@ -39,7 +39,7 @@ int main(int argc, char* argv[]) + float duration = 1.0f; + + auto sawtooth = std::shared_ptr(new Sawtooth(frequency, sampleRate)); +- auto silence = std::shared_ptr(new Silence); ++ auto silence = std::shared_ptr(new Silence(sampleRate)); + auto sine = std::shared_ptr(new Sine(frequency, sampleRate)); + auto square = std::shared_ptr(new Square(frequency, sampleRate)); + auto triangle = std::shared_ptr(new Triangle(frequency, sampleRate)); +diff --git a/include/generator/Silence.h b/include/generator/Silence.h +index a35b83d..1aa26eb 100644 +--- a/include/generator/Silence.h ++++ b/include/generator/Silence.h +@@ -23,6 +23,7 @@ + */ + + #include "ISound.h" ++#include "respec/Specification.h" + + AUD_NAMESPACE_BEGIN + +@@ -32,6 +33,11 @@ AUD_NAMESPACE_BEGIN + class AUD_API Silence : public ISound + { + private: ++ /** ++ * The target sample rate for output. ++ */ ++ const SampleRate m_sampleRate; ++ + // delete copy constructor and operator= + Silence(const Silence&) = delete; + Silence& operator=(const Silence&) = delete; +@@ -39,8 +45,9 @@ private: + public: + /** + * Creates a new silence sound. ++ * \param sampleRate The target sample rate for playback. + */ +- Silence(); ++ Silence(SampleRate sampleRate = RATE_48000); + + virtual std::shared_ptr createReader(); + }; +diff --git a/include/generator/SilenceReader.h b/include/generator/SilenceReader.h +index ecc0ce8..c32db4b 100644 +--- a/include/generator/SilenceReader.h ++++ b/include/generator/SilenceReader.h +@@ -38,6 +38,11 @@ private: + */ + int m_position; + ++ /** ++ * The sample rate for the output. ++ */ ++ const SampleRate m_sampleRate; ++ + // delete copy constructor and operator= + SilenceReader(const SilenceReader&) = delete; + SilenceReader& operator=(const SilenceReader&) = delete; +@@ -45,8 +50,9 @@ private: + public: + /** + * Creates a new reader. ++ * \param sampleRate The output sample rate. + */ +- SilenceReader(); ++ SilenceReader(SampleRate sampleRate); + + virtual bool isSeekable() const; + virtual void seek(int position); +diff --git a/src/generator/Silence.cpp b/src/generator/Silence.cpp +index a173a1b..2919f89 100644 +--- a/src/generator/Silence.cpp ++++ b/src/generator/Silence.cpp +@@ -19,13 +19,14 @@ + + AUD_NAMESPACE_BEGIN + +-Silence::Silence() ++Silence::Silence(SampleRate sampleRate) : ++ m_sampleRate(sampleRate) + { + } + + std::shared_ptr Silence::createReader() + { +- return std::shared_ptr(new SilenceReader()); ++ return std::shared_ptr(new SilenceReader(m_sampleRate)); + } + + AUD_NAMESPACE_END +diff --git a/src/generator/SilenceReader.cpp b/src/generator/SilenceReader.cpp +index 39358cc..746cc76 100644 +--- a/src/generator/SilenceReader.cpp ++++ b/src/generator/SilenceReader.cpp +@@ -20,8 +20,9 @@ + + AUD_NAMESPACE_BEGIN + +-SilenceReader::SilenceReader() : +- m_position(0) ++SilenceReader::SilenceReader(SampleRate sampleRate) : ++ m_position(0), ++ m_sampleRate(sampleRate) + { + } + +@@ -48,7 +49,7 @@ int SilenceReader::getPosition() const + Specs SilenceReader::getSpecs() const + { + Specs specs; +- specs.rate = RATE_48000; ++ specs.rate = m_sampleRate; + specs.channels = CHANNELS_MONO; + return specs; + } +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0015-Minor-CMakeLists.txt-formatting-fixes.patch b/mingw-w64-audaspace/0015-Minor-CMakeLists.txt-formatting-fixes.patch new file mode 100644 index 0000000000..e2deacf249 --- /dev/null +++ b/mingw-w64-audaspace/0015-Minor-CMakeLists.txt-formatting-fixes.patch @@ -0,0 +1,36 @@ +From afadb94be358a08575bf2c55edf5966d1a5d19c1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Fri, 10 May 2019 22:51:45 +0200 +Subject: [PATCH 15/16] Minor CMakeLists.txt formatting fixes. + +--- + CMakeLists.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0e88ee3..1c173ae 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -82,7 +82,7 @@ set(SRC + src/fx/Volume.cpp + src/fx/VolumeReader.cpp + src/fx/VolumeSound.cpp +- src/fx/VolumeStorage.cpp ++ src/fx/VolumeStorage.cpp + src/generator/Sawtooth.cpp + src/generator/SawtoothReader.cpp + src/generator/Silence.cpp +@@ -700,8 +700,8 @@ set(LIB_DESTINATION "lib${LIB_SUFFIX}") + # library + + add_library(audaspace ${LIBRARY_TYPE} ${SRC} ${HDR}) +-target_link_libraries(audaspace ${LIBRARIES}) +-set_target_properties(audaspace PROPERTIES SOVERSION ${AUDASPACE_VERSION}) ++target_link_libraries(audaspace ${LIBRARIES}) ++set_target_properties(audaspace PROPERTIES SOVERSION ${AUDASPACE_VERSION}) + + install(TARGETS audaspace + RUNTIME DESTINATION ${BIN_DESTINATION} +-- +2.22.0 + diff --git a/mingw-w64-audaspace/0016-Fix-Missing-include-in-FileManager.h.patch b/mingw-w64-audaspace/0016-Fix-Missing-include-in-FileManager.h.patch new file mode 100644 index 0000000000..ff61da027a --- /dev/null +++ b/mingw-w64-audaspace/0016-Fix-Missing-include-in-FileManager.h.patch @@ -0,0 +1,24 @@ +From 2fb9862bfd7dd953a51f9bf4763bf0b308ddee13 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= +Date: Fri, 10 May 2019 23:04:14 +0200 +Subject: [PATCH 16/16] Fix: Missing include in FileManager.h. + +--- + include/file/FileManager.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/file/FileManager.h b/include/file/FileManager.h +index 03943ea..5670860 100644 +--- a/include/file/FileManager.h ++++ b/include/file/FileManager.h +@@ -27,6 +27,7 @@ + + #include + #include ++#include + + AUD_NAMESPACE_BEGIN + +-- +2.22.0 + diff --git a/mingw-w64-audaspace/10-mingw-relocate.patch b/mingw-w64-audaspace/0100-mingw-relocate.patch similarity index 100% rename from mingw-w64-audaspace/10-mingw-relocate.patch rename to mingw-w64-audaspace/0100-mingw-relocate.patch diff --git a/mingw-w64-audaspace/0101-mingw-exports.patch b/mingw-w64-audaspace/0101-mingw-exports.patch new file mode 100644 index 0000000000..85866c58ea --- /dev/null +++ b/mingw-w64-audaspace/0101-mingw-exports.patch @@ -0,0 +1,11 @@ +--- audaspace-1.3.0/config/Audaspace.h.in.orig 2019-08-02 13:13:22.401199900 +0300 ++++ audaspace-1.3.0/config/Audaspace.h.in 2019-08-02 13:13:36.722025100 +0300 +@@ -65,7 +65,7 @@ + + #define @AUD_LIBRARY_TYPE@ + +-#ifdef _MSC_VER ++#ifdef _WIN32 + #define AUD_EXPORT_API __declspec(dllexport) + #define AUD_USE_API __declspec(dllimport) + #define AUD_LOCAL diff --git a/mingw-w64-audaspace/PKGBUILD b/mingw-w64-audaspace/PKGBUILD index 36c67a8a2d..2a2bd429e3 100644 --- a/mingw-w64-audaspace/PKGBUILD +++ b/mingw-w64-audaspace/PKGBUILD @@ -13,35 +13,85 @@ depends=("${MINGW_PACKAGE_PREFIX}-ffmpeg" "${MINGW_PACKAGE_PREFIX}-libsndfile" "${MINGW_PACKAGE_PREFIX}-openal" "${MINGW_PACKAGE_PREFIX}-python3" + "${MINGW_PACKAGE_PREFIX}-python3-numpy" "${MINGW_PACKAGE_PREFIX}-SDL2") makedepends=("${MINGW_PACKAGE_PREFIX}-cmake" + "${MINGW_PACKAGE_PREFIX}-doxygen" "${MINGW_PACKAGE_PREFIX}-gcc" + "${MINGW_PACKAGE_PREFIX}-python3-sphinx" "${MINGW_PACKAGE_PREFIX}-pkg-config") url="https://audaspace.github.io/" source=(${_realname}-${pkgver}.tar.gz::https://github.com/audaspace/audaspace/archive/v${pkgver}.tar.gz - 01-gcc7-build.patch - 02-support-new-ffmpeg.patch - 03-backport-from-blender.patch - 04-python-memory-leak.patch - 05-openal-recreate-device.patch - 10-mingw-relocate.patch) + 0001-Fix-for-seeking-with-modified-pitch.patch + 0002-Bugfix-for-building-with-gcc7.patch + 0003-Make-fftw3-optional.patch + 0004-Build-option-configure-whether-to-build-versioned-pl.patch + 0005-Support-newer-ffmpeg-versions.patch + 0006-Udpate-for-travis.ci.patch + 0007-Some-fixes-backported-from-Blender.patch + 0008-Silence-some-warnings.patch + 0009-Bugfix-memory-leak-in-python-API.patch + 0010-OpenAL-recreate-device-if-disconnected.patch + 0011-Bugfix-don-t-add-non-existing-devices-to-the-device-.patch + 0012-Adding-a-modulator-sound-effect.patch + 0013-Bugfix-Return-correct-length-for-modulator-and-super.patch + 0014-Add-sample-rate-parameter-to-silence-generation.patch + 0015-Minor-CMakeLists.txt-formatting-fixes.patch + 0016-Fix-Missing-include-in-FileManager.h.patch + 0100-mingw-relocate.patch + 0101-mingw-exports.patch) options=('!strip' 'staticlibs') sha256sums=('20f6669ca0b9403cdf0b21141a494315d153ad00afccaad72c2e4e86586591d2' - 'fe5dfc6b6bc59edddaf923f6713903a55783523c75cad93841db4e36a493cca4' - 'fb99e50be7313c8b82fe6a6bc47ef2f77efdab5b27d516576d3ff7a31a176b87' - '618873a31579427eba61529a14fad665285c9403c9e3196fc476605bf4e58cf3' - 'a490c4f2c4aaf2fa3c87ba623b0179b731d9fb390c38ce04113e01c7cec3c7b7' - 'b17869e66c784f96c01871ac06a519ef94804ec11ea367f4c9a2a95dbd5fabb1' - 'cc68bcc7154c1b06e96e86c587aeafbd6befa5538cf813ee5c42a3ccc13e357d') + '1ebc506fa3be5128b5948b91a9457020ab01249f8a39f0dc274164a7c901c0b1' + '701c872920bf41c2906a75f3a5ff4b8dd8cb4584b545c1c6e4075356831e1578' + 'c9769ed10b49347e247170eaad45a0c5aa3cd9d988ee72a5d3fd3bdf5705092d' + '8dcd74328ba96c2b7706dfed7bdeffb14aaa420542c84e624ca183e55ff7092e' + '9006274be9abcb20addff45e5d799f657cf883e66cd37fc189ee2cd2a626723b' + '22488e28874452d11344b257e6722e73f422a1428d1b5efa1ebf0065a032b541' + 'f829c41015ae55ff2d62907ee810b37a2d19f359c0bf12bc404566920457cc43' + '677ac49db32619679789833d43bb9460aeef73181be983e038004d402e1a7182' + '2107ef93d741df438e1d496346e8ef8405b06917c05dfce3edc0e537962893f5' + '3feef32eda72f56934d26ca2bdd9f30c0601181f2560e6ca4b2ef11776806d28' + '90d40dd68196fd672191284abd8b294afd0e7f7a71cecbe0dc955ee95d0a0202' + '63dfea3c6eb8d1d7d630b74f8b8acb7c95521b15964c841ac5780c7c4f523648' + '890068f35cf1fd36cfd2f90e2b9d0993c9666d06ef283d28b73a872dba04b3cb' + '05c043204eb616c937716bcad4107eb09578f671bce77fadde7f608fbe84f8bb' + 'fe084eabd8a82bd9a6a92013ff65450356a6d8b076c4dd95b027af6afaeef173' + '01cac25a1876b75e9ea246554314dca6ae07b13d5b6fcb7365f17a59ebc1b45d' + 'cc68bcc7154c1b06e96e86c587aeafbd6befa5538cf813ee5c42a3ccc13e357d' + '8cf2aefb1973177ec3d75443e47ba95c66ca113076e615af0a8f6c8de1398da0') + +# Helper macros to help make tasks easier # +apply_patch_with_msg() { + for _patch in "$@" + do + msg2 "Applying ${_patch}" + patch -Nbp1 -i "${srcdir}/${_patch}" + done +} prepare() { cd ${_realname}-${pkgver} - patch -p1 -i ${srcdir}/01-gcc7-build.patch - patch -p1 -i ${srcdir}/02-support-new-ffmpeg.patch - patch -p1 -i ${srcdir}/03-backport-from-blender.patch - patch -p1 -i ${srcdir}/04-python-memory-leak.patch - patch -p1 -i ${srcdir}/05-openal-recreate-device.patch - patch -p1 -i ${srcdir}/10-mingw-relocate.patch + + apply_patch_with_msg \ + 0001-Fix-for-seeking-with-modified-pitch.patch \ + 0002-Bugfix-for-building-with-gcc7.patch \ + 0003-Make-fftw3-optional.patch \ + 0004-Build-option-configure-whether-to-build-versioned-pl.patch \ + 0005-Support-newer-ffmpeg-versions.patch \ + 0006-Udpate-for-travis.ci.patch \ + 0007-Some-fixes-backported-from-Blender.patch \ + 0008-Silence-some-warnings.patch \ + 0009-Bugfix-memory-leak-in-python-API.patch \ + 0010-OpenAL-recreate-device-if-disconnected.patch \ + 0011-Bugfix-don-t-add-non-existing-devices-to-the-device-.patch \ + 0012-Adding-a-modulator-sound-effect.patch \ + 0013-Bugfix-Return-correct-length-for-modulator-and-super.patch \ + 0014-Add-sample-rate-parameter-to-silence-generation.patch \ + 0015-Minor-CMakeLists.txt-formatting-fixes.patch \ + 0016-Fix-Missing-include-in-FileManager.h.patch \ + 0100-mingw-relocate.patch \ + 0101-mingw-exports.patch } build() {