Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/extern
diff options
context:
space:
mode:
authorGermano <germano.costa@ig.com.br>2018-02-01 03:35:46 +0300
committerGermano <germano.costa@ig.com.br>2018-02-01 03:35:46 +0300
commit0a4e170c28cecd70e7cfb776f0c22a435ecd10e9 (patch)
tree598f691f9305d91084f76e8e15ee0cecdb5b7d8b /extern
parent42ca1fe89cc93929426ab681a5520e5938158a4d (diff)
Revert "tmp"
This reverts commit ea31f0ac3b877eb0df4c47d0c908d11d1bff33e4.
Diffstat (limited to 'extern')
-rw-r--r--extern/audaspace/AUTHORS16
-rw-r--r--extern/audaspace/CHANGES115
-rw-r--r--extern/audaspace/CMakeLists.txt986
-rw-r--r--extern/audaspace/INSTALL107
-rw-r--r--extern/audaspace/LICENSE202
-rw-r--r--extern/audaspace/README.md47
-rw-r--r--extern/audaspace/bindings/C/AUD_Device.cpp336
-rw-r--r--extern/audaspace/bindings/C/AUD_Device.h258
-rw-r--r--extern/audaspace/bindings/C/AUD_DynamicMusic.cpp144
-rw-r--r--extern/audaspace/bindings/C/AUD_DynamicMusic.h145
-rw-r--r--extern/audaspace/bindings/C/AUD_HRTF.cpp50
-rw-r--r--extern/audaspace/bindings/C/AUD_HRTF.h48
-rw-r--r--extern/audaspace/bindings/C/AUD_Handle.cpp384
-rw-r--r--extern/audaspace/bindings/C/AUD_Handle.h308
-rw-r--r--extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp44
-rw-r--r--extern/audaspace/bindings/C/AUD_ImpulseResponse.h40
-rw-r--r--extern/audaspace/bindings/C/AUD_PlaybackManager.cpp94
-rw-r--r--extern/audaspace/bindings/C/AUD_PlaybackManager.h103
-rw-r--r--extern/audaspace/bindings/C/AUD_Sequence.cpp315
-rw-r--r--extern/audaspace/bindings/C/AUD_Sequence.h338
-rw-r--r--extern/audaspace/bindings/C/AUD_Sound.cpp709
-rw-r--r--extern/audaspace/bindings/C/AUD_Sound.h370
-rw-r--r--extern/audaspace/bindings/C/AUD_Source.cpp84
-rw-r--r--extern/audaspace/bindings/C/AUD_Source.h84
-rw-r--r--extern/audaspace/bindings/C/AUD_Special.cpp420
-rw-r--r--extern/audaspace/bindings/C/AUD_Special.h138
-rw-r--r--extern/audaspace/bindings/C/AUD_ThreadPool.cpp42
-rw-r--r--extern/audaspace/bindings/C/AUD_ThreadPool.h40
-rw-r--r--extern/audaspace/bindings/C/AUD_Types.h179
-rw-r--r--extern/audaspace/bindings/doc/conf.py.in261
-rw-r--r--extern/audaspace/bindings/doc/device.rst7
-rw-r--r--extern/audaspace/bindings/doc/handle.rst7
-rw-r--r--extern/audaspace/bindings/doc/index.rst35
-rw-r--r--extern/audaspace/bindings/doc/sequence.rst7
-rw-r--r--extern/audaspace/bindings/doc/sequence_entry.rst7
-rw-r--r--extern/audaspace/bindings/doc/sound.rst7
-rw-r--r--extern/audaspace/bindings/doc/tutorials.rst166
-rw-r--r--extern/audaspace/bindings/python/PyAPI.cpp231
-rw-r--r--extern/audaspace/bindings/python/PyAPI.h45
-rw-r--r--extern/audaspace/bindings/python/PyDevice.cpp785
-rw-r--r--extern/audaspace/bindings/python/PyDevice.h33
-rw-r--r--extern/audaspace/bindings/python/PyDynamicMusic.cpp467
-rw-r--r--extern/audaspace/bindings/python/PyDynamicMusic.h33
-rw-r--r--extern/audaspace/bindings/python/PyHRTF.cpp247
-rw-r--r--extern/audaspace/bindings/python/PyHRTF.h33
-rw-r--r--extern/audaspace/bindings/python/PyHandle.cpp1126
-rw-r--r--extern/audaspace/bindings/python/PyHandle.h33
-rw-r--r--extern/audaspace/bindings/python/PyImpulseResponse.cpp137
-rw-r--r--extern/audaspace/bindings/python/PyImpulseResponse.h33
-rw-r--r--extern/audaspace/bindings/python/PyPlaybackManager.cpp389
-rw-r--r--extern/audaspace/bindings/python/PyPlaybackManager.h33
-rw-r--r--extern/audaspace/bindings/python/PySequence.cpp655
-rw-r--r--extern/audaspace/bindings/python/PySequence.h33
-rw-r--r--extern/audaspace/bindings/python/PySequenceEntry.cpp740
-rw-r--r--extern/audaspace/bindings/python/PySequenceEntry.h33
-rw-r--r--extern/audaspace/bindings/python/PySound.cpp1966
-rw-r--r--extern/audaspace/bindings/python/PySound.h33
-rw-r--r--extern/audaspace/bindings/python/PySource.cpp260
-rw-r--r--extern/audaspace/bindings/python/PySource.h33
-rw-r--r--extern/audaspace/bindings/python/PyThreadPool.cpp134
-rw-r--r--extern/audaspace/bindings/python/PyThreadPool.h33
-rw-r--r--extern/audaspace/bindings/python/examples/binaural.py13
-rw-r--r--extern/audaspace/bindings/python/examples/convolution.py10
-rw-r--r--extern/audaspace/bindings/python/examples/dynamicmusic.py20
-rw-r--r--extern/audaspace/bindings/python/examples/playbackmanager.py27
-rw-r--r--extern/audaspace/bindings/python/examples/player.py7
-rw-r--r--extern/audaspace/bindings/python/examples/randomSounds.py21
-rw-r--r--extern/audaspace/bindings/python/examples/simple.py7
-rw-r--r--extern/audaspace/bindings/python/examples/siren.py19
-rw-r--r--extern/audaspace/bindings/python/examples/siren2.py23
-rw-r--r--extern/audaspace/bindings/python/examples/tetris.py66
-rw-r--r--extern/audaspace/bindings/python/examples/tetris2.py64
-rw-r--r--extern/audaspace/bindings/python/examples/tetris3.py63
-rw-r--r--extern/audaspace/bindings/python/setup.py.in61
-rw-r--r--extern/audaspace/blender_config.cmake26
-rw-r--r--extern/audaspace/config/Audaspace.h.in131
-rw-r--r--extern/audaspace/include/Exception.h185
-rw-r--r--extern/audaspace/include/IReader.h92
-rw-r--r--extern/audaspace/include/ISound.h57
-rw-r--r--extern/audaspace/include/devices/DefaultSynchronizer.h44
-rw-r--r--extern/audaspace/include/devices/DeviceManager.h129
-rw-r--r--extern/audaspace/include/devices/I3DDevice.h142
-rw-r--r--extern/audaspace/include/devices/I3DHandle.h232
-rw-r--r--extern/audaspace/include/devices/IDevice.h123
-rw-r--r--extern/audaspace/include/devices/IDeviceFactory.h72
-rw-r--r--extern/audaspace/include/devices/IHandle.h189
-rw-r--r--extern/audaspace/include/devices/ISynchronizer.h92
-rw-r--r--extern/audaspace/include/devices/NULLDevice.h96
-rw-r--r--extern/audaspace/include/devices/ReadDevice.h82
-rw-r--r--extern/audaspace/include/devices/SoftwareDevice.h368
-rw-r--r--extern/audaspace/include/file/File.h74
-rw-r--r--extern/audaspace/include/file/FileManager.h95
-rw-r--r--extern/audaspace/include/file/FileWriter.h78
-rw-r--r--extern/audaspace/include/file/IFileInput.h60
-rw-r--r--extern/audaspace/include/file/IFileOutput.h52
-rw-r--r--extern/audaspace/include/file/IWriter.h89
-rw-r--r--extern/audaspace/include/fx/ADSR.h121
-rw-r--r--extern/audaspace/include/fx/ADSRReader.h101
-rw-r--r--extern/audaspace/include/fx/Accumulator.h79
-rw-r--r--extern/audaspace/include/fx/BaseIIRFilterReader.h133
-rw-r--r--extern/audaspace/include/fx/BinauralReader.h223
-rw-r--r--extern/audaspace/include/fx/BinauralSound.h119
-rw-r--r--extern/audaspace/include/fx/Butterworth.h48
-rw-r--r--extern/audaspace/include/fx/ButterworthCalculator.h55
-rw-r--r--extern/audaspace/include/fx/CallbackIIRFilterReader.h88
-rw-r--r--extern/audaspace/include/fx/Convolver.h177
-rw-r--r--extern/audaspace/include/fx/ConvolverReader.h198
-rw-r--r--extern/audaspace/include/fx/ConvolverSound.h100
-rw-r--r--extern/audaspace/include/fx/Delay.h60
-rw-r--r--extern/audaspace/include/fx/DelayReader.h63
-rw-r--r--extern/audaspace/include/fx/DynamicIIRFilter.h54
-rw-r--r--extern/audaspace/include/fx/DynamicIIRFilterReader.h60
-rw-r--r--extern/audaspace/include/fx/DynamicMusic.h235
-rw-r--r--extern/audaspace/include/fx/Effect.h76
-rw-r--r--extern/audaspace/include/fx/EffectReader.h68
-rw-r--r--extern/audaspace/include/fx/Envelope.h93
-rw-r--r--extern/audaspace/include/fx/FFTConvolver.h196
-rw-r--r--extern/audaspace/include/fx/Fader.h87
-rw-r--r--extern/audaspace/include/fx/FaderReader.h77
-rw-r--r--extern/audaspace/include/fx/HRTF.h108
-rw-r--r--extern/audaspace/include/fx/HRTFLoader.h99
-rw-r--r--extern/audaspace/include/fx/Highpass.h49
-rw-r--r--extern/audaspace/include/fx/HighpassCalculator.h61
-rw-r--r--extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h50
-rw-r--r--extern/audaspace/include/fx/IIRFilter.h63
-rw-r--r--extern/audaspace/include/fx/IIRFilterReader.h70
-rw-r--r--extern/audaspace/include/fx/ImpulseResponse.h108
-rw-r--r--extern/audaspace/include/fx/Limiter.h73
-rw-r--r--extern/audaspace/include/fx/LimiterReader.h65
-rw-r--r--extern/audaspace/include/fx/Loop.h62
-rw-r--r--extern/audaspace/include/fx/LoopReader.h65
-rw-r--r--extern/audaspace/include/fx/Lowpass.h49
-rw-r--r--extern/audaspace/include/fx/LowpassCalculator.h61
-rw-r--r--extern/audaspace/include/fx/MutableReader.h71
-rw-r--r--extern/audaspace/include/fx/MutableSound.h58
-rw-r--r--extern/audaspace/include/fx/Pitch.h55
-rw-r--r--extern/audaspace/include/fx/PitchReader.h67
-rw-r--r--extern/audaspace/include/fx/PlaybackCategory.h127
-rw-r--r--extern/audaspace/include/fx/PlaybackManager.h156
-rw-r--r--extern/audaspace/include/fx/Reverse.h50
-rw-r--r--extern/audaspace/include/fx/ReverseReader.h65
-rw-r--r--extern/audaspace/include/fx/SoundList.h110
-rw-r--r--extern/audaspace/include/fx/Source.h109
-rw-r--r--extern/audaspace/include/fx/Sum.h49
-rw-r--r--extern/audaspace/include/fx/Threshold.h78
-rw-r--r--extern/audaspace/include/fx/Volume.h63
-rw-r--r--extern/audaspace/include/fx/VolumeReader.h70
-rw-r--r--extern/audaspace/include/fx/VolumeSound.h74
-rw-r--r--extern/audaspace/include/fx/VolumeStorage.h71
-rw-r--r--extern/audaspace/include/generator/Sawtooth.h66
-rw-r--r--extern/audaspace/include/generator/SawtoothReader.h86
-rw-r--r--extern/audaspace/include/generator/Silence.h48
-rw-r--r--extern/audaspace/include/generator/SilenceReader.h59
-rw-r--r--extern/audaspace/include/generator/Sine.h67
-rw-r--r--extern/audaspace/include/generator/SineReader.h77
-rw-r--r--extern/audaspace/include/generator/Square.h67
-rw-r--r--extern/audaspace/include/generator/SquareReader.h86
-rw-r--r--extern/audaspace/include/generator/Triangle.h67
-rw-r--r--extern/audaspace/include/generator/TriangleReader.h86
-rw-r--r--extern/audaspace/include/plugin/PluginManager.h81
-rw-r--r--extern/audaspace/include/respec/ChannelMapper.h51
-rw-r--r--extern/audaspace/include/respec/ChannelMapperReader.h151
-rw-r--r--extern/audaspace/include/respec/Converter.h51
-rw-r--r--extern/audaspace/include/respec/ConverterFunctions.h377
-rw-r--r--extern/audaspace/include/respec/ConverterReader.h67
-rw-r--r--extern/audaspace/include/respec/JOSResample.h50
-rw-r--r--extern/audaspace/include/respec/JOSResampleReader.h129
-rw-r--r--extern/audaspace/include/respec/LinearResample.h50
-rw-r--r--extern/audaspace/include/respec/LinearResampleReader.h80
-rw-r--r--extern/audaspace/include/respec/Mixer.h123
-rw-r--r--extern/audaspace/include/respec/ResampleReader.h61
-rw-r--r--extern/audaspace/include/respec/Specification.h138
-rw-r--r--extern/audaspace/include/respec/SpecsChanger.h74
-rw-r--r--extern/audaspace/include/sequence/AnimateableProperty.h129
-rw-r--r--extern/audaspace/include/sequence/Double.h60
-rw-r--r--extern/audaspace/include/sequence/DoubleReader.h77
-rw-r--r--extern/audaspace/include/sequence/PingPong.h50
-rw-r--r--extern/audaspace/include/sequence/Sequence.h171
-rw-r--r--extern/audaspace/include/sequence/SequenceData.h215
-rw-r--r--extern/audaspace/include/sequence/SequenceEntry.h315
-rw-r--r--extern/audaspace/include/sequence/SequenceReader.h94
-rw-r--r--extern/audaspace/include/sequence/Superpose.h62
-rw-r--r--extern/audaspace/include/sequence/SuperposeReader.h79
-rw-r--r--extern/audaspace/include/util/Barrier.h78
-rw-r--r--extern/audaspace/include/util/Buffer.h87
-rw-r--r--extern/audaspace/include/util/BufferReader.h76
-rw-r--r--extern/audaspace/include/util/FFTPlan.h120
-rw-r--r--extern/audaspace/include/util/ILockable.h46
-rw-r--r--extern/audaspace/include/util/Math3D.h324
-rw-r--r--extern/audaspace/include/util/StreamBuffer.h85
-rw-r--r--extern/audaspace/include/util/ThreadPool.h119
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEG.cpp63
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEG.h60
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp397
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGReader.h184
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp427
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h145
197 files changed, 0 insertions, 27519 deletions
diff --git a/extern/audaspace/AUTHORS b/extern/audaspace/AUTHORS
deleted file mode 100644
index 08007912102..00000000000
--- a/extern/audaspace/AUTHORS
+++ /dev/null
@@ -1,16 +0,0 @@
-Main author: Jörg Müller <nexyon@gmail.com>
-
-Minor improvements have been done while audaspace was an internal part of Blender by
-
-- Campbell Barton (bug fixes and cleanup)
-- Brecht Van Lommel (bug fixes and cleanup)
-- Sergey Sharybin (bug fixes and cleanup)
-- Nathan Letwory (bug fixes and cleanup)
-- Peter Schlaile (ffmpeg)
-- Jens Verwiebe (jack on Apple)
-
-The first three of them were employed by the Blender Foundation during that time.
-
-Some features (random sounds, dynamic music, playback manager, convolution and HRTFs support) were added as part of the VALS (Virtual Alliances for Learning Society) project by
-
-- Juan Francisco Crespo Galán <dethon_5@outlook.com>
diff --git a/extern/audaspace/CHANGES b/extern/audaspace/CHANGES
deleted file mode 100644
index bd5acaa88fb..00000000000
--- a/extern/audaspace/CHANGES
+++ /dev/null
@@ -1,115 +0,0 @@
-Audaspace 1.3
-=============
-
-- New features:
- - linear interpolation for volume changes in the software mixer
- - dynamic Loading for JACK
-- Bug fixes:
- - renamed Jack to JACK
- - C API was not working
- - filter python API parameter check
- - finding ffmpeg with pkgconfig
-
-64884a7 Windows fixes.
-53ba3e6 Implemented JACK dynamic loading.
-5ee0ee1 Continues last commit.
-c24b384 Trying to fix travis-ci python versioning once and for all (at least for python3).
-1fbf3bf Rename Jack => JACK where possible.
-6e4b31f Implemented linear interpolation for volume changes in the software mixer.
-817043c Fixing C API not working.
-c384daf Maybe travis-ci works now.
-aa7ddd7 Fix (hopefully) for previous commit.
-57c5dd7 Configure MACOSX_DEPLOYMENT_TARGET for travis-ci.
-7ae6ff9 Fix travis-ci python path.
-552fea4 Added posibillity to use math constants on MinGW
-c18ed59 Bugfix: incorrect parameter check in python API.
-6f048c3 CMake: fix finding ffmpeg with pkgconfig.
-
-Audaspace 1.2
-=============
-
-- New features:
- - sound list
- - random sounds
- - dynamic music playing
- - playback manager
- - convolution/reverbation
- - multi-threading
- - binaural audio
-- API changes:
- - changing default sample rate from 44.1 to 48 kHz
-- Bug fixes:
- - several standard library fixes.
-- Bindings API:
- - mixdown C API refactored
-- CMake/Building:
- - assuring numpy is installed
- - building the Python module on Mac OS X with CMake
-
-a6b6e70 Changing default sample rate from 44.1 to 48 kHz.
-20f0164 Bugfix: CMake custom command for python module on OS X.
-98679a2 Bugfix: using standard library (s)rand.
-5ab4fe7 Bugfix: first step in fixing the vector of array problem.
-e83f01d FFTW: trying to use complex to circumvent vector of array problem.
-093ebc0 Bugfix: abs -> std::fabs.
-328d7cc Bugfix: standard library include and call fixes.
-f78e330 Bugfix: using correct includes.
-64d7825 Behavior change: C API Mixdown
-749896b Merge pull request #3 from DethonUSAL/master
-6e9491c CMake: finding NumPy.
-
-Audaspace 1.1
-=============
-
-- Bug fixes:
- - pkgconfig uses cmake configured library directory
- - FFMPEG file writing crashed, also corrected pts for encoding
- - silenced Doxygen warnings about undefined defines
-- C++ API:
- - ResampleReader uses specs instead of sample rate
-- Bindings API:
- - writing sounds to files
- - reading sound data, specs and length
- - resampling sounds
-- CMake/Building:
- - first steps towards building for Mac
- - windows builds copy dlls automatically
-- Python module:
- - using distutils instead of setuptools
- - added numpy as dependency
-- Documentation:
- - added windows building and plugin documentation
- - disabled html timestamps in doxygen
- - updated sphinx template
- - build binding documentation without installing the python module
-
-Detailed list of changes:
-
-326a300 Documentation: windows, dll copying now done automatically.
-54cac4f Windows: install dlls.
-65c2d78 Bindings: Sound length and specs properties.
-c38da70 Bindings API: adding resampling.
-374822f Documentation: Added windows and plugin documentation.
-a9dc5b9 Python module: add numpy as dependency.
-c933a02 C API: implement new API based on the python API.
-ac54c52 Python API: silence numpy warnings.
-c9491bb Python API: checking for a positive sample rate.
-4eb1fa8 Python API: reorder functions.
-ec7c00b Sphinx update and fixes.
-e16d979 FFMPEG: correct pts during encoding.
-7ab3935 Documentation: git path fix.
-28d77bb Python: use distutils directly instead of setuptools.
-1f43284 Silence doxygen warning about undefined defines.
-0d52458 CMake: improvements and fixes for building on Mac.
-37daedf FFMPEG: bugfixes for file writing.
-780ca2a ResampleReader API change
-4d9863d Python API: Optimization for cached sounds' data access.
-ea04fee Python API: read sound data and create sound buffers as well as getting the specs of a sound.
-335b293 Python sound writing API.
-36a7252 Pkgconfig: use cmake configured library directory.
-5503908 Doxygen: disable html timestamps.
-
-Initial Release of Audaspace 1.0
-================================
-
-Audaspace has been the internal audio library of blender since blender 2.5. It is now released as a standalone library to be used in other projects as well.
diff --git a/extern/audaspace/CMakeLists.txt b/extern/audaspace/CMakeLists.txt
deleted file mode 100644
index 9e2921ef35a..00000000000
--- a/extern/audaspace/CMakeLists.txt
+++ /dev/null
@@ -1,986 +0,0 @@
-################################################################################
-# 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.
-################################################################################
-
-cmake_minimum_required(VERSION 3.0)
-include(CMakeDependentOption)
-
-if(POLICY CMP0054)
- cmake_policy(SET CMP0054 NEW)
-endif()
-
-project(audaspace)
-
-set(AUDASPACE_VERSION 1.3)
-set(AUDASPACE_LONG_VERSION ${AUDASPACE_VERSION}.0)
-
-if(DEFINED AUDASPACE_CMAKE_CFG)
- include(${AUDASPACE_CMAKE_CFG})
-endif()
-
-if(NOT DEFINED AUDASPACE_STANDALONE)
- set(AUDASPACE_STANDALONE TRUE)
-endif()
-
-# sources
-
-set(SRC
- src/devices/DefaultSynchronizer.cpp
- src/devices/DeviceManager.cpp
- src/devices/NULLDevice.cpp
- src/devices/ReadDevice.cpp
- src/devices/SoftwareDevice.cpp
- src/Exception.cpp
- src/file/File.cpp
- src/file/FileManager.cpp
- src/file/FileWriter.cpp
- src/fx/Accumulator.cpp
- src/fx/ADSR.cpp
- src/fx/ADSRReader.cpp
- src/fx/BaseIIRFilterReader.cpp
- src/fx/ButterworthCalculator.cpp
- src/fx/Butterworth.cpp
- src/fx/CallbackIIRFilterReader.cpp
- src/fx/Delay.cpp
- src/fx/DelayReader.cpp
- src/fx/DynamicIIRFilter.cpp
- src/fx/DynamicIIRFilterReader.cpp
- src/fx/DynamicMusic.cpp
- src/fx/Effect.cpp
- src/fx/EffectReader.cpp
- src/fx/Envelope.cpp
- src/fx/Fader.cpp
- src/fx/FaderReader.cpp
- src/fx/HighpassCalculator.cpp
- src/fx/Highpass.cpp
- src/fx/IIRFilter.cpp
- src/fx/IIRFilterReader.cpp
- src/fx/Limiter.cpp
- src/fx/LimiterReader.cpp
- src/fx/Loop.cpp
- src/fx/LoopReader.cpp
- src/fx/LowpassCalculator.cpp
- src/fx/Lowpass.cpp
- src/fx/MutableReader.cpp
- src/fx/MutableSound.cpp
- src/fx/Pitch.cpp
- src/fx/PitchReader.cpp
- src/fx/PlaybackManager.cpp
- src/fx/PlaybackCategory.cpp
- src/fx/Reverse.cpp
- src/fx/ReverseReader.cpp
- src/fx/SoundList.cpp
- src/fx/Source.cpp
- src/fx/Sum.cpp
- src/fx/Threshold.cpp
- src/fx/Volume.cpp
- src/fx/VolumeReader.cpp
- src/fx/VolumeSound.cpp
- src/fx/VolumeStorage.cpp
- src/generator/Sawtooth.cpp
- src/generator/SawtoothReader.cpp
- src/generator/Silence.cpp
- src/generator/SilenceReader.cpp
- src/generator/Sine.cpp
- src/generator/SineReader.cpp
- src/generator/Square.cpp
- src/generator/SquareReader.cpp
- src/generator/Triangle.cpp
- src/generator/TriangleReader.cpp
- src/respec/ChannelMapper.cpp
- src/respec/ChannelMapperReader.cpp
- src/respec/Converter.cpp
- src/respec/ConverterFunctions.cpp
- src/respec/ConverterReader.cpp
- src/respec/JOSResample.cpp
- src/respec/JOSResampleReaderCoeff.cpp
- src/respec/JOSResampleReader.cpp
- src/respec/LinearResample.cpp
- src/respec/LinearResampleReader.cpp
- src/respec/Mixer.cpp
- src/respec/ResampleReader.cpp
- src/respec/SpecsChanger.cpp
- src/sequence/AnimateableProperty.cpp
- src/sequence/Double.cpp
- src/sequence/DoubleReader.cpp
- src/sequence/PingPong.cpp
- src/sequence/Sequence.cpp
- src/sequence/SequenceData.cpp
- src/sequence/SequenceEntry.cpp
- src/sequence/SequenceHandle.cpp
- src/sequence/SequenceReader.cpp
- src/sequence/Superpose.cpp
- src/sequence/SuperposeReader.cpp
- src/util/Barrier.cpp
- src/util/Buffer.cpp
- src/util/BufferReader.cpp
- src/util/StreamBuffer.cpp
- src/util/ThreadPool.cpp
-)
-
-set(PRIVATE_HDR
- src/sequence/SequenceHandle.h
-)
-
-set(PUBLIC_HDR
- include/devices/DefaultSynchronizer.h
- include/devices/DeviceManager.h
- include/devices/I3DDevice.h
- include/devices/I3DHandle.h
- include/devices/IDeviceFactory.h
- include/devices/IDevice.h
- include/devices/IHandle.h
- include/devices/ISynchronizer.h
- include/devices/NULLDevice.h
- include/devices/ReadDevice.h
- include/devices/SoftwareDevice.h
- include/Exception.h
- include/file/File.h
- include/file/FileManager.h
- include/file/FileWriter.h
- include/file/IFileInput.h
- include/file/IFileOutput.h
- include/file/IWriter.h
- include/fx/Accumulator.h
- include/fx/ADSR.h
- include/fx/ADSRReader.h
- include/fx/BaseIIRFilterReader.h
- include/fx/ButterworthCalculator.h
- include/fx/Butterworth.h
- include/fx/CallbackIIRFilterReader.h
- include/fx/Delay.h
- include/fx/DelayReader.h
- include/fx/DynamicIIRFilter.h
- include/fx/DynamicIIRFilterReader.h
- include/fx/DynamicMusic.h
- include/fx/Effect.h
- include/fx/EffectReader.h
- include/fx/Envelope.h
- include/fx/Fader.h
- include/fx/FaderReader.h
- include/fx/HighpassCalculator.h
- include/fx/Highpass.h
- include/fx/IDynamicIIRFilterCalculator.h
- include/fx/IIRFilter.h
- include/fx/IIRFilterReader.h
- include/fx/Limiter.h
- include/fx/LimiterReader.h
- include/fx/Loop.h
- include/fx/LoopReader.h
- include/fx/LowpassCalculator.h
- include/fx/Lowpass.h
- include/fx/MutableReader.h
- include/fx/MutableSound.h
- include/fx/Pitch.h
- include/fx/PitchReader.h
- include/fx/PlaybackManager.h
- include/fx/PlaybackCategory.h
- include/fx/Reverse.h
- include/fx/ReverseReader.h
- include/fx/SoundList.h
- include/fx/Source.h
- include/fx/Sum.h
- include/fx/Threshold.h
- include/fx/Volume.h
- include/fx/VolumeReader.h
- include/fx/VolumeSound.h
- include/fx/VolumeStorage.h
- include/generator/Sawtooth.h
- include/generator/SawtoothReader.h
- include/generator/Silence.h
- include/generator/SilenceReader.h
- include/generator/Sine.h
- include/generator/SineReader.h
- include/generator/Square.h
- include/generator/SquareReader.h
- include/generator/Triangle.h
- include/generator/TriangleReader.h
- include/IReader.h
- include/ISound.h
- include/plugin/PluginManager.h
- include/respec/ChannelMapper.h
- include/respec/ChannelMapperReader.h
- include/respec/ConverterFunctions.h
- include/respec/Converter.h
- include/respec/ConverterReader.h
- include/respec/JOSResample.h
- include/respec/JOSResampleReader.h
- include/respec/LinearResample.h
- include/respec/LinearResampleReader.h
- include/respec/Mixer.h
- include/respec/ResampleReader.h
- include/respec/Specification.h
- include/respec/SpecsChanger.h
- include/sequence/AnimateableProperty.h
- include/sequence/Double.h
- include/sequence/DoubleReader.h
- include/sequence/PingPong.h
- include/sequence/SequenceData.h
- include/sequence/SequenceEntry.h
- include/sequence/Sequence.h
- include/sequence/SequenceReader.h
- include/sequence/Superpose.h
- include/sequence/SuperposeReader.h
- include/util/Barrier.h
- include/util/Buffer.h
- include/util/BufferReader.h
- include/util/ILockable.h
- include/util/Math3D.h
- include/util/StreamBuffer.h
- include/util/ThreadPool.h
-)
-
-set(HDR ${PRIVATE_HDR} ${PUBLIC_HDR})
-
-set(INCLUDE ${CMAKE_CURRENT_BINARY_DIR} include)
-
-if(WIN32)
- set(LIBRARIES)
- if(AUDASPACE_STANDALONE)
- set(DLLS)
- set(LIBRARY_PATH "../lib" CACHE PATH "Path which contains the libraries.")
- file(GLOB LIBRARY_DIRS ${LIBRARY_PATH}/*)
- list(APPEND CMAKE_PREFIX_PATH ${LIBRARY_DIRS})
- endif()
-else()
- set(LIBRARIES ${CMAKE_DL_LIBS} -lpthread)
-endif()
-
-set(STATIC_PLUGINS "")
-
-# dependencies
-
-if(AUDASPACE_STANDALONE)
- set(PACKAGE_OPTION QUIET)
- list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
-
- option(BUILD_DEMOS "Build and install demos" TRUE)
-
- 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)
- option(WITH_PYTHON "Build With Python Library" TRUE)
- option(WITH_SDL "Build With SDL" TRUE)
- option(WITH_STRICT_DEPENDENCIES "Error and abort instead of warning if a library is not found." FALSE)
-
- if(WITH_STRICT_DEPENDENCIES)
- set(PACKAGE_OPTION REQUIRED)
- endif()
-endif()
-
-if(WIN32)
- set(DEFAULT_PLUGIN_PATH "." CACHE STRING "Default plugin installation and loading path.")
- set(DOCUMENTATION_INSTALL_PATH "doc" CACHE PATH "Path where the documentation is installed.")
-else()
- set(DEFAULT_PLUGIN_PATH "${CMAKE_INSTALL_PREFIX}/share/audaspace/plugins" CACHE STRING "Default plugin installation and loading path.")
- set(DOCUMENTATION_INSTALL_PATH "share/doc/audaspace" CACHE PATH "Path where the documentation is installed.")
-endif()
-
-if(AUDASPACE_STANDALONE)
- cmake_dependent_option(SEPARATE_C "Build C Binding as separate library" TRUE "WITH_C" FALSE)
- cmake_dependent_option(PLUGIN_FFMPEG "Build FFMPEG Plugin" TRUE "WITH_FFMPEG;SHARED_LIBRARY" FALSE)
- cmake_dependent_option(PLUGIN_JACK "Build JACK Plugin" TRUE "WITH_JACK;SHARED_LIBRARY" FALSE)
- cmake_dependent_option(PLUGIN_LIBSNDFILE "Build LibSndFile Plugin" TRUE "WITH_LIBSNDFILE;SHARED_LIBRARY" FALSE)
- cmake_dependent_option(PLUGIN_OPENAL "Build OpenAL Plugin" TRUE "WITH_OPENAL;SHARED_LIBRARY" FALSE)
- cmake_dependent_option(PLUGIN_SDL "Build SDL Plugin" TRUE "WITH_SDL;SHARED_LIBRARY" FALSE)
- cmake_dependent_option(WITH_PYTHON_MODULE "Build Python Module" TRUE "WITH_PYTHON" FALSE)
- 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)
-endif()
-
-# compiler options
-
-if(AUDASPACE_STANDALONE)
- if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
- add_definitions(-std=c++11)
- list(APPEND CMAKE_C_COMPILER_FLAGS "-fvisibility=hidden")
- list(APPEND CMAKE_CXX_COMPILER_FLAGS "-fvisibility=hidden")
- endif()
-
- if(MSVC)
- list(APPEND CMAKE_C_FLAGS_DEBUG "/Zi /Od")
- list(APPEND CMAKE_CXX_FLAGS_DEBUG "/Zi /Od")
- list(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG "/DEBUG")
- list(APPEND CMAKE_STATIC_LINKER_FLAGS_DEBUG "/DEBUG")
- list(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG")
-
- if(SHARED_LIBRARY)
- include(GenerateExportHeader)
- endif()
- endif()
-
- if(APPLE AND NOT CMAKE_OSX_DEPLOYMENT_TARGET)
- set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "" FORCE)
- endif()
-endif()
-
-if(MSVC)
- add_definitions(
- /D_USE_MATH_DEFINES
- /EHsc
- /DNOMINMAX
- /D_STDINT_H
- )
-endif()
-
-# platform specific options
-
-if(MSYS OR MINGW)
- add_definitions(-D_USE_MATH_DEFINES)
-endif()
-
-# C
-if(WITH_C)
- set(C_SRC
- bindings/C/AUD_ThreadPool.cpp
- bindings/C/AUD_Source.cpp
- bindings/C/AUD_Device.cpp
- bindings/C/AUD_DynamicMusic.cpp
- bindings/C/AUD_Handle.cpp
- bindings/C/AUD_PlaybackManager.cpp
- bindings/C/AUD_Sequence.cpp
- bindings/C/AUD_Sound.cpp
- bindings/C/AUD_Special.cpp
- )
- set(C_HDR
- bindings/C/AUD_ThreadPool.h
- bindings/C/AUD_Source.h
- bindings/C/AUD_Device.h
- bindings/C/AUD_DynamicMusic.h
- bindings/C/AUD_Handle.h
- bindings/C/AUD_PlaybackManager.h
- bindings/C/AUD_Sequence.h
- bindings/C/AUD_Sound.h
- bindings/C/AUD_Special.h
- 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})
- else()
- set(AUDASPACE_C_LIBRARY -laudaspace-c)
- endif()
-endif()
-
-# FFMPEG
-if(WITH_FFMPEG)
- if(AUDASPACE_STANDALONE)
- find_package(FFMPEG ${PACKAGE_OPTION})
- endif()
-
- if(FFMPEG_FOUND)
- set(FFMPEG_SRC
- plugins/ffmpeg/FFMPEG.cpp
- plugins/ffmpeg/FFMPEGReader.cpp
- plugins/ffmpeg/FFMPEGWriter.cpp
- )
- set(FFMPEG_HDR
- plugins/ffmpeg/FFMPEG.h
- plugins/ffmpeg/FFMPEGReader.h
- plugins/ffmpeg/FFMPEGWriter.h
- )
-
- if(NOT PLUGIN_FFMPEG)
- list(APPEND INCLUDE ${FFMPEG_INCLUDE_DIRS})
- list(APPEND LIBRARIES ${FFMPEG_LIBRARIES})
- list(APPEND SRC ${FFMPEG_SRC})
- list(APPEND HDR ${FFMPEG_HDR})
- list(APPEND STATIC_PLUGINS FFMPEG)
- endif()
-
- if(WIN32 AND AUDASPACE_STANDALONE)
- file(GLOB FFMPEG_DLLS ${LIBRARY_PATH}/ffmpeg/bin/*.dll)
- list(APPEND DLLS ${FFMPEG_DLLS})
- endif()
- else()
- set(WITH_FFMPEG FALSE CACHE BOOL "Build With FFMPEG" FORCE)
- message(WARNING "FFMPEG not found, plugin will not be built.")
- endif()
-endif()
-
-# FFTW
-if(WITH_FFTW)
- if(AUDASPACE_STANDALONE)
- find_package(FFTW ${PACKAGE_OPTION})
- endif()
-
- 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
- )
-
- 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 AND AUDASPACE_STANDALONE)
- 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
-if(WITH_JACK)
- if(AUDASPACE_STANDALONE)
- find_package(Jack ${PACKAGE_OPTION})
- endif()
-
- if(JACK_FOUND)
- set(JACK_SRC
- plugins/jack/JackDevice.cpp
- plugins/jack/JackSynchronizer.cpp
- plugins/jack/JackLibrary.cpp
- )
- set(JACK_HDR
- plugins/jack/JackDevice.h
- plugins/jack/JackSynchronizer.h
- plugins/jack/JackLibrary.h
- plugins/jack/JackSymbols.h
- )
-
- if(DYNLOAD_JACK)
- add_definitions(-DDYNLOAD_JACK)
- endif()
-
- if(NOT PLUGIN_JACK)
- list(APPEND INCLUDE ${JACK_INCLUDE_DIRS})
- if(NOT DYNLOAD_JACK)
- list(APPEND LIBRARIES ${JACK_LIBRARIES})
- endif()
- list(APPEND SRC ${JACK_SRC})
- list(APPEND HDR ${JACK_HDR})
- list(APPEND STATIC_PLUGINS JackDevice)
- endif()
-
- if(WIN32 AND AUDASPACE_STANDALONE)
- file(GLOB JACK_DLLS ${LIBRARY_PATH}/jack/bin/*.dll)
- list(APPEND DLLS ${JACK_DLLS})
- endif()
- else()
- set(WITH_JACK FALSE CACHE BOOL "Build With JACK" FORCE)
- message(WARNING "JACK not found, plugin will not be built.")
- endif()
-endif()
-
-# LibSndFile
-if(WITH_LIBSNDFILE)
- if(AUDASPACE_STANDALONE)
- find_package(LibSndFile ${PACKAGE_OPTION})
- endif()
-
- if(LIBSNDFILE_FOUND)
- set(LIBSNDFILE_SRC
- plugins/libsndfile/SndFile.cpp
- plugins/libsndfile/SndFileReader.cpp
- plugins/libsndfile/SndFileWriter.cpp
- )
- set(LIBSNDFILE_HDR
- plugins/libsndfile/SndFile.h
- plugins/libsndfile/SndFileReader.h
- plugins/libsndfile/SndFileWriter.h
- )
-
- if(NOT PLUGIN_LIBSNDFILE)
- list(APPEND INCLUDE ${LIBSNDFILE_INCLUDE_DIRS})
- list(APPEND LIBRARIES ${LIBSNDFILE_LIBRARIES})
- list(APPEND SRC ${LIBSNDFILE_SRC})
- list(APPEND HDR ${LIBSNDFILE_HDR})
- list(APPEND STATIC_PLUGINS SndFile)
- endif()
-
- if(WIN32 AND AUDASPACE_STANDALONE)
- file(GLOB LIBSNDFILE_DLLS ${LIBRARY_PATH}/libsndfile/bin/*.dll)
- list(APPEND DLLS ${LIBSNDFILE_DLLS})
- endif()
- else()
- set(WITH_LIBSNDFILE FALSE CACHE BOOL "Build With LibSndFile" FORCE)
- message(WARNING "LibSndFile not found, plugin will not be built.")
- endif()
-endif()
-
-# OpenAL
-if(WITH_OPENAL)
- if(AUDASPACE_STANDALONE)
- find_package(OpenAL ${PACKAGE_OPTION})
- endif()
-
- if(OPENAL_FOUND)
- set(OPENAL_SRC
- plugins/openal/OpenALDevice.cpp
- plugins/openal/OpenALReader.cpp
- )
- set(OPENAL_HDR
- plugins/openal/OpenALDevice.h
- plugins/openal/OpenALReader.h
- )
-
- if(NOT PLUGIN_OPENAL)
- list(APPEND INCLUDE ${OPENAL_INCLUDE_DIR})
- list(APPEND LIBRARIES ${OPENAL_LIBRARY})
- list(APPEND SRC ${OPENAL_SRC})
- list(APPEND HDR ${OPENAL_HDR})
- list(APPEND STATIC_PLUGINS OpenALDevice)
- endif()
-
- if(WIN32 AND AUDASPACE_STANDALONE)
- file(GLOB OPENAL_DLLS ${LIBRARY_PATH}/OpenAL/bin/*.dll)
- list(APPEND DLLS ${OPENAL_DLLS})
- endif()
- else()
- set(WITH_OPENAL FALSE CACHE BOOL "Build With OpenAL" FORCE)
- message(WARNING "OpenAL not found, plugin will not be built.")
- endif()
-endif()
-
-# Python
-if(WITH_PYTHON)
- if(AUDASPACE_STANDALONE)
- find_package(PythonLibs 3.2 ${PACKAGE_OPTION})
- find_package(NumPy ${PACKAGE_OPTION})
- endif()
-
- if(PYTHONLIBS_FOUND AND NUMPY_FOUND)
- list(APPEND INCLUDE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIRS})
-
- if(WITH_PYTHON_MODULE)
- find_package(PythonInterp 3.2 ${PACKAGE_OPTION})
-
- if(NOT PYTHONINTERP_FOUND)
- set(WITH_PYTHON_MODULE FALSE)
- message(WARNING "Python interpreter not found, module will not be built.")
- endif()
- endif()
-
- set(AUDASPACE_PY_LIBRARY -laudaspace-py)
-
- if(WIN32 AND AUDASPACE_STANDALONE)
- file(GLOB PYTHON_DLLS ${LIBRARY_PATH}/Python/bin/*.dll)
- list(APPEND DLLS ${PYTHON_DLLS})
- endif()
- else()
- set(WITH_PYTHON FALSE CACHE BOOL "Build With Python Library" FORCE)
- message(WARNING "Python libraries not found, language binding will not be built.")
- endif()
-endif()
-
-# SDL
-if(WITH_SDL)
- if(AUDASPACE_STANDALONE)
- if(USE_SDL2)
- find_package(SDL2)
- if(SDL2_FOUND)
- set(SDL_INCLUDE_DIR ${SDL2_INCLUDE_DIR})
- set(SDL_LIBRARY ${SDL2_LIBRARY})
- set(SDL_FOUND TRUE)
- else()
- find_package(SDL ${PACKAGE_OPTION})
- endif()
- else()
- find_package(SDL ${PACKAGE_OPTION})
- endif()
- endif()
-
- if(SDL_FOUND)
- set(SDL_SRC
- plugins/sdl/SDLDevice.cpp
- )
- set(SDL_HDR
- plugins/sdl/SDLDevice.h
- )
-
- if(NOT PLUGIN_SDL)
- list(APPEND INCLUDE ${SDL_INCLUDE_DIR})
- list(APPEND LIBRARIES ${SDL_LIBRARY})
- list(APPEND SRC ${SDL_SRC})
- list(APPEND HDR ${SDL_HDR})
- list(APPEND STATIC_PLUGINS SDLDevice)
- endif()
-
- if(WIN32 AND AUDASPACE_STANDALONE)
- file(GLOB SDL_DLLS ${LIBRARY_PATH}/sdl/bin/*.dll)
- list(APPEND DLLS ${SDL_DLLS})
- endif()
- else()
- set(WITH_SDL FALSE CACHE BOOL "Build With SDL" FORCE)
- message(WARNING "SDL not found, plugin will not be built.")
- endif()
-endif()
-
-# library configuration
-
-if(SHARED_LIBRARY)
- set(AUD_LIBRARY_TYPE AUD_SHARED_LIBRARY)
- set(LIBRARY_TYPE SHARED)
- add_definitions(-DAUD_BUILD_SHARED_LIBRARY)
-else()
- set(AUD_LIBRARY_TYPE AUD_STATIC_LIBRARY)
- set(LIBRARY_TYPE STATIC)
-endif()
-
-# file configuration
-
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config/Audaspace.h.in ${CMAKE_CURRENT_BINARY_DIR}/Audaspace.h ESCAPE_QUOTES @ONLY)
-
-list(APPEND HDR ${CMAKE_CURRENT_BINARY_DIR}/Audaspace.h)
-
-set(STATIC_PLUGIN_CLASSES "")
-set(STATIC_PLUGIN_REGISTERS "")
-
-foreach(PLUGIN ${STATIC_PLUGINS})
- list(APPEND STATIC_PLUGIN_CLASSES "STATIC_PLUGIN_CLASS(" ${PLUGIN} ")\n")
- list(APPEND STATIC_PLUGIN_REGISTERS "\tSTATIC_PLUGIN_REGISTER(" ${PLUGIN} ")\n")
-endforeach()
-
-string(CONCAT STATIC_PLUGIN_CLASSES ${STATIC_PLUGIN_CLASSES})
-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)
- 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)
- 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)
-if(WITH_FFTW)
- list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp)
-endif()
-
-# directories
-
-include_directories(${INCLUDE})
-link_directories()
-
-# install configuration
-
-if(WIN32)
- set(BIN_DESTINATION ".")
-else()
- set(BIN_DESTINATION "bin")
-endif()
-
-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})
-
-if(AUDASPACE_STANDALONE)
- install(TARGETS audaspace
- RUNTIME DESTINATION ${BIN_DESTINATION}
- LIBRARY DESTINATION ${LIB_DESTINATION}
- ARCHIVE DESTINATION ${LIB_DESTINATION}
- )
-
- install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION include/audaspace)
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Audaspace.h DESTINATION include/audaspace)
-
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/packages/pkgconfig/audaspace.pc.in ${CMAKE_CURRENT_BINARY_DIR}/audaspace.pc @ONLY)
-
- if(NOT WIN32 AND NOT APPLE)
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/audaspace.pc DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
- endif()
-endif()
-
-# plugins
-
-if(WITH_FFMPEG AND PLUGIN_FFMPEG)
- add_definitions(-DFFMPEG_PLUGIN)
- 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})
- install(TARGETS audffmpeg DESTINATION ${DEFAULT_PLUGIN_PATH})
-endif()
-
-if(WITH_JACK AND PLUGIN_JACK)
- add_definitions(-DJACK_PLUGIN)
- include_directories(${INCLUDE} ${JACK_INCLUDE_DIRS})
- add_library(audjack SHARED ${JACK_SRC} ${JACK_HDR} ${HDR})
- if(DYNLOAD_JACK)
- target_link_libraries(audjack audaspace)
- else()
- target_link_libraries(audjack audaspace ${JACK_LIBRARIES})
- endif()
- set_target_properties(audjack PROPERTIES SOVERSION ${AUDASPACE_VERSION})
- install(TARGETS audjack DESTINATION ${DEFAULT_PLUGIN_PATH})
-endif()
-
-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})
- target_link_libraries(audlibsndfile audaspace ${LIBSNDFILE_LIBRARIES})
- install(TARGETS audlibsndfile DESTINATION ${DEFAULT_PLUGIN_PATH})
-endif()
-
-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})
- target_link_libraries(audopenal audaspace ${OPENAL_LIBRARY})
- install(TARGETS audopenal DESTINATION ${DEFAULT_PLUGIN_PATH})
-endif()
-
-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})
- target_link_libraries(audsdl audaspace ${SDL_LIBRARY})
- install(TARGETS audsdl DESTINATION ${DEFAULT_PLUGIN_PATH})
-endif()
-
-# dlls
-
-if(WIN32)
- if(DLLS)
- install(FILES ${DLLS} DESTINATION ${BIN_DESTINATION})
- endif()
-endif()
-
-# demos
-
-if(BUILD_DEMOS)
- include_directories(${INCLUDE})
-
- set(DEMOS audaplay audaconvert audaremap signalgen randsounds dynamicmusic playbackmanager)
-
- add_executable(audaplay demos/audaplay.cpp)
- target_link_libraries(audaplay audaspace)
-
- add_executable(audaconvert demos/audaconvert.cpp)
- target_link_libraries(audaconvert audaspace)
-
- add_executable(audaremap demos/audaremap.cpp)
- target_link_libraries(audaremap audaspace)
-
- add_executable(signalgen demos/signalgen.cpp)
- target_link_libraries(signalgen audaspace)
-
- add_executable(randsounds demos/randsounds.cpp)
- target_link_libraries(randsounds audaspace)
-
- add_executable(dynamicmusic demos/dynamicmusic.cpp)
- target_link_libraries(dynamicmusic audaspace)
-
- add_executable(playbackmanager demos/playbackmanager.cpp)
- target_link_libraries(playbackmanager 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)
- endif()
-
- if(WITH_OPENAL)
- list(APPEND DEMOS openaldevices)
-
- add_executable(openaldevices demos/openaldevices.cpp)
- if(PLUGIN_OPENAL)
- target_link_libraries(openaldevices audaspace audopenal)
- else()
- target_link_libraries(openaldevices audaspace)
- endif()
- endif()
-
- install(TARGETS ${DEMOS}
- RUNTIME DESTINATION ${BIN_DESTINATION}
- LIBRARY DESTINATION ${LIB_DESTINATION}
- ARCHIVE DESTINATION ${LIB_DESTINATION}
- )
-endif()
-
-# bindings
-
-if(WITH_C)
- if(SEPARATE_C)
- add_library(audaspace-c ${LIBRARY_TYPE} ${C_SRC} ${C_HDR})
- target_link_libraries(audaspace-c audaspace)
- set_target_properties(audaspace-c PROPERTIES SOVERSION ${AUDASPACE_VERSION})
- install(TARGETS audaspace-c
- RUNTIME DESTINATION ${BIN_DESTINATION}
- LIBRARY DESTINATION ${LIB_DESTINATION}
- ARCHIVE DESTINATION ${LIB_DESTINATION}
- )
- endif()
-
- if(AUDASPACE_STANDALONE)
- install(FILES ${C_HDR} DESTINATION include/audaspace)
- endif()
-endif()
-
-if(WITH_PYTHON)
- set(PYTHON_SRC
- bindings/python/PyAPI.cpp
- bindings/python/PyDevice.cpp
- bindings/python/PyDynamicMusic.cpp
- bindings/python/PyHandle.cpp
- bindings/python/PyPlaybackManager.cpp
- bindings/python/PySequence.cpp
- bindings/python/PySequenceEntry.cpp
- bindings/python/PySound.cpp
- bindings/python/PySource.cpp
- bindings/python/PyThreadPool.cpp
- )
- set(PYTHON_HDR
- bindings/python/PyAPI.h
- bindings/python/PyDevice.h
- bindings/python/PyDynamicMusic.h
- bindings/python/PyHandle.h
- bindings/python/PyPlaybackManager.h
- bindings/python/PySequence.h
- bindings/python/PySequenceEntry.h
- bindings/python/PySound.h
- bindings/python/PySource.h
- 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})
-
- if(AUDASPACE_STANDALONE)
- install(TARGETS audaspace-py
- RUNTIME DESTINATION ${BIN_DESTINATION}
- LIBRARY DESTINATION ${LIB_DESTINATION}
- ARCHIVE DESTINATION ${LIB_DESTINATION}
- )
-
- install(FILES ${PYTHON_HDR} DESTINATION include/audaspace/python)
- endif()
-
- if(WITH_PYTHON_MODULE)
- set(PYTHON_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python)
- configure_file(${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${CMAKE_CURRENT_BINARY_DIR}/setup.py ESCAPE_QUOTES @ONLY)
-
- if(APPLE)
- add_custom_command(OUTPUT build COMMAND MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
- elseif(WIN32)
- set(ENV{VS100COMNTOOLS} $ENV{VS120COMNTOOLS})
- add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
- else()
- add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
- endif()
- add_custom_target(pythonmodule ALL DEPENDS build SOURCES ${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${PYTHON_SRC} ${PYTHON_HDR})
- add_dependencies(pythonmodule audaspace)
-
- install(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} setup.py install --root=\$ENV{DESTDIR} --prefix=${CMAKE_INSTALL_PREFIX})")
- endif()
-endif()
-
-# docs
-
-if(WITH_DOCS)
- find_package(Doxygen ${PACKAGE_OPTION})
-
- if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
-
- add_custom_target(audaspace_doc ALL ${DOXYGEN_EXECUTABLE} Doxyfile COMMENT "Building C++ HTML documentation with Doxygen.")
- else()
- set(WITH_DOCS FALSE CACHE BOOL "Build C++ HTML Documentation with Doxygen" FORCE)
- message(WARNING "Doxygen (and/or dot) not found, documentation will not be built.")
- endif()
-endif()
-
-if(WITH_BINDING_DOCS)
- find_package(Sphinx ${PACKAGE_OPTION})
-
- if(SPHINX_FOUND)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/bindings/doc/conf.py.in ${CMAKE_CURRENT_BINARY_DIR}/conf.py @ONLY)
-
- add_custom_target(bindings_doc ALL COMMAND ${PYTHON_EXECUTABLE} setup.py --build-docs ${SPHINX_EXECUTABLE} -q -b html -c "${CMAKE_CURRENT_BINARY_DIR}" -d "${CMAKE_CURRENT_BINARY_DIR}/_doctrees" "${CMAKE_CURRENT_SOURCE_DIR}/bindings/doc" "${CMAKE_CURRENT_BINARY_DIR}/doc/bindings" DEPENDS pythonmodule COMMENT "Building C/Python HTML documentation with Sphinx.")
- else()
- set(WITH_BINDING_DOCS FALSE CACHE BOOL "Build C/Python HTML Documentation with Sphinx" FORCE)
- message(WARNING "Sphinx not found, binding documentation will not be built.")
- endif()
-endif()
-
-if(WITH_DOCS OR WITH_BINDING_DOCS)
- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/ DESTINATION ${DOCUMENTATION_INSTALL_PATH})
-endif()
diff --git a/extern/audaspace/INSTALL b/extern/audaspace/INSTALL
deleted file mode 100644
index c63206fb949..00000000000
--- a/extern/audaspace/INSTALL
+++ /dev/null
@@ -1,107 +0,0 @@
-Audaspace Installation Guide
-============================
-
-This document guides through the building and installation of audaspace.
-
-The build system used to build audaspace is CMake and it allows very building the library for very different application scenarios from a very general shared library build with plugins that is suitable for system wide installations to building everything into a single static library to be linked into a standalone program.
-
-Build Dependencies
-------------------
-
-Audaspace is written in C++ 11 so a fairly recent compiler (g++ 4.8.2, clang 3.3, MSVC 2013) is needed to build it. The build system used is CMake and you need at least version 3.0. The following build dependencies are all optional, but without any it's neither possible to open sound files nor play back through the speakers. For windows a library folder called build-dependencies can be downloaded from https://github.com/audaspace/audaspace/releases.
-
-- OpenAL (input/output device)
-- SDL (output device)
-- Jack (output device)
-- libsndfile (file access)
-- ffmpeg (file access)
-- Python (language binding)
-
-Getting the Code
-----------------
-
-The audaspace source code or binary releases can be downloaded from https://github.com/audaspace/audaspace/releases.
-
-For the most recent version you can use git to get the source code.
-
- git clone https://github.com/audaspace/audaspace.git
-
-Plugins
--------
-
-Before diving into the exact build steps for each platform, we will have a look at plugins. There are so far two types of plugins: input and output plugins. Input plugins are for reading audio files in many different formats and output plugins are for output devices on different platforms. During the configuration audaspace's standard plugins can be enabled with their repsective `WITH_*` and `PLUGIN_*` configuration option. Plugins are built as shared libraries. By default audaspace looks in the `DEFAULT_PLUGIN_PATH` for shared libraries it can load. Building with a dependency (`WITH_*`) but without enabling the respective `PLUGIN_*` option will compile the plugin directly into the library, so the plugin always gets loaded when the plugins are initialised.
-
-Building for Linux
-------------------
-
-### Configuration ###
-
-It is highly recommended to build audaspace outside of the actual source code in a specific build directory.
-
- mkdir build
- cd build
-
-Configuration is then either done interactively by using ccmake
-
- ccmake ../audaspace
-
-__or__ it can be done by defining variables directly during the run of cmake.
-
- cmake ../build \
- -DCMAKE_INSTALL_PREFIX:PATH=/usr \
- -DCMAKE_BUILD_TYPE:STRING=Release \
- -DBUILD_DEMOS:BOOL=TRUE \
- -DSHARED_LIBRARY:BOOL=TRUE \
- -DWITH_C:BOOL=TRUE \
- -DWITH_FFMPEG:BOOL=TRUE \
- -DWITH_JACK:BOOL=TRUE \
- -DWITH_LIBSNDFILE:BOOL=TRUE \
- -DWITH_OPENAL:BOOL=TRUE \
- -DWITH_PYTHON:BOOL=TRUE \
- -DWITH_SDL:BOOL=TRUE \
- -DDEFAULT_PLUGIN_PATH:PATH=/usr/share/audaspace/plugins
-
-This specific configuration is recommended for a system wide installation of audaspace where all build dependencies are required.
-
-### Building ###
-
-After configuration the building is as easy as running
-
- make
-
-### Installation ###
-
-Installation is then also simple using
-
- make install
-
-### Using the library ###
-
-When audaspace is installed to the system, the required configuration for _pkgconfig_ is also installed and pkgconfig can then be used to compile projects with audaspace.
-
-It is also possible to build audaspace as a static library and use it directly in a project. For this the library has to be configured accordingly with ccmake and after building the resulting library file can be added to the project's build system.
-
-Building for Windows
---------------------
-
-### Configuration ###
-
-Using cmake-gui select Visual Studio 2013 or 2015 for the architecture you want to build for and choose audaspace's source directory and a build directory. It is highly recommended to build audaspace outside of the source directory. During the first configuration cmake tries to find the dependencies. Dependencies that are not installed on the system are automatically disabled. To prevent this, enable `WITH_STRICT_DEPENDENCIES`. To use the build dependencies folder from the website, set the `LIBRARY_PATH` to point to the extracted directory. Also don't forget to set the `CMAKE_INSTALL_PREFIX` to a path where your user account can install to. Finally enable the dependencies that you want to use (`WITH_*`), configure and generate.
-
-### Building ###
-
-Open the project in Visual Studio and set the configuration to Release. Then you can simply hit the build button.
-
-### Installation ###
-
-To install audaspace to your target folder, build the INSTALL target.
-Note that if you don't use the libraries folder provided on the website, the INSTALL target might fail and you need to copy the files manually, including the dlls of the dependencies.
-
-### Using the library ###
-
-To use audaspace in your project, configure the include path and the libraries that you need, which you can find in the include and lib directories in your installation path.
-
-### Notes for plugins on windows ###
-
-- FFMPEG: Due to a problem with FFMPEG's 32 bit libraries, it is necessary to disable SAFESEH for the audffmpeg build target inside Visual Studio (Properties, Linker, Advanced). This has to be done after each generate step of CMake.
-- Jack: If no jack server is running on windows and your application or one of the demos tries to use the jack plugin, this adds a long delay to the device initialisation. In case you don't need jack, make sure to disable the plugin or for the prebuilt version of audaspace simply delete audjack.dll (and any files with jack in the name to clean up).
diff --git a/extern/audaspace/LICENSE b/extern/audaspace/LICENSE
deleted file mode 100644
index d6456956733..00000000000
--- a/extern/audaspace/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- 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.
diff --git a/extern/audaspace/README.md b/extern/audaspace/README.md
deleted file mode 100644
index 7fdd515ab67..00000000000
--- a/extern/audaspace/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-audaspace
-=========
-
-Audaspace (pronounced "outer space") is a high level audio library written in C++ with language bindings for Python for example. It started out as the audio engine of the 3D modelling application Blender and is now released as a standalone library.
-
-Documentation and Community
----------------------------
-
-The documentation including guides for building and installing, demos, tutorials as well as the API reference for C++, C and python can be found on https://audaspace.github.io.
-
-Bug reports and feature requests should go to the [issue tracker](https://github.com/audaspace/audaspace/issues).
-
-For any other discussions about audaspace there is a [mailing list](https://groups.google.com/forum/#!forum/audaspace) and there is also the IRC channel #audaspace on irc.freenode.net.
-
-Features
---------
-
-The following (probably incomplete) features are supported by audaspace:
-
-* input/output devices
- * input from microphones, line in, etc.
- * output devices including 3D audio support
-* file reading/writing
-* filters like low-/highpass and effects like delay, reverse or fading
-* generators for simple waveforms like silence, sine and triangle
-* respecification - this term is used for changing stream parameters which are
- * channel count - channel remapping
- * sample format - the library internally uses 32 bit floats
- * sample rate - resampling
-* simple (superposition, joining and ping-pong aka forward-reverse) and more complex (non-linear audio editing) sequencing of sounds
-
-License
--------
-
-> Copyright © 2009-2015 Jörg Müller. All rights reserved.
->
-> 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.
diff --git a/extern/audaspace/bindings/C/AUD_Device.cpp b/extern/audaspace/bindings/C/AUD_Device.cpp
deleted file mode 100644
index 441f228deac..00000000000
--- a/extern/audaspace/bindings/C/AUD_Device.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/*******************************************************************************
- * 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 "devices/DeviceManager.h"
-#include "devices/I3DDevice.h"
-#include "devices/IDeviceFactory.h"
-#include "devices/ReadDevice.h"
-#include "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_Device.h"
-
-static inline aud::Specs convCToSpec(AUD_Specs specs)
-{
- aud::Specs s;
- s.channels = static_cast<Channels>(specs.channels);
- s.rate = static_cast<SampleRate>(specs.rate);
- return s;
-}
-
-static inline aud::DeviceSpecs convCToDSpec(AUD_DeviceSpecs specs)
-{
- aud::DeviceSpecs s;
- s.specs = convCToSpec(specs.specs);
- s.format = static_cast<SampleFormat>(specs.format);
- return s;
-}
-
-AUD_API AUD_Device* AUD_Device_open(const char* type, AUD_DeviceSpecs specs, int buffersize, const char* name)
-{
- DeviceSpecs dspecs = convCToDSpec(specs);
-
- if(dspecs.channels == CHANNELS_INVALID)
- dspecs.channels = CHANNELS_STEREO;
- if(dspecs.format == FORMAT_INVALID)
- dspecs.format = FORMAT_FLOAT32;
- if(dspecs.rate == RATE_INVALID)
- dspecs.rate = RATE_48000;
- if(buffersize < 128)
- buffersize = AUD_DEFAULT_BUFFER_SIZE;
- if(name == nullptr)
- name = "";
-
- try
- {
- if(!type)
- {
- auto device = DeviceManager::getDevice();
- if(!device)
- {
- DeviceManager::openDefaultDevice();
- device = DeviceManager::getDevice();
- }
- return new AUD_Device(device);
- }
-
- if(type == std::string("read"))
- {
- return new AUD_Device(new ReadDevice(dspecs));
- }
-
- std::shared_ptr<IDeviceFactory> factory;
- if(!*type)
- factory = DeviceManager::getDefaultDeviceFactory();
- else
- factory = DeviceManager::getDeviceFactory(type);
-
- if(factory)
- {
- factory->setName(name);
- factory->setSpecs(dspecs);
- factory->setBufferSize(buffersize);
- return new AUD_Device(factory->openDevice());
- }
- }
- catch(Exception&)
- {
- }
- return nullptr;
-}
-
-AUD_API void AUD_Device_lock(AUD_Device* device)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- dev->lock();
-}
-
-AUD_API AUD_Handle* AUD_Device_play(AUD_Device* device, AUD_Sound* sound, int keep)
-{
- assert(sound);
- auto dev = device ? *device : DeviceManager::getDevice();
-
- try
- {
- AUD_Handle handle = dev->play(*sound, keep);
- if(handle.get())
- {
- return new AUD_Handle(handle);
- }
- }
- catch(Exception&)
- {
- }
- return nullptr;
-}
-
-AUD_API void AUD_Device_stopAll(AUD_Device* device)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- dev->stopAll();
-}
-
-AUD_API void AUD_Device_unlock(AUD_Device* device)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- dev->unlock();
-}
-
-AUD_API AUD_Channels AUD_Device_getChannels(AUD_Device* device)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- return static_cast<AUD_Channels>(dev->getSpecs().channels);
-}
-
-AUD_API AUD_DistanceModel AUD_Device_getDistanceModel(AUD_Device* device)
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- return static_cast<AUD_DistanceModel>(dev->getDistanceModel());
-}
-
-AUD_API void AUD_Device_setDistanceModel(AUD_Device* device, AUD_DistanceModel value)
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- dev->setDistanceModel(static_cast<DistanceModel>(value));
-}
-
-AUD_API float AUD_Device_getDopplerFactor(AUD_Device* device)
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- return dev->getDopplerFactor();
-}
-
-AUD_API void AUD_Device_setDopplerFactor(AUD_Device* device, float value)
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- dev->setDopplerFactor(value);
-}
-
-AUD_API AUD_SampleFormat AUD_Device_getFormat(AUD_Device* device)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- return static_cast<AUD_SampleFormat>(dev->getSpecs().format);
-}
-
-AUD_API void AUD_Device_getListenerLocation(AUD_Device* device, float value[3])
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- Vector3 v = dev->getListenerLocation();
- value[0] = v.x();
- value[1] = v.y();
- value[2] = v.z();
-}
-
-AUD_API void AUD_Device_setListenerLocation(AUD_Device* device, const float value[3])
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- Vector3 v(value[0], value[1], value[2]);
- dev->setListenerLocation(v);
-}
-
-AUD_API void AUD_Device_getListenerOrientation(AUD_Device* device, float value[4])
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- Quaternion v = dev->getListenerOrientation();
- value[0] = v.x();
- value[1] = v.y();
- value[2] = v.z();
- value[3] = v.w();
-}
-
-AUD_API void AUD_Device_setListenerOrientation(AUD_Device* device, const float value[4])
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- Quaternion v(value[3], value[0], value[1], value[2]);
- dev->setListenerOrientation(v);
-}
-
-AUD_API void AUD_Device_getListenerVelocity(AUD_Device* device, float value[3])
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- Vector3 v = dev->getListenerVelocity();
- value[0] = v.x();
- value[1] = v.y();
- value[2] = v.z();
-}
-
-AUD_API void AUD_Device_setListenerVelocity(AUD_Device* device, const float value[3])
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- Vector3 v(value[0], value[1], value[2]);
- dev->setListenerVelocity(v);
-}
-
-AUD_API double AUD_Device_getRate(AUD_Device* device)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- return dev->getSpecs().rate;
-}
-
-AUD_API float AUD_Device_getSpeedOfSound(AUD_Device* device)
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- return dev->getSpeedOfSound();
-}
-
-AUD_API void AUD_Device_setSpeedOfSound(AUD_Device* device, float value)
-{
- auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
- dev->setSpeedOfSound(value);
-}
-
-AUD_API float AUD_Device_getVolume(AUD_Device* device)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- return dev->getVolume();
-}
-
-AUD_API void AUD_Device_setVolume(AUD_Device* device, float value)
-{
- auto dev = device ? *device : DeviceManager::getDevice();
- dev->setVolume(value);
-}
-
-AUD_API int AUD_Device_read(AUD_Device* device, unsigned char* buffer, int length)
-{
- assert(device);
- assert(buffer);
-
- auto readDevice = std::dynamic_pointer_cast<ReadDevice>(*device);
- if(!readDevice)
- return false;
-
- try
- {
- return readDevice->read(buffer, length);
- }
- catch(Exception&)
- {
- return false;
- }
-}
-
-AUD_API void AUD_Device_free(AUD_Device* device)
-{
- assert(device);
-
- try
- {
- delete device;
- }
- catch(Exception&)
- {
- }
-}
-
-AUD_API AUD_Device* AUD_Device_getCurrent()
-{
- auto device = DeviceManager::getDevice();
-
- if(!device)
- return nullptr;
-
- return new AUD_Device(device);
-}
-
-AUD_API void AUD_seekSynchronizer(AUD_Handle* handle, float time)
-{
- auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
- if(synchronizer)
- synchronizer->seek(*reinterpret_cast<std::shared_ptr<IHandle>*>(handle), time);
-}
-
-AUD_API float AUD_getSynchronizerPosition(AUD_Handle* handle)
-{
- auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
- if(synchronizer)
- return synchronizer->getPosition(*reinterpret_cast<std::shared_ptr<IHandle>*>(handle));
- return (*reinterpret_cast<std::shared_ptr<IHandle>*>(handle))->getPosition();
-}
-
-AUD_API void AUD_playSynchronizer()
-{
- auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
- if(synchronizer)
- synchronizer->play();
-}
-
-AUD_API void AUD_stopSynchronizer()
-{
- auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
- if(synchronizer)
- synchronizer->stop();
-}
-
-AUD_API void AUD_setSynchronizerCallback(AUD_syncFunction function, void* data)
-{
- auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
- if(synchronizer)
- synchronizer->setSyncCallback(function, data);
-}
-
-AUD_API int AUD_isSynchronizerPlaying()
-{
- auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
- if(synchronizer)
- return synchronizer->isPlaying();
- return false;
-}
-
diff --git a/extern/audaspace/bindings/C/AUD_Device.h b/extern/audaspace/bindings/C/AUD_Device.h
deleted file mode 100644
index 0dfa21f0660..00000000000
--- a/extern/audaspace/bindings/C/AUD_Device.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// Possible distance models for the 3D device.
-typedef enum
-{
- AUD_DISTANCE_MODEL_INVALID = 0,
- AUD_DISTANCE_MODEL_INVERSE,
- AUD_DISTANCE_MODEL_INVERSE_CLAMPED,
- AUD_DISTANCE_MODEL_LINEAR,
- AUD_DISTANCE_MODEL_LINEAR_CLAMPED,
- AUD_DISTANCE_MODEL_EXPONENT,
- AUD_DISTANCE_MODEL_EXPONENT_CLAMPED
-} AUD_DistanceModel;
-
-typedef void (*AUD_syncFunction)(void*, int, float);
-
-/**
- * Opens a new sound device.
- * \param type The name of the device.
- * Can be NULL to open the default device with default settings or return the handle to the already opened one.
- * Can be "" to open the a default factory device with given settings.
- * Can be "read" to open a readable device.
- * \param specs Specification of the device parameters.
- * \param buffersize Size of the mixing buffer.
- * \param name Custom name of the device.
- * \return A handle to the opened device or NULL on failure.
- */
-extern AUD_API AUD_Device* AUD_Device_open(const char* type, AUD_DeviceSpecs specs, int buffersize, const char* name);
-
-/**
- * Locks the playback device.
- */
-extern AUD_API void AUD_Device_lock(AUD_Device* device);
-
-/**
- * Plays back a sound file.
- * \param sound The handle of the sound file.
- * \param keep When keep is true the sound source will not be deleted but set to
- * paused when its end has been reached.
- * \return A handle to the played back sound.
- */
-extern AUD_API AUD_Handle* AUD_Device_play(AUD_Device* device, AUD_Sound* sound, int keep);
-
-/**
- * Stops all sounds playing.
- */
-extern AUD_API void AUD_Device_stopAll(AUD_Device* device);
-
-/**
- * Unlocks the device.
- */
-extern AUD_API void AUD_Device_unlock(AUD_Device* device);
-
-/**
- * Retrieves the channels of a device.
- * param device The device to get the channels from.
- * return The channels of the device.
- */
-extern AUD_API AUD_Channels AUD_Device_getChannels(AUD_Device* device);
-
-/**
- * Retrieves the distance model of a device.
- * param device The device to get the distance model from.
- * return The distance model of the device.
- */
-extern AUD_API AUD_DistanceModel AUD_Device_getDistanceModel(AUD_Device* device);
-
-/**
- * Sets the distance model of a device.
- * param device The device to set the distance model from.
- * param value The new distance model to set.
- */
-extern AUD_API void AUD_Device_setDistanceModel(AUD_Device* device, AUD_DistanceModel value);
-
-/**
- * Retrieves the doppler factor of a device.
- * param device The device to get the doppler factor from.
- * return The doppler factor of the device.
- */
-extern AUD_API float AUD_Device_getDopplerFactor(AUD_Device* device);
-
-/**
- * Sets the doppler factor of a device.
- * param device The device to set the doppler factor from.
- * param value The new doppler factor to set.
- */
-extern AUD_API void AUD_Device_setDopplerFactor(AUD_Device* device, float value);
-
-/**
- * Retrieves the format of a device.
- * param device The device to get the format from.
- * return The format of the device.
- */
-extern AUD_API AUD_SampleFormat AUD_Device_getFormat(AUD_Device* device);
-
-/**
- * Retrieves the listener location of a device.
- * param device The device to get the listener location from.
- * return The listener location of the device.
- */
-extern AUD_API void AUD_Device_getListenerLocation(AUD_Device* device, float value[3]);
-
-/**
- * Sets the listener location of a device.
- * param device The device to set the listener location from.
- * param value The new listener location to set.
- */
-extern AUD_API void AUD_Device_setListenerLocation(AUD_Device* device, const float value[3]);
-
-/**
- * Retrieves the listener orientation of a device.
- * param device The device to get the listener orientation from.
- * return The listener orientation of the device.
- */
-extern AUD_API void AUD_Device_getListenerOrientation(AUD_Device* device, float value[4]);
-
-/**
- * Sets the listener orientation of a device.
- * param device The device to set the listener orientation from.
- * param value The new listener orientation to set.
- */
-extern AUD_API void AUD_Device_setListenerOrientation(AUD_Device* device, const float value[4]);
-
-/**
- * Retrieves the listener velocity of a device.
- * param device The device to get the listener velocity from.
- * return The listener velocity of the device.
- */
-extern AUD_API void AUD_Device_getListenerVelocity(AUD_Device* device, float value[3]);
-
-/**
- * Sets the listener velocity of a device.
- * param device The device to set the listener velocity from.
- * param value The new listener velocity to set.
- */
-extern AUD_API void AUD_Device_setListenerVelocity(AUD_Device* device, const float value[3]);
-
-/**
- * Retrieves the rate of a device.
- * param device The device to get the rate from.
- * return The rate of the device.
- */
-extern AUD_API double AUD_Device_getRate(AUD_Device* device);
-
-/**
- * Retrieves the speed of sound of a device.
- * param device The device to get the speed of sound from.
- * return The speed of sound of the device.
- */
-extern AUD_API float AUD_Device_getSpeedOfSound(AUD_Device* device);
-
-/**
- * Sets the speed of sound of a device.
- * param device The device to set the speed of sound from.
- * param value The new speed of sound to set.
- */
-extern AUD_API void AUD_Device_setSpeedOfSound(AUD_Device* device, float value);
-
-/**
- * Retrieves the volume of a device.
- * param device The device to get the volume from.
- * return The volume of the device.
- */
-extern AUD_API float AUD_Device_getVolume(AUD_Device* device);
-
-/**
- * Sets the volume of a device.
- * param device The device to set the volume from.
- * param value The new volume to set.
- */
-extern AUD_API void AUD_Device_setVolume(AUD_Device* device, float value);
-
-/**
- * Reads the next samples into the supplied buffer.
- * \param device The readable device.
- * \param buffer The target buffer.
- * \param length The length in samples to be filled.
- * \return True if the reading succeeded, false if there are no sounds
- * played back currently, in that case the buffer is filled with
- * silence.
- */
-extern AUD_API int AUD_Device_read(AUD_Device* device, unsigned char* buffer, int length);
-
-/**
- * Closes a device. Handle becomes invalid afterwards.
- * \param device The device to close.
- */
-extern AUD_API void AUD_Device_free(AUD_Device* device);
-
-/**
- * Retrieves the current device of the DeviceManager.
- * \return A pointer to the current device, which needs to be freed with
- * AUD_Device_free.
- */
-extern AUD_API AUD_Device* AUD_Device_getCurrent();
-
-/**
- * Seeks sequenced sound scene playback.
- * \param handle Playback handle.
- * \param time Time in seconds to seek to.
- */
-extern AUD_API void AUD_seekSynchronizer(AUD_Handle* handle, float time);
-
-/**
- * Returns the current sound scene playback time.
- * \param handle Playback handle.
- * \return The playback time in seconds.
- */
-extern AUD_API float AUD_getSynchronizerPosition(AUD_Handle* handle);
-
-/**
- * Starts the playback of jack transport if possible.
- */
-extern AUD_API void AUD_playSynchronizer();
-
-/**
- * Stops the playback of jack transport if possible.
- */
-extern AUD_API void AUD_stopSynchronizer();
-
-/**
- * Sets the sync callback for jack transport.
- * \param function The callback function.
- * \param data The data parameter for the callback.
- */
-extern AUD_API void AUD_setSynchronizerCallback(AUD_syncFunction function, void* data);
-
-/**
- * Returns whether jack transport is currently playing.
- * \return Whether jack transport is currently playing.
- */
-extern AUD_API int AUD_isSynchronizerPlaying();
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_DynamicMusic.cpp b/extern/audaspace/bindings/C/AUD_DynamicMusic.cpp
deleted file mode 100644
index bb7a129dde3..00000000000
--- a/extern/audaspace/bindings/C/AUD_DynamicMusic.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_DynamicMusic.h"
-
-AUD_API AUD_DynamicMusic* AUD_DynamicMusic_create(AUD_Device* device)
-{
- assert(device);
-
- try
- {
- return new AUD_DynamicMusic(new DynamicMusic(*device));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API void AUD_DynamicMusic_free(AUD_DynamicMusic* player)
-{
- assert(player);
- delete player;
-}
-
-AUD_API int AUD_DynamicMusic_addScene(AUD_DynamicMusic* player, AUD_Sound* scene)
-{
- assert(player);
- assert(scene);
-
- return (*player)->addScene(*scene);
-}
-
-AUD_API int AUD_DynamicMusic_setSecene(AUD_DynamicMusic* player, int scene)
-{
- assert(player);
-
- return (*player)->changeScene(scene);
-}
-
-AUD_API int AUD_DynamicMusic_getScene(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return (*player)->getScene();
-}
-
-AUD_API int AUD_DynamicMusic_addTransition(AUD_DynamicMusic* player, int ini, int end, AUD_Sound* transition)
-{
- assert(player);
- assert(transition);
-
- return (*player)->addTransition(ini, end, *transition);
-}
-
-AUD_API void AUD_DynamicMusic_setFadeTime(AUD_DynamicMusic* player, float seconds)
-{
- assert(player);
-
- (*player)->setFadeTime(seconds);
-}
-
-AUD_API float AUD_DynamicMusic_getFadeTime(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return (*player)->getFadeTime();
-}
-
-AUD_API int AUD_DynamicMusic_resume(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return (*player)->resume();
-}
-
-AUD_API int AUD_DynamicMusic_pause(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return (*player)->pause();
-}
-
-AUD_API int AUD_DynamicMusic_seek(AUD_DynamicMusic* player, float position)
-{
- assert(player);
-
- return (*player)->seek(position);
-}
-
-AUD_API float AUD_DynamicMusic_getPosition(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return (*player)->getPosition();
-}
-
-AUD_API float AUD_DynamicMusic_getVolume(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return (*player)->getVolume();
-}
-
-AUD_API int AUD_DynamicMusic_setVolume(AUD_DynamicMusic* player, float volume)
-{
- assert(player);
-
- return (*player)->setVolume(volume);
-}
-
-AUD_API AUD_Status AUD_DynamicMusic_getStatus(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return static_cast<AUD_Status>((*player)->getStatus());
-}
-
-AUD_API int AUD_DynamicMusic_stop(AUD_DynamicMusic* player)
-{
- assert(player);
-
- return (*player)->stop();
-} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_DynamicMusic.h b/extern/audaspace/bindings/C/AUD_DynamicMusic.h
deleted file mode 100644
index c362479591e..00000000000
--- a/extern/audaspace/bindings/C/AUD_DynamicMusic.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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
-
-#include "AUD_Types.h"
-#include "AUD_Handle.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-* Creates a new dynamic music player.
-* \param device The device that will be used to play sounds.
-* \return The new DynamicMusic object.
-*/
-extern AUD_API AUD_DynamicMusic* AUD_DynamicMusic_create(AUD_Device* device);
-
-/**
-* Deletes a dynamic music player.
-* \param player The DynamicMusic object to be deleted.
-*/
-extern AUD_API void AUD_DynamicMusic_free(AUD_DynamicMusic* player);
-
-/**
-* Adds a sound scene to a dynamic music player.
-* \param player The DynamicMusic object.
-* \param scene The sound to be added as a scene.
-* \return The index of the new scene.
-*/
-extern AUD_API int AUD_DynamicMusic_addScene(AUD_DynamicMusic* player, AUD_Sound* scene);
-
-/**
-* Changes the current sound scene of a dynamic music player.
-* \param player The DynamicMusic object.
-* \param scene The index of the scene to be played.
-* \return 0 if the target scene doesn't exist.
-*/
-extern AUD_API int AUD_DynamicMusic_setSecene(AUD_DynamicMusic* player, int scene);
-
-/**
-* Retrives the index of the current scene.
-* \param player The DynamicMusic object.
-* \return The index of the current scene.
-*/
-extern AUD_API int AUD_DynamicMusic_getScene(AUD_DynamicMusic* player);
-
-/**
-* Adds a new transition between two scenes.
-* \param player The DynamicMusic object.
-* \param ini The origin scene for the transition.
-* \param end The end scene for the transition.
-* \param transition A sound that will be used as transition between two scenes.
-* \return 0 if the ini or end scenes don't exist.
-*/
-extern AUD_API int AUD_DynamicMusic_addTransition(AUD_DynamicMusic* player, int ini, int end, AUD_Sound* transition);
-
-/**
-* Changes the fade time for the default transitions of a dynamic music player.
-* \param player The DynamicMusic object.
-* \param seconds The amount of secods that the crossfade transition will take.
-*/
-extern AUD_API void AUD_DynamicMusic_setFadeTime(AUD_DynamicMusic* player, float seconds);
-
-/**
-* Retrieves the fade time of a dynamic music player.
-* \param player The DynamicMusic object.
-* \return The fade time of the player.
-*/
-extern AUD_API float AUD_DynamicMusic_getFadeTime(AUD_DynamicMusic* player);
-
-/**
-* Resumes the current scene playback of a dynamic music player if it is paused.
-* \param player The DynamicMusic object.
-* \return 0 if the playback wasn't resumed.
-*/
-extern AUD_API int AUD_DynamicMusic_resume(AUD_DynamicMusic* player);
-
-/**
-* Pauses the current scene of a dynamic music player.
-* \param player The DynamicMusic object.
-* \return 0 if the playback wasn't paused.
-*/
-extern AUD_API int AUD_DynamicMusic_pause(AUD_DynamicMusic* player);
-
-/**
-* Seeks the current playing scene of a dynamic music player.
-* \param player The DynamicMusic object.
-* \param position The new position from which to play back, in seconds.
-* \return 0 if the seeking wasn't possible.
-*/
-extern AUD_API int AUD_DynamicMusic_seek(AUD_DynamicMusic* player, float position);
-
-/**
-* Retrieves the position of the current scene of a dynamic music player.
-* \param player The DynamicMusic object.
-* \return The position of the current playing scene.
-*/
-extern AUD_API float AUD_DynamicMusic_getPosition(AUD_DynamicMusic* player);
-
-/**
-* Retrieves the volume of the current scene of a dynamic music player.
-* \param player The DynamicMusic object.
-* \return The volume of the current playing scene.
-*/
-extern AUD_API float AUD_DynamicMusic_getVolume(AUD_DynamicMusic* player);
-
-/**
-* Changes the volume of the current scene in a dynamic music player.
-* \param player The DynamicMusic object.
-* \param 0 if the volume couldn't be changed.
-*/
-extern AUD_API int AUD_DynamicMusic_setVolume(AUD_DynamicMusic* player, float volume);
-
-/**
-* Retrieves the status of the current scene in a dynamic music player.
-* \param player The DynamicMusic object.
-* \return The Status of the current playing scene.
-*/
-extern AUD_API AUD_Status AUD_DynamicMusic_getStatus(AUD_DynamicMusic* player);
-
-/**
-* Stops the current scene of a dynamic music player.
-* \param player The DynamicMusic object.
-* \return 0 if the playback wasn't stopped.
-*/
-extern AUD_API int AUD_DynamicMusic_stop(AUD_DynamicMusic* player);
-
-#ifdef __cplusplus
-}
-#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_HRTF.cpp b/extern/audaspace/bindings/C/AUD_HRTF.cpp
deleted file mode 100644
index 002c5d61ddd..00000000000
--- a/extern/audaspace/bindings/C/AUD_HRTF.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_HRTF.h"
-
-extern AUD_API AUD_HRTF* AUD_HRTF_create()
-{
- try
- {
- return new AUD_HRTF(new HRTF());
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-extern AUD_API void AUD_HRTF_free(AUD_HRTF* hrtfs)
-{
- assert(hrtfs);
- delete hrtfs;
-}
-
-extern AUD_API void AUD_HRTF_addImpulseResponseFromSound(AUD_HRTF* hrtfs, AUD_Sound* sound, float azimuth, float elevation)
-{
- assert(hrtfs);
- assert(sound);
-
- (*hrtfs)->addImpulseResponse(std::make_shared<StreamBuffer>(*sound), azimuth, elevation);
-} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_HRTF.h b/extern/audaspace/bindings/C/AUD_HRTF.h
deleted file mode 100644
index 29dda371695..00000000000
--- a/extern/audaspace/bindings/C/AUD_HRTF.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-* Creates a new HRTF object.
-* \return The new HRTF object.
-*/
-extern AUD_API AUD_HRTF* AUD_HRTF_create();
-
-/**
-* Deletes a HRTF object.
-* \param hrtfs The HRTF object to be deleted.
-*/
-extern AUD_API void AUD_HRTF_free(AUD_HRTF* hrtfs);
-
-/**
-* Adds a new impulse response to an HRTF object.
-* \param hrtfs The HRTF object.
-* \param sound A Sound object representing an HRTF.
-* \param azimuth The azimuth angle of the HRTF.
-* \param elevation The elevation angle of the HRTF.
-*/
-extern AUD_API void AUD_HRTF_addImpulseResponseFromSound(AUD_HRTF* hrtfs, AUD_Sound* sound, float azimuth, float elevation);
-
-#ifdef __cplusplus
-}
-#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_Handle.cpp b/extern/audaspace/bindings/C/AUD_Handle.cpp
deleted file mode 100644
index 265c7bf08d2..00000000000
--- a/extern/audaspace/bindings/C/AUD_Handle.cpp
+++ /dev/null
@@ -1,384 +0,0 @@
-/*******************************************************************************
- * 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 "devices/I3DHandle.h"
-#include "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_Handle.h"
-
-AUD_API int AUD_Handle_pause(AUD_Handle* handle)
-{
- assert(handle);
- return (*handle)->pause();
-}
-
-AUD_API int AUD_Handle_resume(AUD_Handle* handle)
-{
- assert(handle);
- return (*handle)->resume();
-}
-
-AUD_API int AUD_Handle_stop(AUD_Handle* handle)
-{
- assert(handle);
- int result = (*handle)->stop();
- delete handle;
- return result;
-}
-
-AUD_API float AUD_Handle_getAttenuation(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getAttenuation();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setAttenuation(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setAttenuation(value);
- return false;
-}
-
-AUD_API float AUD_Handle_getConeAngleInner(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getConeAngleInner();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setConeAngleInner(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setConeAngleInner(value);
- return false;
-}
-
-AUD_API float AUD_Handle_getConeAngleOuter(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getConeAngleOuter();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setConeAngleOuter(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setConeAngleOuter(value);
- return false;
-}
-
-AUD_API float AUD_Handle_getConeVolumeOuter(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getConeVolumeOuter();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setConeVolumeOuter(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setConeVolumeOuter(value);
- return false;
-}
-
-AUD_API float AUD_Handle_getDistanceMaximum(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getDistanceMaximum();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setDistanceMaximum(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setDistanceMaximum(value);
- return false;
-}
-
-AUD_API float AUD_Handle_getDistanceReference(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getDistanceReference();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setDistanceReference(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setDistanceReference(value);
- return false;
-}
-
-AUD_API int AUD_Handle_doesKeep(AUD_Handle* handle)
-{
- assert(handle);
- return (*handle)->getKeep();
-}
-
-AUD_API int AUD_Handle_setKeep(AUD_Handle* handle, int value)
-{
- assert(handle);
- return (*handle)->setKeep(value);
-}
-
-AUD_API int AUD_Handle_getLocation(AUD_Handle* handle, float value[3])
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- {
- Vector3 v = h->getLocation();
- value[0] = v.x();
- value[1] = v.y();
- value[2] = v.z();
- return true;
- }
- return false;
-}
-
-AUD_API int AUD_Handle_setLocation(AUD_Handle* handle, const float value[3])
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- {
- Vector3 v = Vector3(value[0], value[1], value[2]);
- return h->setLocation(v);
- }
- return false;
-}
-
-AUD_API int AUD_Handle_getLoopCount(AUD_Handle* handle)
-{
- assert(handle);
- return (*handle)->getLoopCount();
-}
-
-AUD_API int AUD_Handle_setLoopCount(AUD_Handle* handle, int value)
-{
- assert(handle);
- return (*handle)->setLoopCount(value);
-}
-
-AUD_API int AUD_Handle_getOrientation(AUD_Handle* handle, float value[4])
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- {
- Quaternion v = h->getOrientation();
- value[0] = v.x();
- value[1] = v.y();
- value[2] = v.z();
- value[3] = v.w();
- return true;
- }
- return false;
-}
-
-AUD_API int AUD_Handle_setOrientation(AUD_Handle* handle, const float value[4])
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- {
- Quaternion v(value[3], value[0], value[1], value[2]);
- return h->setOrientation(v);
- }
- return false;
-}
-
-AUD_API float AUD_Handle_getPitch(AUD_Handle* handle)
-{
- assert(handle);
- return (*handle)->getPitch();
-}
-
-AUD_API int AUD_Handle_setPitch(AUD_Handle* handle, float value)
-{
- assert(handle);
- return (*handle)->setPitch(value);
-}
-
-AUD_API float AUD_Handle_getPosition(AUD_Handle* handle)
-{
- assert(handle);
- return (*handle)->getPosition();
-}
-
-AUD_API int AUD_Handle_setPosition(AUD_Handle* handle, float value)
-{
- assert(handle);
- return (*handle)->seek(value);
-}
-
-AUD_API int AUD_Handle_isRelative(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->isRelative();
- return true;
-}
-
-AUD_API int AUD_Handle_setRelative(AUD_Handle* handle, int value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setRelative(value);
- return false;
-}
-
-AUD_API AUD_Status AUD_Handle_getStatus(AUD_Handle* handle)
-{
- assert(handle);
- return static_cast<AUD_Status>((*handle)->getStatus());
-}
-
-AUD_API int AUD_Handle_getVelocity(AUD_Handle* handle, float value[3])
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- {
- Vector3 v = h->getVelocity();
- value[0] = v.x();
- value[1] = v.y();
- value[2] = v.z();
- return true;
- }
- return false;
-}
-
-AUD_API int AUD_Handle_setVelocity(AUD_Handle* handle, const float value[3])
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- {
- Vector3 v = Vector3(value[0], value[1], value[2]);
- return h->setVelocity(v);
- }
- return false;
-}
-
-AUD_API float AUD_Handle_getVolume(AUD_Handle* handle)
-{
- assert(handle);
- return (*handle)->getVolume();
-}
-
-AUD_API int AUD_Handle_setVolume(AUD_Handle* handle, float value)
-{
- assert(handle);
- return (*handle)->setVolume(value);
-}
-
-AUD_API float AUD_Handle_getVolumeMaximum(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getVolumeMaximum();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setVolumeMaximum(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setVolumeMaximum(value);
- return false;
-}
-
-AUD_API float AUD_Handle_getVolumeMinimum(AUD_Handle* handle)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->getVolumeMinimum();
- return 0.0f;
-}
-
-AUD_API int AUD_Handle_setVolumeMinimum(AUD_Handle* handle, float value)
-{
- assert(handle);
- std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
-
- if(h.get())
- return h->setVolumeMinimum(value);
- return false;
-}
-
-AUD_API void AUD_Handle_free(AUD_Handle* handle)
-{
- delete handle;
-}
diff --git a/extern/audaspace/bindings/C/AUD_Handle.h b/extern/audaspace/bindings/C/AUD_Handle.h
deleted file mode 100644
index 27cbd251de5..00000000000
--- a/extern/audaspace/bindings/C/AUD_Handle.h
+++ /dev/null
@@ -1,308 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// Status of a playback handle.
-typedef enum
-{
- AUD_STATUS_INVALID = 0, /// Invalid handle. Maybe due to stopping.
- AUD_STATUS_PLAYING, /// Sound is playing.
- AUD_STATUS_PAUSED, /// Sound is being paused.
- AUD_STATUS_STOPPED /// Sound is stopped but kept in the device.
-} AUD_Status;
-
-/**
- * Pauses a played back sound.
- * \param handle The handle to the sound.
- * \return Whether the handle has been playing or not.
- */
-extern AUD_API int AUD_Handle_pause(AUD_Handle* handle);
-
-/**
- * Resumes a paused sound.
- * \param handle The handle to the sound.
- * \return Whether the handle has been paused or not.
- */
-extern AUD_API int AUD_Handle_resume(AUD_Handle* handle);
-
-/**
- * Stops a playing or paused sound.
- * \param handle The handle to the sound.
- * \return Whether the handle has been valid or not.
- */
-extern AUD_API int AUD_Handle_stop(AUD_Handle* handle);
-
-/**
- * Retrieves the attenuation of a handle.
- * param handle The handle to get the attenuation from.
- * return The attenuation of the handle.
- */
-extern AUD_API float AUD_Handle_getAttenuation(AUD_Handle* handle);
-
-/**
- * Sets the attenuation of a handle.
- * param handle The handle to set the attenuation from.
- * param value The new attenuation to set.
- */
-extern AUD_API int AUD_Handle_setAttenuation(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the cone angle inner of a handle.
- * param handle The handle to get the cone angle inner from.
- * return The cone angle inner of the handle.
- */
-extern AUD_API float AUD_Handle_getConeAngleInner(AUD_Handle* handle);
-
-/**
- * Sets the cone angle inner of a handle.
- * param handle The handle to set the cone angle inner from.
- * param value The new cone angle inner to set.
- */
-extern AUD_API int AUD_Handle_setConeAngleInner(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the cone angle outer of a handle.
- * param handle The handle to get the cone angle outer from.
- * return The cone angle outer of the handle.
- */
-extern AUD_API float AUD_Handle_getConeAngleOuter(AUD_Handle* handle);
-
-/**
- * Sets the cone angle outer of a handle.
- * param handle The handle to set the cone angle outer from.
- * param value The new cone angle outer to set.
- */
-extern AUD_API int AUD_Handle_setConeAngleOuter(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the cone volume outer of a handle.
- * param handle The handle to get the cone volume outer from.
- * return The cone volume outer of the handle.
- */
-extern AUD_API float AUD_Handle_getConeVolumeOuter(AUD_Handle* handle);
-
-/**
- * Sets the cone volume outer of a handle.
- * param handle The handle to set the cone volume outer from.
- * param value The new cone volume outer to set.
- */
-extern AUD_API int AUD_Handle_setConeVolumeOuter(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the distance maximum of a handle.
- * param handle The handle to get the distance maximum from.
- * return The distance maximum of the handle.
- */
-extern AUD_API float AUD_Handle_getDistanceMaximum(AUD_Handle* handle);
-
-/**
- * Sets the distance maximum of a handle.
- * param handle The handle to set the distance maximum from.
- * param value The new distance maximum to set.
- */
-extern AUD_API int AUD_Handle_setDistanceMaximum(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the distance reference of a handle.
- * param handle The handle to get the distance reference from.
- * return The distance reference of the handle.
- */
-extern AUD_API float AUD_Handle_getDistanceReference(AUD_Handle* handle);
-
-/**
- * Sets the distance reference of a handle.
- * param handle The handle to set the distance reference from.
- * param value The new distance reference to set.
- */
-extern AUD_API int AUD_Handle_setDistanceReference(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the keep of a handle.
- * param handle The handle to get the keep from.
- * return The keep of the handle.
- */
-extern AUD_API int AUD_Handle_doesKeep(AUD_Handle* handle);
-
-/**
- * Sets the keep of a handle.
- * param handle The handle to set the keep from.
- * param value The new keep to set.
- */
-extern AUD_API int AUD_Handle_setKeep(AUD_Handle* handle, int value);
-
-/**
- * Retrieves the location of a handle.
- * param handle The handle to get the location from.
- * return The location of the handle.
- */
-extern AUD_API int AUD_Handle_getLocation(AUD_Handle* handle, float value[3]);
-
-/**
- * Sets the location of a handle.
- * param handle The handle to set the location from.
- * param value The new location to set.
- */
-extern AUD_API int AUD_Handle_setLocation(AUD_Handle* handle, const float value[3]);
-
-/**
- * Retrieves the loop count of a handle.
- * param handle The handle to get the loop count from.
- * return The loop count of the handle.
- */
-extern AUD_API int AUD_Handle_getLoopCount(AUD_Handle* handle);
-
-/**
- * Sets the loop count of a handle.
- * param handle The handle to set the loop count from.
- * param value The new loop count to set.
- */
-extern AUD_API int AUD_Handle_setLoopCount(AUD_Handle* handle, int value);
-
-/**
- * Retrieves the orientation of a handle.
- * param handle The handle to get the orientation from.
- * return The orientation of the handle.
- */
-extern AUD_API int AUD_Handle_getOrientation(AUD_Handle* handle, float value[4]);
-
-/**
- * Sets the orientation of a handle.
- * param handle The handle to set the orientation from.
- * param value The new orientation to set.
- */
-extern AUD_API int AUD_Handle_setOrientation(AUD_Handle* handle, const float value[4]);
-
-/**
- * Retrieves the pitch of a handle.
- * param handle The handle to get the pitch from.
- * return The pitch of the handle.
- */
-extern AUD_API float AUD_Handle_getPitch(AUD_Handle* handle);
-
-/**
- * Sets the pitch of a handle.
- * param handle The handle to set the pitch from.
- * param value The new pitch to set.
- */
-extern AUD_API int AUD_Handle_setPitch(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the position of a handle.
- * param handle The handle to get the position from.
- * return The position of the handle.
- */
-extern AUD_API float AUD_Handle_getPosition(AUD_Handle* handle);
-
-/**
- * Sets the position of a handle.
- * param handle The handle to set the position from.
- * param value The new position to set.
- */
-extern AUD_API int AUD_Handle_setPosition(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the relative of a handle.
- * param handle The handle to get the relative from.
- * return The relative of the handle.
- */
-extern AUD_API int AUD_Handle_isRelative(AUD_Handle* handle);
-
-/**
- * Sets the relative of a handle.
- * param handle The handle to set the relative from.
- * param value The new relative to set.
- */
-extern AUD_API int AUD_Handle_setRelative(AUD_Handle* handle, int value);
-
-/**
- * Retrieves the status of a handle.
- * param handle The handle to get the status from.
- * return The status of the handle.
- */
-extern AUD_API AUD_Status AUD_Handle_getStatus(AUD_Handle* handle);
-
-/**
- * Retrieves the velocity of a handle.
- * param handle The handle to get the velocity from.
- * return The velocity of the handle.
- */
-extern AUD_API int AUD_Handle_getVelocity(AUD_Handle* handle, float value[3]);
-
-/**
- * Sets the velocity of a handle.
- * param handle The handle to set the velocity from.
- * param value The new velocity to set.
- */
-extern AUD_API int AUD_Handle_setVelocity(AUD_Handle* handle, const float value[3]);
-
-/**
- * Retrieves the volume of a handle.
- * param handle The handle to get the volume from.
- * return The volume of the handle.
- */
-extern AUD_API float AUD_Handle_getVolume(AUD_Handle* handle);
-
-/**
- * Sets the volume of a handle.
- * param handle The handle to set the volume from.
- * param value The new volume to set.
- */
-extern AUD_API int AUD_Handle_setVolume(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the volume maximum of a handle.
- * param handle The handle to get the volume maximum from.
- * return The volume maximum of the handle.
- */
-extern AUD_API float AUD_Handle_getVolumeMaximum(AUD_Handle* handle);
-
-/**
- * Sets the volume maximum of a handle.
- * param handle The handle to set the volume maximum from.
- * param value The new volume maximum to set.
- */
-extern AUD_API int AUD_Handle_setVolumeMaximum(AUD_Handle* handle, float value);
-
-/**
- * Retrieves the volume minimum of a handle.
- * param handle The handle to get the volume minimum from.
- * return The volume minimum of the handle.
- */
-extern AUD_API float AUD_Handle_getVolumeMinimum(AUD_Handle* handle);
-
-/**
- * Sets the volume minimum of a handle.
- * param handle The handle to set the volume minimum from.
- * param value The new volume minimum to set.
- */
-extern AUD_API int AUD_Handle_setVolumeMinimum(AUD_Handle* handle, float value);
-
-/**
- * Frees a handle.
- * \param channel Handle to free.
- */
-extern AUD_API void AUD_Handle_free(AUD_Handle* channel);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp b/extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp
deleted file mode 100644
index f3c28d4d660..00000000000
--- a/extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_ImpulseResponse.h"
-
-AUD_API AUD_ImpulseResponse* AUD_ImpulseResponse_create(AUD_Sound* sound)
-{
- assert(sound);
-
- try
- {
- return new AUD_ImpulseResponse(new ImpulseResponse(std::make_shared<StreamBuffer>(*sound)));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API void AUD_ImpulseResponse_free(AUD_ImpulseResponse* filter)
-{
- assert(filter);
- delete filter;
-} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_ImpulseResponse.h b/extern/audaspace/bindings/C/AUD_ImpulseResponse.h
deleted file mode 100644
index dad2e87e899..00000000000
--- a/extern/audaspace/bindings/C/AUD_ImpulseResponse.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-* Creates a new ImpulseResponse object.
-* \param sound A Sound object representing a impulse response.
-* \return The new ImpulseResponse object.
-*/
-extern AUD_API AUD_ImpulseResponse* AUD_ImpulseResponse_create(AUD_Sound* sound);
-
-/**
-* Deletes a ImpulseResponse object.
-* \param threadPool The ImpulseResponse object to be deleted.
-*/
-extern AUD_API void AUD_ImpulseResponse_free(AUD_ImpulseResponse* filter);
-
-#ifdef __cplusplus
-}
-#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_PlaybackManager.cpp b/extern/audaspace/bindings/C/AUD_PlaybackManager.cpp
deleted file mode 100644
index 69ecb0987e1..00000000000
--- a/extern/audaspace/bindings/C/AUD_PlaybackManager.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_PlaybackManager.h"
-
-AUD_API AUD_PlaybackManager* AUD_PlaybackManager_create(AUD_Device* device)
-{
- assert(device);
-
- try
- {
- return new AUD_PlaybackManager(new PlaybackManager(*device));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API void AUD_PlaybackManager_free(AUD_PlaybackManager* manager)
-{
- assert(manager);
- delete manager;
-}
-
-AUD_API void AUD_PlaybackManager_play(AUD_PlaybackManager* manager, AUD_Sound* sound, unsigned int catKey)
-{
- assert(manager);
- assert(sound);
-
- (*manager)->play(*sound, catKey);
-}
-
-AUD_API int AUD_PlaybackManager_resume(AUD_PlaybackManager* manager, unsigned int catKey)
-{
- assert(manager);
- return (*manager)->resume(catKey);
-}
-
-AUD_API int AUD_PlaybackManager_pause(AUD_PlaybackManager* manager, unsigned int catKey)
-{
- assert(manager);
- return (*manager)->pause(catKey);
-}
-
-AUD_API unsigned int AUD_PlaybackManager_addCategory(AUD_PlaybackManager* manager, float volume)
-{
- assert(manager);
- return (*manager)->addCategory(volume);
-}
-
-AUD_API float AUD_PlaybackManager_getVolume(AUD_PlaybackManager* manager, unsigned int catKey)
-{
- assert(manager);
- return (*manager)->getVolume(catKey);
-}
-
-AUD_API int AUD_PlaybackManager_setVolume(AUD_PlaybackManager* manager, float volume, unsigned int catKey)
-{
- assert(manager);
- return (*manager)->setVolume(volume, catKey);
-}
-
-AUD_API int AUD_PlaybackManager_stop(AUD_PlaybackManager* manager, unsigned int catKey)
-{
- assert(manager);
- return (*manager)->stop(catKey);
-}
-
-AUD_API void AUD_PlaybackManager_clean(AUD_PlaybackManager* manager)
-{
- assert(manager);
- (*manager)->clean();
-}
diff --git a/extern/audaspace/bindings/C/AUD_PlaybackManager.h b/extern/audaspace/bindings/C/AUD_PlaybackManager.h
deleted file mode 100644
index 0fa8171599d..00000000000
--- a/extern/audaspace/bindings/C/AUD_PlaybackManager.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-* Creates a new PlaybackManager object.
-* \param device The device that will be used to play sounds.
-* \return The new PlaybackManager object.
-*/
-extern AUD_API AUD_PlaybackManager* AUD_PlaybackManager_create(AUD_Device* device);
-
-/**
-* Deletes a PlaybackManager object.
-* \param manager The PlaybackManager object to be deleted.
-*/
-extern AUD_API void AUD_PlaybackManager_free(AUD_PlaybackManager* manager);
-
-/**
-* Plays a sound through the playback manager, adding it into a category.
-* \param manager The PlaybackManager object.
-* \param sound The sound to be played.
-* \param catKey The key of the category into which the sound will be added. If it doesn't exist a new one will be creatd.
-*/
-extern AUD_API void AUD_PlaybackManager_play(AUD_PlaybackManager* manager, AUD_Sound* sound, unsigned int catKey);
-
-/**
-* Resumes the playback of all the paused sounds assigned to a category of a playback manager.
-* \param manager The PlaybackManager object.
-* \param catKey The key of the category.
-* \return 0 if the category doesn't exist.
-*/
-extern AUD_API int AUD_PlaybackManager_resume(AUD_PlaybackManager* manager, unsigned int catKey);
-
-/**
-* Pauses all the sounds assigned to a category of a playback manager.
-* \param manager The PlaybackManager object.
-* \param catKey The key of the category.
-* \return 0 if the category doesn't exist.
-*/
-extern AUD_API int AUD_PlaybackManager_pause(AUD_PlaybackManager* manager, unsigned int catKey);
-
-/**
-* Adds a new category with a custom volume.
-* \param manager The PlaybackManager object.
-* \param volume The volume value.
-* \return The key of the new category.
-*/
-extern AUD_API unsigned int AUD_PlaybackManager_addCategory(AUD_PlaybackManager* manager, float volume);
-
-/**
-* Retrieves the volume of a category of a playback manager.
-* \param manager The PlaybackManager object.
-* \param catKey The key of the category.
-* \return The volume of the category.
-*/
-extern AUD_API float AUD_PlaybackManager_getVolume(AUD_PlaybackManager* manager, unsigned int catKey);
-
-/**
-* Changes the voulume of a category of a playback manager.
-* \param manager The PlaybackManager object.
-* \param volume The new volume of the category.
-* \param catKey The key of the category.
-* \return 0 if the category doesn't exist.
-*/
-extern AUD_API int AUD_PlaybackManager_setVolume(AUD_PlaybackManager* manager, float volume, unsigned int catKey);
-
-/**
-* Stops all the sounds assigned to a category of a playback manager.
-* \param manager The PlaybackManager object.
-* \param catKey The key of the category.
-* \return 0 if the category doesn't exist.
-*/
-extern AUD_API int AUD_PlaybackManager_stop(AUD_PlaybackManager* manager, unsigned int catKey);
-
-/**
-* Cleans all the invalid handles in a playback manager
-* \param manager The PlaybackManager object.
-*/
-extern AUD_API void AUD_PlaybackManager_clean(AUD_PlaybackManager* manager);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_Sequence.cpp b/extern/audaspace/bindings/C/AUD_Sequence.cpp
deleted file mode 100644
index d278cb148a1..00000000000
--- a/extern/audaspace/bindings/C/AUD_Sequence.cpp
+++ /dev/null
@@ -1,315 +0,0 @@
-/*******************************************************************************
- * 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 "devices/I3DDevice.h"
-#include "devices/DeviceManager.h"
-#include "sequence/Sequence.h"
-#include "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_Sequence.h"
-
-AUD_API AUD_Sound* AUD_Sequence_create(float fps, int muted)
-{
- // specs are changed at a later point!
- Specs specs;
- specs.channels = CHANNELS_STEREO;
- specs.rate = RATE_48000;
- AUD_Sound* sequence = new AUD_Sound(std::shared_ptr<Sequence>(new Sequence(specs, fps, muted)));
- return sequence;
-}
-
-AUD_API void AUD_Sequence_free(AUD_Sound* sequence)
-{
- delete sequence;
-}
-
-AUD_API AUD_SequenceEntry* AUD_Sequence_add(AUD_Sound* sequence, AUD_Sound* sound, float begin, float end, float skip)
-{
- if(!sound)
- return new AUD_SequenceEntry(((Sequence *)sequence->get())->add(AUD_Sound(), begin, end, skip));
- return new AUD_SequenceEntry(((Sequence *)sequence->get())->add(*sound, begin, end, skip));
-}
-
-AUD_API void AUD_Sequence_remove(AUD_Sound* sequence, AUD_SequenceEntry* entry)
-{
- dynamic_cast<Sequence *>(sequence->get())->remove(*entry);
- delete entry;
-}
-
-AUD_API void AUD_Sequence_setAnimationData(AUD_Sound* sequence, AUD_AnimateablePropertyType type, int frame, float* data, char animated)
-{
- AnimateableProperty* prop = dynamic_cast<Sequence *>(sequence->get())->getAnimProperty(static_cast<AnimateablePropertyType>(type));
- if(animated)
- {
- if(frame >= 0)
- {
- prop->write(data, frame, 1);
- }
- }
- else
- {
- prop->write(data);
- }
-}
-
-AUD_API AUD_DistanceModel AUD_Sequence_getDistanceModel(AUD_Sound* sequence)
-{
- assert(sequence);
- return static_cast<AUD_DistanceModel>(dynamic_cast<Sequence *>(sequence->get())->getDistanceModel());
-}
-
-AUD_API void AUD_Sequence_setDistanceModel(AUD_Sound* sequence, AUD_DistanceModel value)
-{
- assert(sequence);
- dynamic_cast<Sequence *>(sequence->get())->setDistanceModel(static_cast<DistanceModel>(value));
-}
-
-AUD_API float AUD_Sequence_getDopplerFactor(AUD_Sound* sequence)
-{
- assert(sequence);
- return dynamic_cast<Sequence *>(sequence->get())->getDopplerFactor();
-}
-
-AUD_API void AUD_Sequence_setDopplerFactor(AUD_Sound* sequence, float value)
-{
- assert(sequence);
- dynamic_cast<Sequence *>(sequence->get())->setDopplerFactor(value);
-}
-
-AUD_API float AUD_Sequence_getFPS(AUD_Sound* sequence)
-{
- assert(sequence);
- return dynamic_cast<Sequence *>(sequence->get())->getFPS();
-}
-
-AUD_API void AUD_Sequence_setFPS(AUD_Sound* sequence, float value)
-{
- assert(sequence);
- dynamic_cast<Sequence *>(sequence->get())->setFPS(value);
-}
-
-AUD_API int AUD_Sequence_isMuted(AUD_Sound* sequence)
-{
- assert(sequence);
- return dynamic_cast<Sequence *>(sequence->get())->isMuted();
-}
-
-AUD_API void AUD_Sequence_setMuted(AUD_Sound* sequence, int value)
-{
- assert(sequence);
- dynamic_cast<Sequence *>(sequence->get())->mute(value);
-}
-
-static inline AUD_Specs convSpecToC(aud::Specs specs)
-{
- AUD_Specs s;
- s.channels = static_cast<AUD_Channels>(specs.channels);
- s.rate = static_cast<AUD_SampleRate>(specs.rate);
- return s;
-}
-
-static inline aud::Specs convCToSpec(AUD_Specs specs)
-{
- aud::Specs s;
- s.channels = static_cast<Channels>(specs.channels);
- s.rate = static_cast<SampleRate>(specs.rate);
- return s;
-}
-
-AUD_API AUD_Specs AUD_Sequence_getSpecs(AUD_Sound* sequence)
-{
- assert(sequence);
- return convSpecToC(dynamic_cast<Sequence *>(sequence->get())->getSpecs());
-}
-
-AUD_API void AUD_Sequence_setSpecs(AUD_Sound* sequence, AUD_Specs value)
-{
- assert(sequence);
- dynamic_cast<Sequence *>(sequence->get())->setSpecs(convCToSpec(value));
-}
-
-AUD_API float AUD_Sequence_getSpeedOfSound(AUD_Sound* sequence)
-{
- assert(sequence);
- return dynamic_cast<Sequence *>(sequence->get())->getSpeedOfSound();
-}
-
-AUD_API void AUD_Sequence_setSpeedOfSound(AUD_Sound* sequence, float value)
-{
- assert(sequence);
- dynamic_cast<Sequence *>(sequence->get())->setSpeedOfSound(value);
-}
-
-
-
-AUD_API void AUD_SequenceEntry_move(AUD_SequenceEntry* entry, float begin, float end, float skip)
-{
- (*entry)->move(begin, end, skip);
-}
-
-AUD_API void AUD_SequenceEntry_setAnimationData(AUD_SequenceEntry* entry, AUD_AnimateablePropertyType type, int frame, float* data, char animated)
-{
- AnimateableProperty* prop = (*entry)->getAnimProperty(static_cast<AnimateablePropertyType>(type));
- if(animated)
- {
- if(frame >= 0)
- prop->write(data, frame, 1);
- }
- else
- {
- prop->write(data);
- }
-}
-
-AUD_API float AUD_SequenceEntry_getAttenuation(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getAttenuation();
-}
-
-AUD_API void AUD_SequenceEntry_setAttenuation(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setAttenuation(value);
-}
-
-AUD_API float AUD_SequenceEntry_getConeAngleInner(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getConeAngleInner();
-}
-
-AUD_API void AUD_SequenceEntry_setConeAngleInner(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setConeAngleInner(value);
-}
-
-AUD_API float AUD_SequenceEntry_getConeAngleOuter(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getConeAngleOuter();
-}
-
-AUD_API void AUD_SequenceEntry_setConeAngleOuter(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setConeAngleOuter(value);
-}
-
-AUD_API float AUD_SequenceEntry_getConeVolumeOuter(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getConeVolumeOuter();
-}
-
-AUD_API void AUD_SequenceEntry_setConeVolumeOuter(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setConeVolumeOuter(value);
-}
-
-AUD_API float AUD_SequenceEntry_getDistanceMaximum(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getDistanceMaximum();
-}
-
-AUD_API void AUD_SequenceEntry_setDistanceMaximum(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setDistanceMaximum(value);
-}
-
-AUD_API float AUD_SequenceEntry_getDistanceReference(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getDistanceReference();
-}
-
-AUD_API void AUD_SequenceEntry_setDistanceReference(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setDistanceReference(value);
-}
-
-AUD_API int AUD_SequenceEntry_isMuted(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->isMuted();
-}
-
-AUD_API void AUD_SequenceEntry_setMuted(AUD_SequenceEntry* sequence_entry, int value)
-{
- assert(sequence_entry);
- (*sequence_entry)->mute(value);
-}
-
-AUD_API int AUD_SequenceEntry_isRelative(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->isRelative();
-}
-
-AUD_API void AUD_SequenceEntry_setRelative(AUD_SequenceEntry* sequence_entry, int value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setRelative(value);
-}
-
-AUD_API AUD_Sound* AUD_SequenceEntry_getSound(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return new std::shared_ptr<ISound>((*sequence_entry)->getSound());
-}
-
-AUD_API void AUD_SequenceEntry_setSound(AUD_SequenceEntry* sequence_entry, AUD_Sound* value)
-{
- assert(sequence_entry);
- if(value)
- (*sequence_entry)->setSound(*value);
- else
- (*sequence_entry)->setSound(AUD_Sound());
-}
-
-AUD_API float AUD_SequenceEntry_getVolumeMaximum(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getVolumeMaximum();
-}
-
-AUD_API void AUD_SequenceEntry_setVolumeMaximum(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setVolumeMaximum(value);
-}
-
-AUD_API float AUD_SequenceEntry_getVolumeMinimum(AUD_SequenceEntry* sequence_entry)
-{
- assert(sequence_entry);
- return (*sequence_entry)->getVolumeMinimum();
-}
-
-AUD_API void AUD_SequenceEntry_setVolumeMinimum(AUD_SequenceEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setVolumeMinimum(value);
-}
diff --git a/extern/audaspace/bindings/C/AUD_Sequence.h b/extern/audaspace/bindings/C/AUD_Sequence.h
deleted file mode 100644
index 668960c7d50..00000000000
--- a/extern/audaspace/bindings/C/AUD_Sequence.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include "AUD_Device.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// Possible animatable properties for Sequence Factories and Entries.
-typedef enum
-{
- AUD_AP_VOLUME,
- AUD_AP_PANNING,
- AUD_AP_PITCH,
- AUD_AP_LOCATION,
- AUD_AP_ORIENTATION
-} AUD_AnimateablePropertyType;
-
-/**
- * Creates a new sequenced sound scene.
- * \param fps The FPS of the scene.
- * \param muted Whether the scene is muted.
- * \return The new sound scene.
- */
-extern AUD_API AUD_Sound* AUD_Sequence_create(float fps, int muted);
-
-/**
- * Deletes a sound scene.
- * \param sequence The sound scene.
- */
-extern AUD_API void AUD_Sequence_free(AUD_Sound* sequence);
-
-/**
- * Adds a new entry to the scene.
- * \param sequence The sound scene.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \return The entry added.
- */
-extern AUD_API AUD_SequenceEntry* AUD_Sequence_add(AUD_Sound* sequence, AUD_Sound* sound, float begin, float end, float skip);
-
-/**
- * Removes an entry from the scene.
- * \param sequence The sound scene.
- * \param entry The entry to remove.
- */
-extern AUD_API void AUD_Sequence_remove(AUD_Sound* sequence, AUD_SequenceEntry* entry);
-
-/**
- * Writes animation data to a sequence.
- * \param sequence The sound scene.
- * \param type The type of animation data.
- * \param frame The frame this data is for.
- * \param data The data to write.
- * \param animated Whether the attribute is animated.
- */
-extern AUD_API void AUD_Sequence_setAnimationData(AUD_Sound* sequence, AUD_AnimateablePropertyType type, int frame, float* data, char animated);
-
-/**
- * Retrieves the distance model of a sequence.
- * param sequence The sequence to get the distance model from.
- * return The distance model of the sequence.
- */
-extern AUD_API AUD_DistanceModel AUD_Sequence_getDistanceModel(AUD_Sound* sequence);
-
-/**
- * Sets the distance model of a sequence.
- * param sequence The sequence to set the distance model from.
- * param value The new distance model to set.
- */
-extern AUD_API void AUD_Sequence_setDistanceModel(AUD_Sound* sequence, AUD_DistanceModel value);
-
-/**
- * Retrieves the doppler factor of a sequence.
- * param sequence The sequence to get the doppler factor from.
- * return The doppler factor of the sequence.
- */
-extern AUD_API float AUD_Sequence_getDopplerFactor(AUD_Sound* sequence);
-
-/**
- * Sets the doppler factor of a sequence.
- * param sequence The sequence to set the doppler factor from.
- * param value The new doppler factor to set.
- */
-extern AUD_API void AUD_Sequence_setDopplerFactor(AUD_Sound* sequence, float value);
-
-/**
- * Retrieves the fps of a sequence.
- * param sequence The sequence to get the fps from.
- * return The fps of the sequence.
- */
-extern AUD_API float AUD_Sequence_getFPS(AUD_Sound* sequence);
-
-/**
- * Sets the fps of a sequence.
- * param sequence The sequence to set the fps from.
- * param value The new fps to set.
- */
-extern AUD_API void AUD_Sequence_setFPS(AUD_Sound* sequence, float value);
-
-/**
- * Retrieves the muted of a sequence.
- * param sequence The sequence to get the muted from.
- * return The muted of the sequence.
- */
-extern AUD_API int AUD_Sequence_isMuted(AUD_Sound* sequence);
-
-/**
- * Sets the muted of a sequence.
- * param sequence The sequence to set the muted from.
- * param value The new muted to set.
- */
-extern AUD_API void AUD_Sequence_setMuted(AUD_Sound* sequence, int value);
-
-/**
- * Retrieves the specs of a sequence.
- * param sequence The sequence to get the specs from.
- * return The specs of the sequence.
- */
-extern AUD_API AUD_Specs AUD_Sequence_getSpecs(AUD_Sound* sequence);
-
-/**
- * Sets the specs of a sequence.
- * param sequence The sequence to set the specs from.
- * param value The new specs to set.
- */
-extern AUD_API void AUD_Sequence_setSpecs(AUD_Sound* sequence, AUD_Specs value);
-
-/**
- * Retrieves the speed of sound of a sequence.
- * param sequence The sequence to get the speed of sound from.
- * return The speed of sound of the sequence.
- */
-extern AUD_API float AUD_Sequence_getSpeedOfSound(AUD_Sound* sequence);
-
-/**
- * Sets the speed of sound of a sequence.
- * param sequence The sequence to set the speed of sound from.
- * param value The new speed of sound to set.
- */
-extern AUD_API void AUD_Sequence_setSpeedOfSound(AUD_Sound* sequence, float value);
-
-
-
-/**
- * Moves the entry.
- * \param entry The sequenced entry.
- * \param begin The new start time.
- * \param end The new end time or a negative value if unknown.
- * \param skip How many seconds to skip at the beginning.
- */
-extern AUD_API void AUD_SequenceEntry_move(AUD_SequenceEntry* entry, float begin, float end, float skip);
-
-/**
- * Writes animation data to a sequenced entry.
- * \param entry The sequenced entry.
- * \param type The type of animation data.
- * \param frame The frame this data is for.
- * \param data The data to write.
- * \param animated Whether the attribute is animated.
- */
-extern AUD_API void AUD_SequenceEntry_setAnimationData(AUD_SequenceEntry* entry, AUD_AnimateablePropertyType type, int frame, float* data, char animated);
-
-/**
- * Retrieves the attenuation of a sequence_entry.
- * param sequence_entry The sequence_entry to get the attenuation from.
- * return The attenuation of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getAttenuation(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the attenuation of a sequence_entry.
- * param sequence_entry The sequence_entry to set the attenuation from.
- * param value The new attenuation to set.
- */
-extern AUD_API void AUD_SequenceEntry_setAttenuation(AUD_SequenceEntry* sequence_entry, float value);
-
-/**
- * Retrieves the cone angle inner of a sequence_entry.
- * param sequence_entry The sequence_entry to get the cone angle inner from.
- * return The cone angle inner of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getConeAngleInner(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the cone angle inner of a sequence_entry.
- * param sequence_entry The sequence_entry to set the cone angle inner from.
- * param value The new cone angle inner to set.
- */
-extern AUD_API void AUD_SequenceEntry_setConeAngleInner(AUD_SequenceEntry* sequence_entry, float value);
-
-/**
- * Retrieves the cone angle outer of a sequence_entry.
- * param sequence_entry The sequence_entry to get the cone angle outer from.
- * return The cone angle outer of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getConeAngleOuter(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the cone angle outer of a sequence_entry.
- * param sequence_entry The sequence_entry to set the cone angle outer from.
- * param value The new cone angle outer to set.
- */
-extern AUD_API void AUD_SequenceEntry_setConeAngleOuter(AUD_SequenceEntry* sequence_entry, float value);
-
-/**
- * Retrieves the cone volume outer of a sequence_entry.
- * param sequence_entry The sequence_entry to get the cone volume outer from.
- * return The cone volume outer of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getConeVolumeOuter(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the cone volume outer of a sequence_entry.
- * param sequence_entry The sequence_entry to set the cone volume outer from.
- * param value The new cone volume outer to set.
- */
-extern AUD_API void AUD_SequenceEntry_setConeVolumeOuter(AUD_SequenceEntry* sequence_entry, float value);
-
-/**
- * Retrieves the distance maximum of a sequence_entry.
- * param sequence_entry The sequence_entry to get the distance maximum from.
- * return The distance maximum of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getDistanceMaximum(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the distance maximum of a sequence_entry.
- * param sequence_entry The sequence_entry to set the distance maximum from.
- * param value The new distance maximum to set.
- */
-extern AUD_API void AUD_SequenceEntry_setDistanceMaximum(AUD_SequenceEntry* sequence_entry, float value);
-
-/**
- * Retrieves the distance reference of a sequence_entry.
- * param sequence_entry The sequence_entry to get the distance reference from.
- * return The distance reference of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getDistanceReference(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the distance reference of a sequence_entry.
- * param sequence_entry The sequence_entry to set the distance reference from.
- * param value The new distance reference to set.
- */
-extern AUD_API void AUD_SequenceEntry_setDistanceReference(AUD_SequenceEntry* sequence_entry, float value);
-
-/**
- * Retrieves the muted of a sequence_entry.
- * param sequence_entry The sequence_entry to get the muted from.
- * return The muted of the sequence_entry.
- */
-extern AUD_API int AUD_SequenceEntry_isMuted(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the muted of a sequence_entry.
- * param sequence_entry The sequence_entry to set the muted from.
- * param value The new muted to set.
- */
-extern AUD_API void AUD_SequenceEntry_setMuted(AUD_SequenceEntry* sequence_entry, int value);
-
-/**
- * Retrieves the relative of a sequence_entry.
- * param sequence_entry The sequence_entry to get the relative from.
- * return The relative of the sequence_entry.
- */
-extern AUD_API int AUD_SequenceEntry_isRelative(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the relative of a sequence_entry.
- * param sequence_entry The sequence_entry to set the relative from.
- * param value The new relative to set.
- */
-extern AUD_API void AUD_SequenceEntry_setRelative(AUD_SequenceEntry* sequence_entry, int value);
-
-/**
- * Retrieves the sound of a sequence_entry.
- * param sequence_entry The sequence_entry to get the sound from.
- * return The sound of the sequence_entry.
- */
-extern AUD_API AUD_Sound* AUD_SequenceEntry_getSound(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the sound of a sequence_entry.
- * param sequence_entry The sequence_entry to set the sound from.
- * param value The new sound to set.
- */
-extern AUD_API void AUD_SequenceEntry_setSound(AUD_SequenceEntry* sequence_entry, AUD_Sound* value);
-
-/**
- * Retrieves the volume maximum of a sequence_entry.
- * param sequence_entry The sequence_entry to get the volume maximum from.
- * return The volume maximum of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getVolumeMaximum(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the volume maximum of a sequence_entry.
- * param sequence_entry The sequence_entry to set the volume maximum from.
- * param value The new volume maximum to set.
- */
-extern AUD_API void AUD_SequenceEntry_setVolumeMaximum(AUD_SequenceEntry* sequence_entry, float value);
-
-/**
- * Retrieves the volume minimum of a sequence_entry.
- * param sequence_entry The sequence_entry to get the volume minimum from.
- * return The volume minimum of the sequence_entry.
- */
-extern AUD_API float AUD_SequenceEntry_getVolumeMinimum(AUD_SequenceEntry* sequence_entry);
-
-/**
- * Sets the volume minimum of a sequence_entry.
- * param sequence_entry The sequence_entry to set the volume minimum from.
- * param value The new volume minimum to set.
- */
-extern AUD_API void AUD_SequenceEntry_setVolumeMinimum(AUD_SequenceEntry* sequence_entry, float value);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_Sound.cpp b/extern/audaspace/bindings/C/AUD_Sound.cpp
deleted file mode 100644
index 30860acde62..00000000000
--- a/extern/audaspace/bindings/C/AUD_Sound.cpp
+++ /dev/null
@@ -1,709 +0,0 @@
-/*******************************************************************************
- * 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 "generator/Sawtooth.h"
-#include "generator/Sine.h"
-#include "generator/Silence.h"
-#include "generator/Square.h"
-#include "generator/Triangle.h"
-#include "file/File.h"
-#include "file/FileWriter.h"
-#include "util/StreamBuffer.h"
-#include "fx/Accumulator.h"
-#include "fx/ADSR.h"
-#include "fx/Delay.h"
-#include "fx/Envelope.h"
-#include "fx/Fader.h"
-#include "fx/Highpass.h"
-#include "fx/IIRFilter.h"
-#include "fx/Limiter.h"
-#include "fx/Loop.h"
-#include "fx/Lowpass.h"
-#include "fx/Pitch.h"
-#include "fx/Reverse.h"
-#include "fx/Sum.h"
-#include "fx/Threshold.h"
-#include "fx/Volume.h"
-#include "fx/SoundList.h"
-#include "fx/MutableSound.h"
-#include "sequence/Double.h"
-#include "sequence/Superpose.h"
-#include "sequence/PingPong.h"
-#include "respec/LinearResample.h"
-#include "respec/JOSResample.h"
-#include "respec/JOSResampleReader.h"
-#include "respec/ChannelMapper.h"
-#include "respec/ChannelMapperReader.h"
-#include "util/Buffer.h"
-#include "Exception.h"
-
-#ifdef WITH_CONVOLUTION
-#include "fx/BinauralSound.h"
-#include "fx/ConvolverSound.h"
-#endif
-
-#include <cassert>
-#include <cstring>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_Sound.h"
-
-static inline AUD_Specs convSpecToC(aud::Specs specs)
-{
- AUD_Specs s;
- s.channels = static_cast<AUD_Channels>(specs.channels);
- s.rate = static_cast<AUD_SampleRate>(specs.rate);
- return s;
-}
-
-static inline aud::Specs convCToSpec(AUD_Specs specs)
-{
- aud::Specs s;
- s.channels = static_cast<Channels>(specs.channels);
- s.rate = static_cast<SampleRate>(specs.rate);
- return s;
-}
-
-AUD_API AUD_Specs AUD_Sound_getSpecs(AUD_Sound* sound)
-{
- assert(sound);
-
- return convSpecToC((*sound)->createReader()->getSpecs());
-}
-
-AUD_API int AUD_Sound_getLength(AUD_Sound* sound)
-{
- assert(sound);
-
- return (*sound)->createReader()->getLength();
-}
-
-AUD_API sample_t* AUD_Sound_data(AUD_Sound* sound, int* length, AUD_Specs* specs)
-{
- assert(sound);
- assert(length);
- assert(specs);
-
- auto stream_buffer = std::dynamic_pointer_cast<StreamBuffer>(*sound);
- if(!stream_buffer)
- stream_buffer = std::make_shared<StreamBuffer>(*sound);
- *specs = convSpecToC(stream_buffer->getSpecs());
- auto buffer = stream_buffer->getBuffer();
-
- *length = buffer->getSize() / AUD_SAMPLE_SIZE((*specs));
-
- sample_t* data = new sample_t[buffer->getSize()];
-
- std::memcpy(data, buffer->getBuffer(), buffer->getSize());
-
- return data;
-}
-
-AUD_API void AUD_Sound_freeData(sample_t* data)
-{
- delete[] data;
-}
-
-AUD_API const char* AUD_Sound_write(AUD_Sound* sound, const char* filename, AUD_SampleRate rate, AUD_Channels channels, AUD_SampleFormat format, AUD_Container container, AUD_Codec codec, int bitrate, int buffersize)
-{
- assert(sound);
- assert(filename);
-
- try
- {
- std::shared_ptr<IReader> reader = (*sound)->createReader();
-
- DeviceSpecs specs;
- specs.specs = reader->getSpecs();
-
- if((rate != RATE_INVALID) && (specs.rate != rate))
- {
- specs.rate = rate;
- reader = std::make_shared<JOSResampleReader>(reader, rate);
- }
-
- if((channels != AUD_CHANNELS_INVALID) && (specs.channels != static_cast<Channels>(channels)))
- {
- specs.channels = static_cast<Channels>(channels);
- reader = std::make_shared<ChannelMapperReader>(reader, specs.channels);
- }
-
- if(format == AUD_FORMAT_INVALID)
- format = AUD_FORMAT_S16;
- specs.format = static_cast<SampleFormat>(format);
-
- const char* invalid_container_error = "Container could not be determined from filename.";
-
- if(container == AUD_CONTAINER_INVALID)
- {
- std::string path = filename;
-
- if(path.length() < 4)
- return invalid_container_error;
-
- std::string extension = path.substr(path.length() - 4);
-
- if(extension == ".ac3")
- container = AUD_CONTAINER_AC3;
- else if(extension == "flac")
- container = AUD_CONTAINER_FLAC;
- else if(extension == ".mkv")
- container = AUD_CONTAINER_MATROSKA;
- else if(extension == ".mp2")
- container = AUD_CONTAINER_MP2;
- else if(extension == ".mp3")
- container = AUD_CONTAINER_MP3;
- else if(extension == ".ogg")
- container = AUD_CONTAINER_OGG;
- else if(extension == ".wav")
- container = AUD_CONTAINER_WAV;
- else
- return invalid_container_error;
- }
-
- if(codec == AUD_CODEC_INVALID)
- {
- switch(container)
- {
- case AUD_CONTAINER_AC3:
- codec = AUD_CODEC_AC3;
- break;
- case AUD_CONTAINER_FLAC:
- codec = AUD_CODEC_FLAC;
- break;
- case AUD_CONTAINER_MATROSKA:
- codec = AUD_CODEC_OPUS;
- break;
- case AUD_CONTAINER_MP2:
- codec = AUD_CODEC_MP2;
- break;
- case AUD_CONTAINER_MP3:
- codec = AUD_CODEC_MP3;
- break;
- case AUD_CONTAINER_OGG:
- codec = AUD_CODEC_VORBIS;
- break;
- case AUD_CONTAINER_WAV:
- codec = AUD_CODEC_PCM;
- break;
- default:
- return "Unknown container, cannot select default codec.";
- }
- }
-
- if(buffersize <= 0)
- buffersize = AUD_DEFAULT_BUFFER_SIZE;
-
- std::shared_ptr<IWriter> writer = FileWriter::createWriter(filename, specs, static_cast<Container>(container), static_cast<Codec>(codec), bitrate);
- FileWriter::writeReader(reader, writer, 0, buffersize);
- }
- catch(Exception& e)
- {
- return "An exception occured while writing.";
- }
-
- return nullptr;
-}
-
-AUD_API AUD_Sound* AUD_Sound_buffer(sample_t* data, int length, AUD_Specs specs)
-{
- assert(data);
-
- if(length <= 0 || specs.rate <= 0 || specs.channels <= 0)
- {
- return nullptr;
- }
-
- int size = length * AUD_SAMPLE_SIZE(specs);
-
- std::shared_ptr<Buffer> buffer = std::make_shared<Buffer>(size);
-
- std::memcpy(buffer->getBuffer(), data, size);
-
- try
- {
- return new AUD_Sound(new StreamBuffer(buffer, convCToSpec(specs)));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_bufferFile(unsigned char* buffer, int size)
-{
- assert(buffer);
- return new AUD_Sound(new File(buffer, size));
-}
-
-AUD_API AUD_Sound* AUD_Sound_cache(AUD_Sound* sound)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new StreamBuffer(*sound));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_file(const char* filename)
-{
- assert(filename);
- return new AUD_Sound(new File(filename));
-}
-
-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()
-{
- return new AUD_Sound(new Silence());
-}
-
-AUD_API AUD_Sound* AUD_Sound_sine(float frequency, AUD_SampleRate rate)
-{
- return new AUD_Sound(new Sine(frequency, rate));
-}
-
-AUD_API AUD_Sound* AUD_Sound_square(float frequency, AUD_SampleRate rate)
-{
- return new AUD_Sound(new Square(frequency, rate));
-}
-
-AUD_API AUD_Sound* AUD_Sound_triangle(float frequency, AUD_SampleRate rate)
-{
- return new AUD_Sound(new Triangle(frequency, rate));
-}
-
-AUD_API AUD_Sound* AUD_Sound_accumulate(AUD_Sound* sound, int additive)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Accumulator(*sound, additive));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_ADSR(AUD_Sound* sound, float attack, float decay, float sustain, float release)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new ADSR(*sound, attack, decay, sustain, release));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_delay(AUD_Sound* sound, float delay)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Delay(*sound, delay));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_envelope(AUD_Sound* sound, float attack, float release, float threshold, float arthreshold)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Envelope(*sound, attack, release, threshold, arthreshold));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_fadein(AUD_Sound* sound, float start, float length)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Fader(*sound, FADE_IN, start, length));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_fadeout(AUD_Sound* sound, float start, float length)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Fader(*sound, FADE_OUT, start, length));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_filter(AUD_Sound* sound, float* b, int b_length, float* a, int a_length)
-{
- assert(sound);
-
- try
- {
- std::vector<float> a_coeff, b_coeff;
-
- if(b)
- for(int i = 0; i < b_length; i++)
- b_coeff.push_back(b[i]);
-
- if(a)
- {
- for(int i = 0; i < a_length; i++)
- a_coeff.push_back(a[i]);
-
- if(*a == 0.0f)
- a_coeff[0] = 1.0f;
- }
-
- return new AUD_Sound(new IIRFilter(*sound, b_coeff, a_coeff));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_highpass(AUD_Sound* sound, float frequency, float Q)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Highpass(*sound, frequency, Q));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_limit(AUD_Sound* sound, float start, float end)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Limiter(*sound, start, end));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_loop(AUD_Sound* sound, int count)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Loop(*sound, count));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_lowpass(AUD_Sound* sound, float frequency, float Q)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Lowpass(*sound, frequency, Q));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_pitch(AUD_Sound* sound, float factor)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Pitch(*sound, factor));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_rechannel(AUD_Sound* sound, AUD_Channels channels)
-{
- assert(sound);
-
- try
- {
- DeviceSpecs specs;
- specs.channels = static_cast<Channels>(channels);
- specs.rate = RATE_INVALID;
- specs.format = FORMAT_INVALID;
- return new AUD_Sound(new ChannelMapper(*sound, specs));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_resample(AUD_Sound* sound, AUD_SampleRate rate, bool high_quality)
-{
- assert(sound);
-
- try
- {
- DeviceSpecs specs;
- specs.channels = CHANNELS_INVALID;
- specs.rate = rate;
- specs.format = FORMAT_INVALID;
- if(high_quality)
- return new AUD_Sound(new JOSResample(*sound, specs));
- else
- return new AUD_Sound(new LinearResample(*sound, specs));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_reverse(AUD_Sound* sound)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Reverse(*sound));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_sum(AUD_Sound* sound)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Sum(*sound));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_threshold(AUD_Sound* sound, float threshold)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Threshold(*sound, threshold));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_volume(AUD_Sound* sound, float volume)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new Volume(*sound, volume));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_join(AUD_Sound* first, AUD_Sound* second)
-{
- assert(first);
- assert(second);
-
- try
- {
- return new AUD_Sound(new Double(*first, *second));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_mix(AUD_Sound* first, AUD_Sound* second)
-{
- assert(first);
- assert(second);
-
- try
- {
- return new AUD_Sound(new Superpose(*first, *second));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_pingpong(AUD_Sound* sound)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new PingPong(*sound));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API void AUD_Sound_free(AUD_Sound* sound)
-{
- assert(sound);
- delete sound;
-}
-
-AUD_API AUD_Sound* AUD_Sound_copy(AUD_Sound* sound)
-{
- return new std::shared_ptr<ISound>(*sound);
-}
-
-AUD_API AUD_Sound* AUD_Sound_list(int random)
-{
- try
- {
- return new AUD_Sound(new SoundList(random));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API int AUD_SoundList_addSound(AUD_Sound* list, AUD_Sound* sound)
-{
- assert(sound);
- assert(list);
-
- std::shared_ptr<SoundList> s = std::dynamic_pointer_cast<SoundList>(*list);
- if(s.get())
- {
- s->addSound(*sound);
- return 1;
- }
- else
- return 0;
-
-}
-
-AUD_API AUD_Sound* AUD_Sound_mutable(AUD_Sound* sound)
-{
- assert(sound);
-
- try
- {
- return new AUD_Sound(new MutableSound(*sound));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-#ifdef WITH_CONVOLUTION
-
-AUD_API AUD_Sound* AUD_Sound_Convolver(AUD_Sound* sound, AUD_ImpulseResponse* filter, AUD_ThreadPool* threadPool)
-{
- assert(sound);
- assert(filter);
- assert(threadPool);
-
- try
- {
- return new AUD_Sound(new ConvolverSound(*sound, *filter, *threadPool));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API AUD_Sound* AUD_Sound_Binaural(AUD_Sound* sound, AUD_HRTF* hrtfs, AUD_Source* source, AUD_ThreadPool* threadPool)
-{
- assert(sound);
- assert(hrtfs);
- assert(source);
- assert(threadPool);
-
- try
- {
- return new AUD_Sound(new BinauralSound(*sound, *hrtfs, *source, *threadPool));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_Sound.h b/extern/audaspace/bindings/C/AUD_Sound.h
deleted file mode 100644
index b18e3c3a8eb..00000000000
--- a/extern/audaspace/bindings/C/AUD_Sound.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Retrieves the sample specification of the sound.
- * \param sound The sound to retrieve from.
- * \return The sample specification of the sound.
- * \note This function creates a reader from the sound and deletes it again.
- */
-extern AUD_API AUD_Specs AUD_Sound_getSpecs(AUD_Sound* sound);
-
-/**
- * Retrieves the approximate length of the sound.
- * \param sound The sound to retrieve from.
- * \return The length of the sound in samples.
- * \note This function creates a reader from the sound and deletes it again.
- */
-extern AUD_API int AUD_getLength(AUD_Sound* sound);
-
-/**
- * Reads a sound's samples into memory.
- * \param sound The sound to read.
- * \param length Pointer to store the length of memory read.
- * \param specs Pointer to store the data's sample specification.
- * \return A pointer to the sample data.
- * \warning The data has to be freed with AUD_Sound_freeData.
- */
-extern AUD_API sample_t* AUD_Sound_data(AUD_Sound* sound, int* length, AUD_Specs* specs);
-
-/**
- * Frees a buffer previously allocated with AUD_Sound_data.
- * \param data The buffer to be freed.
- */
-extern AUD_API void AUD_Sound_freeData(sample_t* data);
-
-/**
- * Writes the sound to a file.
- * \param sound The sound to write.
- * \param filename The path to write to..
- * \param rate The sample rate to write with.
- * \param channels The number of channels to write with.
- * \param format The sample format to write with.
- * \param container The container format for the file.
- * \param codec The codec to use in the file.
- * \param bitrate The bitrate to write with.
- * \param buffersize The size of the writing buffer.
- * \return A nullptr or an error message in case of error.
- * \note Most parameters can be set to zero for default values.
- */
-extern AUD_API const char* AUD_Sound_write(AUD_Sound* sound, const char* filename, AUD_SampleRate rate, AUD_Channels channels, AUD_SampleFormat format, AUD_Container container, AUD_Codec codec, int bitrate, int buffersize);
-
-/**
- * Creates a sound from a data buffer.
- * \param data The data as interleaved samples.
- * \param length The data's length in samples.
- * \param specs The data's sample specification.
- * \return A handle of the sound.
- * \note The data gets copied to an internal memory buffer.
- * The pointer does not need to stay valid for the lifetime of the object.
- */
-extern AUD_API AUD_Sound* AUD_Sound_buffer(sample_t* data, int length, AUD_Specs specs);
-
-/**
- * Loads a sound file from a memory buffer.
- * \param buffer The buffer which contains the sound file.
- * \param size The size of the buffer.
- * \return A handle of the sound file.
- */
-extern AUD_API AUD_Sound* AUD_Sound_bufferFile(unsigned char* buffer, int size);
-
-/**
- * Caches a sound into a memory buffer.
- * \param sound The sound to cache.
- * \return A handle of the cached sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_cache(AUD_Sound* sound);
-
-/**
- * Loads a sound file.
- * \param filename The filename of the sound file.
- * \return A handle of the sound file.
- */
-extern AUD_API AUD_Sound* AUD_Sound_file(const char* filename);
-
-/**
- * Creates a sawtooth sound.
- * \param frequency The frequency of the generated sawtooth sound.
- * \param rate The sample rate of the sawtooth sound.
- * \return A handle of the sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_sawtooth(float frequency, AUD_SampleRate rate);
-
-/**
- * Creates a quiet sound.
- * \return A handle of the sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_silence();
-
-/**
- * Creates a sine sound.
- * \param frequency The frequency of the generated sine sound.
- * \param rate The sample rate of the sine sound.
- * \return A handle of the sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_sine(float frequency, AUD_SampleRate rate);
-
-/**
- * Creates a square sound.
- * \param frequency The frequency of the generated square sound.
- * \param rate The sample rate of the square sound.
- * \return A handle of the sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_square(float frequency, AUD_SampleRate rate);
-
-/**
- * Creates a triangle sound.
- * \param frequency The frequency of the generated triangle sound.
- * \param rate The sample rate of the triangle sound.
- * \return A handle of the sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_triangle(float frequency, AUD_SampleRate rate);
-
-/**
- * Accumulates a sound by summing over positive input differences thus generating a monotonic sigal.
- * If additivity is set to true negative input differences get added too, but positive ones with a factor of two.
- * Note that with additivity the signal is not monotonic anymore.
- * \param sound The sound to accumulate.
- * \param additive Whether the accumulation should be additive or not.
- * \return A handle of the accumulated sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_accumulate(AUD_Sound* sound, int additive);
-
-/**
- * Attack-Decay-Sustain-Release envelopes the volume of a sound.
- * Note: there is currently no way to trigger the release with this API.
- * \param sound The sound to filter.
- * \param attack The attack time in seconds.
- * \param decay The decay time in seconds.
- * \param sustain The sustain level.
- * \param release The release time in seconds.
- * \return A handle of the filtered sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_ADSR(AUD_Sound* sound, float attack, float decay, float sustain, float release);
-
-/**
- * Delays a sound.
- * \param sound The sound to dealy.
- * \param delay The delay in seconds.
- * \return A handle of the delayed sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_delay(AUD_Sound* sound, float delay);
-
-/**
- * Envelopes a sound.
- * \param sound The sound to envelope.
- * \param attack The attack factor.
- * \param release The release factor.
- * \param threshold The general threshold value.
- * \param arthreshold The attack/release threshold value.
- * \return A handle of the enveloped sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_envelope(AUD_Sound* sound, float attack, float release, float threshold, float arthreshold);
-
-/**
- * Fade in a sound.
- * \param sound The sound to be fade in.
- * \param start The time when the fading should start in seconds.
- * \param length The duration of the fade in seconds.
- * \return A handle of the faded sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_fadein(AUD_Sound* sound, float start, float length);
-
-/**
- * Fade out a sound.
- * \param sound The sound to be fade out.
- * \param start The time when the fading should start in seconds.
- * \param length The duration of the fade in seconds.
- * \return A handle of the faded sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_fadeout(AUD_Sound* sound, float start, float length);
-
-/**
- * Filter a sound.
- * \param sound The sound to be filtered.
- * \param b The nominator filter coefficients, may be NULL.
- * \param b_length The length of the b array.
- * \param a The denominator filter coefficients, may be NULL.
- * \param a_length The length of the a array.
- * \return A handle of the filtered sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_filter(AUD_Sound* sound, float* b, int b_length, float* a, int a_length);
-
-/**
- * Highpass filters a sound.
- * \param sound The sound to filter.
- * \param frequency The filter cut-off frequency.
- * \param Q The filter quality. If usunsure which value to use, pass 1.0f.
- * \return A handle of the filtered sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_highpass(AUD_Sound* sound, float frequency, float Q);
-
-/**
- * Limits a sound.
- * \param sound The sound to limit.
- * \param start The start time in seconds.
- * \param end The stop time in seconds.
- * \return A handle of the limited sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_limit(AUD_Sound* sound, float start, float end);
-
-/**
- * Loops a sound.
- * \param sound The sound to loop.
- * \param count How often the sound should be looped. Negative values mean endlessly.
- * \return A handle of the looped sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_loop(AUD_Sound* sound, int count);
-
-/**
- * Lowpass filters a sound.
- * \param sound The sound to filter.
- * \param frequency The filter cut-off frequency.
- * \param Q The filter quality. If usunsure which value to use, pass 1.0f.
- * \return A handle of the filtered sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_lowpass(AUD_Sound* sound, float frequency, float Q);
-
-/**
- * Changes the pitch of a sound.
- * \param sound The sound to change.
- * \param factor The factor to change the pitch with.
- * \return A handle of the pitched sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_pitch(AUD_Sound* sound, float factor);
-
-/**
- * Rechannels the sound.
- * \param sound The sound to rechannel.
- * \param channels The new channel configuration.
- * \return The rechanneled sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_rechannel(AUD_Sound* sound, AUD_Channels channels);
-
-/**
- * Resamples the sound.
- * \param sound The sound to resample.
- * \param rate The new sample rate.
- * \param high_quality When true use a higher quality but slower resampler.
- * \return The resampled sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_resample(AUD_Sound* sound, AUD_SampleRate rate, bool high_quality);
-
-/**
- * Reverses a sound. Make sure the sound source can be reversed.
- * \param sound The sound to reverse.
- * \return A handle of the reversed sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_reverse(AUD_Sound* sound);
-
-/**
- * Sums the samples of a sound.
- * \param sound The sound to sum.
- * \return A handle of the summed sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_sum(AUD_Sound* sound);
-
-/**
- * Turns a sound into a square wave by thresholding.
- * \param sound The sound to threshold.
- * \param threshold Threshold value over which an amplitude counts non-zero.
- * \return A handle of the thresholded sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_threshold(AUD_Sound* sound, float threshold);
-
-/**
- * Changes the volume of a sound.
- * \param sound The sound to change.
- * \param volume The new volume of the sound. Should be in the range 0 to 1. Use higher values with caution.
- * \return A handle of the amplified sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_volume(AUD_Sound* sound, float volume);
-
-/**
- * Joins two sound, which means playing them one after the other.
- * \param first The first sound.
- * \param second The second sound.
- * \return A handle of the joined sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_join(AUD_Sound* first, AUD_Sound* second);
-
-/**
- * Mixes two sound, which means superposing the sound samples.
- * \param first The first sound.
- * \param second The second sound.
- * \return A handle of the mixed sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_mix(AUD_Sound* first, AUD_Sound* second);
-
-/**
- * Ping pongs a sound.
- * \param sound The sound to ping pong.
- * \return A handle of the ping pong sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_pingpong(AUD_Sound* sound);
-
-/**
- * Unloads a sound of any type.
- * \param sound The handle of the sound.
- */
-extern AUD_API void AUD_Sound_free(AUD_Sound* sound);
-
-/**
- * Copies a sound.
- * \param sound Sound to copy.
- * \return Copied sound.
- */
-extern AUD_API AUD_Sound* AUD_Sound_copy(AUD_Sound* sound);
-
-/**
- * Creates an empty sound list that can contain several sounds.
- * \param random A flag that indicates how the list will be played: Randomly or sequentially.
- * if 0 the playback will be sequential, if not 0 the playback will be random.
- * \return A handle of the sound list.
- */
-extern AUD_API AUD_Sound* AUD_Sound_list(int random);
-
-/**
-* Adds a new sound to a sound list.
- * \param list The sound list in which the sound will be added.
- * \param sound The sound that will be added to the list.
- * \return 0 if the sound couldn't be added (the list parameter isn't a sound list).
-*/
-extern AUD_API int AUD_SoundList_addSound(AUD_Sound* list, AUD_Sound* sound);
-
-/**
- * Creates a sound that will be restarted when sought backwards. If the original sound is a sound list, the playing sound can change.
- * \param sound The handle of the sound.
- * \return A handle of the mutable sound.
-*/
-extern AUD_API AUD_Sound* AUD_Sound_mutable(AUD_Sound* sound);
-
-#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
-}
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_Source.cpp b/extern/audaspace/bindings/C/AUD_Source.cpp
deleted file mode 100644
index c4bf6fea6a1..00000000000
--- a/extern/audaspace/bindings/C/AUD_Source.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_Source.h"
-
-extern AUD_API AUD_Source* AUD_Source_create(float azimuth, float elevation, float distance)
-{
- try
- {
- return new AUD_Source(new Source(azimuth, elevation, distance));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-extern AUD_API void AUD_Source_free(AUD_Source* source)
-{
- assert(source);
- delete source;
-}
-
-extern AUD_API float AUD_Source_getAzimuth(AUD_Source* source)
-{
- assert(source);
-
- return (*source)->getAzimuth();
-}
-
-extern AUD_API float AUD_Source_getElevation(AUD_Source* source)
-{
- assert(source);
-
- return (*source)->getElevation();
-}
-
-extern AUD_API float AUD_Source_getDistance(AUD_Source* source)
-{
- assert(source);
-
- return (*source)->getDistance();
-}
-
-extern AUD_API void AUD_Source_setAzimuth(AUD_Source* source, float azimuth)
-{
- assert(source);
-
- (*source)->setAzimuth(azimuth);
-}
-
-extern AUD_API void AUD_Source_setElevation(AUD_Source* source, float elevation)
-{
- assert(source);
-
- (*source)->setElevation(elevation);
-}
-
-extern AUD_API void AUD_Source_setDistance(AUD_Source* source, float distance)
-{
- assert(source);
-
- (*source)->setDistance(distance);
-} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_Source.h b/extern/audaspace/bindings/C/AUD_Source.h
deleted file mode 100644
index 6ff045ec848..00000000000
--- a/extern/audaspace/bindings/C/AUD_Source.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-* Creates a new Source object.
-* \param azimuth The azimuth angle.
-* \param elevation The elevation angle.
-* \param elevation The distance value. [0,1]
-* \return The new Source object.
-*/
-extern AUD_API AUD_Source* AUD_Source_create(float azimuth, float elevation, float distance);
-
-/**
-* Deletes a Source object.
-* \param source The Source object to be deleted.
-*/
-extern AUD_API void AUD_Source_free(AUD_Source* source);
-
-/**
-* Retrieves the azimuth angle of a Source object.
-* \param source The Source object.
-* \return The azimuth angle.
-*/
-extern AUD_API float AUD_Source_getAzimuth(AUD_Source* source);
-
-/**
-* Retrieves the elevation angle oa a Source object.
-* \param source The Source object.
-* \return The elevation angle.
-*/
-extern AUD_API float AUD_Source_getElevation(AUD_Source* source);
-
-/**
-* Retrieves the distance of a Source object. [0,1]
-* \param source The Source object.
-* \return The distance.
-*/
-extern AUD_API float AUD_Source_getDistance(AUD_Source* distance);
-
-/**
-* Changes the azimuth angle of a Source object.
-* \param source The Source object.
-* \param azimuth The azimuth angle.
-*/
-extern AUD_API void AUD_Source_setAzimuth(AUD_Source* source, float azimuth);
-
-/**
-* Changes the elevation angle of a Source object.
-* \param source The Source object.
-* \param elevation The elevation angle.
-*/
-extern AUD_API void AUD_Source_setElevation(AUD_Source* source, float elevation);
-
-/**
-* Changes the distance of a Source object. [0,1]
-* \param source The Source object.
-* \param distance The distance.
-*/
-extern AUD_API void AUD_Source_setDistance(AUD_Source* source, float distance);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_Special.cpp b/extern/audaspace/bindings/C/AUD_Special.cpp
deleted file mode 100644
index f8f46651231..00000000000
--- a/extern/audaspace/bindings/C/AUD_Special.cpp
+++ /dev/null
@@ -1,420 +0,0 @@
-/*******************************************************************************
- * 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 "Exception.h"
-#include "IReader.h"
-#include "file/File.h"
-#include "respec/ChannelMapper.h"
-#include "fx/Lowpass.h"
-#include "fx/Highpass.h"
-#include "fx/Envelope.h"
-#include "respec/LinearResample.h"
-#include "fx/Threshold.h"
-#include "fx/Accumulator.h"
-#include "fx/Sum.h"
-#include "generator/Silence.h"
-#include "fx/Limiter.h"
-#include "devices/DeviceManager.h"
-#include "sequence/Sequence.h"
-#include "file/FileWriter.h"
-#include "devices/ReadDevice.h"
-#include "plugin/PluginManager.h"
-#include "devices/DeviceManager.h"
-#include "devices/IDeviceFactory.h"
-#include "devices/NULLDevice.h"
-
-#include <cassert>
-#include <cstring>
-#include <cmath>
-#include <sstream>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_Special.h"
-
-static inline AUD_Specs convSpecToC(aud::Specs specs)
-{
- AUD_Specs s;
- s.channels = static_cast<AUD_Channels>(specs.channels);
- s.rate = static_cast<AUD_SampleRate>(specs.rate);
- return s;
-}
-
-static inline aud::Specs convCToSpec(AUD_Specs specs)
-{
- aud::Specs s;
- s.channels = static_cast<Channels>(specs.channels);
- s.rate = static_cast<SampleRate>(specs.rate);
- return s;
-}
-
-static inline AUD_DeviceSpecs convDSpecToC(aud::DeviceSpecs specs)
-{
- AUD_DeviceSpecs s;
- s.specs = convSpecToC(specs.specs);
- s.format = static_cast<AUD_SampleFormat>(specs.format);
- return s;
-}
-
-static inline aud::DeviceSpecs convCToDSpec(AUD_DeviceSpecs specs)
-{
- aud::DeviceSpecs s;
- s.specs = convCToSpec(specs.specs);
- s.format = static_cast<SampleFormat>(specs.format);
- return s;
-}
-
-AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound)
-{
- assert(sound);
-
- AUD_SoundInfo info;
- info.specs.channels = AUD_CHANNELS_INVALID;
- info.specs.rate = AUD_RATE_INVALID;
- info.length = 0.0f;
-
- try
- {
- std::shared_ptr<IReader> reader = (*sound)->createReader();
-
- if(reader.get())
- {
- info.specs = convSpecToC(reader->getSpecs());
- info.length = reader->getLength() / (float) info.specs.rate;
- }
- }
- catch(Exception&)
- {
- }
-
- return info;
-}
-
-AUD_API float* AUD_readSoundBuffer(const char* filename, float low, float high,
- float attack, float release, float threshold,
- int accumulate, int additive, int square,
- float sthreshold, double samplerate, int* length)
-{
- Buffer buffer;
- DeviceSpecs specs;
- specs.channels = CHANNELS_MONO;
- specs.rate = (SampleRate)samplerate;
- std::shared_ptr<ISound> sound;
-
- std::shared_ptr<ISound> file = std::shared_ptr<ISound>(new File(filename));
-
- int position = 0;
-
- try
- {
- std::shared_ptr<IReader> reader = file->createReader();
-
- SampleRate rate = reader->getSpecs().rate;
-
- sound = std::shared_ptr<ISound>(new ChannelMapper(file, specs));
-
- if(high < rate)
- sound = std::shared_ptr<ISound>(new Lowpass(sound, high));
- if(low > 0)
- sound = std::shared_ptr<ISound>(new Highpass(sound, low));
-
- sound = std::shared_ptr<ISound>(new Envelope(sound, attack, release, threshold, 0.1f));
- sound = std::shared_ptr<ISound>(new LinearResample(sound, specs));
-
- if(square)
- sound = std::shared_ptr<ISound>(new Threshold(sound, sthreshold));
-
- if(accumulate)
- sound = std::shared_ptr<ISound>(new Accumulator(sound, additive));
- else if(additive)
- sound = std::shared_ptr<ISound>(new Sum(sound));
-
- reader = sound->createReader();
-
- if(!reader.get())
- return nullptr;
-
- int len;
- bool eos;
- do
- {
- len = samplerate;
- buffer.resize((position + len) * sizeof(float), true);
- reader->read(len, eos, buffer.getBuffer() + position);
- position += len;
- } while(!eos);
- }
- catch(Exception&)
- {
- return nullptr;
- }
-
- float * result = (float *)malloc(position * sizeof(float));
- std::memcpy(result, buffer.getBuffer(), position * sizeof(float));
- *length = position;
- return result;
-}
-
-static void pauseSound(AUD_Handle* handle)
-{
- assert(handle);
- (*handle)->pause();
-}
-
-AUD_API AUD_Handle* AUD_pauseAfter(AUD_Handle* handle, float seconds)
-{
- std::shared_ptr<ISound> silence = std::shared_ptr<ISound>(new Silence);
- std::shared_ptr<ISound> limiter = std::shared_ptr<ISound>(new Limiter(silence, 0, seconds));
-
- auto device = DeviceManager::getDevice();
-
- std::lock_guard<ILockable> lock(*device);
-
- try
- {
- AUD_Handle handle2 = device->play(limiter);
- if(handle2.get())
- {
- handle2->setStopCallback((stopCallback)pauseSound, handle);
- return new AUD_Handle(handle2);
- }
- }
- catch(Exception&)
- {
- }
-
- return nullptr;
-}
-
-AUD_API int AUD_readSound(AUD_Sound* sound, float* buffer, int length, int samples_per_second, short* interrupt)
-{
- DeviceSpecs specs;
- float* buf;
- Buffer aBuffer;
-
- specs.rate = RATE_INVALID;
- specs.channels = CHANNELS_MONO;
- specs.format = FORMAT_INVALID;
-
- std::shared_ptr<IReader> reader = ChannelMapper(*sound, specs).createReader();
-
- specs.specs = reader->getSpecs();
- int len;
- float samplejump = specs.rate / samples_per_second;
- float min, max, power, overallmax;
- bool eos;
-
- overallmax = 0;
-
- for(int i = 0; i < length; i++)
- {
- len = floor(samplejump * (i+1)) - floor(samplejump * i);
-
- if(*interrupt)
- return 0;
-
- aBuffer.assureSize(len * AUD_SAMPLE_SIZE(specs));
- buf = aBuffer.getBuffer();
-
- reader->read(len, eos, buf);
-
- max = min = *buf;
- power = *buf * *buf;
- for(int j = 1; j < len; j++)
- {
- if(buf[j] < min)
- min = buf[j];
- if(buf[j] > max)
- max = buf[j];
- power += buf[j] * buf[j];
- }
-
- buffer[i * 3] = min;
- buffer[i * 3 + 1] = max;
- buffer[i * 3 + 2] = sqrt(power) / len;
-
- if(overallmax < max)
- overallmax = max;
- if(overallmax < -min)
- overallmax = -min;
-
- if(eos)
- {
- length = i;
- break;
- }
- }
-
- if(overallmax > 1.0f)
- {
- for(int i = 0; i < length * 3; i++)
- {
- buffer[i] /= overallmax;
- }
- }
-
- return length;
-}
-
-AUD_API const char* AUD_mixdown(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate)
-{
- try
- {
- Sequence* f = dynamic_cast<Sequence *>(sound->get());
-
- f->setSpecs(convCToSpec(specs.specs));
- std::shared_ptr<IReader> reader = f->createQualityReader();
- reader->seek(start);
- std::shared_ptr<IWriter> writer = FileWriter::createWriter(filename, convCToDSpec(specs), static_cast<Container>(format), static_cast<Codec>(codec), bitrate);
- FileWriter::writeReader(reader, writer, length, buffersize);
-
- return nullptr;
- }
- catch(Exception& e)
- {
- return e.getMessage().c_str();
- }
-}
-
-AUD_API const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate)
-{
- try
- {
- Sequence* f = dynamic_cast<Sequence *>(sound->get());
-
- f->setSpecs(convCToSpec(specs.specs));
-
- std::vector<std::shared_ptr<IWriter> > writers;
-
- int channels = specs.channels;
- specs.channels = AUD_CHANNELS_MONO;
-
- for(int i = 0; i < channels; i++)
- {
- std::stringstream stream;
- std::string fn = filename;
- size_t index = fn.find_last_of('.');
- size_t index_slash = fn.find_last_of('/');
- size_t index_backslash = fn.find_last_of('\\');
-
- if((index == std::string::npos) ||
- ((index < index_slash) && (index_slash != std::string::npos)) ||
- ((index < index_backslash) && (index_backslash != std::string::npos)))
- {
- stream << filename << "_" << (i + 1);
- }
- else
- {
- stream << fn.substr(0, index) << "_" << (i + 1) << fn.substr(index);
- }
- writers.push_back(FileWriter::createWriter(stream.str(), convCToDSpec(specs), static_cast<Container>(format), static_cast<Codec>(codec), bitrate));
- }
-
- std::shared_ptr<IReader> reader = f->createQualityReader();
- reader->seek(start);
- FileWriter::writeReader(reader, writers, length, buffersize);
-
- return nullptr;
- }
- catch(Exception& e)
- {
- return e.getMessage().c_str();
- }
-}
-
-AUD_API AUD_Device* AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound* sequencer, float volume, float start)
-{
- try
- {
- ReadDevice* device = new ReadDevice(convCToDSpec(specs));
- device->setQuality(true);
- device->setVolume(volume);
-
- Sequence* f = dynamic_cast<Sequence*>(sequencer->get());
-
- f->setSpecs(convCToSpec(specs.specs));
-
- AUD_Handle handle = device->play(f->createQualityReader());
- if(handle.get())
- {
- handle->seek(start);
- }
-
- return new AUD_Device(device);
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API void AUD_initOnce()
-{
- PluginManager::loadPlugins();
- NULLDevice::registerPlugin();
-}
-
-AUD_API void AUD_exitOnce()
-{
-}
-
-AUD_API AUD_Device* AUD_init(const char* device, AUD_DeviceSpecs specs, int buffersize, const char* name)
-{
- try
- {
- std::shared_ptr<IDeviceFactory> factory = DeviceManager::getDeviceFactory(device);
-
- if(factory)
- {
- factory->setName(name);
- factory->setBufferSize(buffersize);
- factory->setSpecs(convCToDSpec(specs));
- auto device = factory->openDevice();
- DeviceManager::setDevice(device);
-
- return new AUD_Device(device);
- }
- }
- catch(Exception&)
- {
- }
- return nullptr;
-}
-
-AUD_API void AUD_exit(AUD_Device* device)
-{
- delete device;
- DeviceManager::releaseDevice();
-}
-
-
-AUD_API char** AUD_getDeviceNames()
-{
- std::vector<std::string> v_names = DeviceManager::getAvailableDeviceNames();
- char** names = (char**) malloc(sizeof(char*) * (v_names.size() + 1));
-
- for(int i = 0; i < v_names.size(); i++)
- {
- std::string name = v_names[i];
- names[i] = (char*) malloc(sizeof(char) * (name.length() + 1));
- strcpy(names[i], name.c_str());
- }
-
- names[v_names.size()] = nullptr;
-
- return names;
-}
diff --git a/extern/audaspace/bindings/C/AUD_Special.h b/extern/audaspace/bindings/C/AUD_Special.h
deleted file mode 100644
index ab79ae915a2..00000000000
--- a/extern/audaspace/bindings/C/AUD_Special.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Returns information about a sound.
- * \param sound The sound to get the info about.
- * \return The AUD_SoundInfo structure with filled in data.
- */
-extern AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound);
-
-/**
- * Reads a sound file into a newly created float buffer.
- * The sound is therefore bandpassed, rectified and resampled.
- */
-extern AUD_API float* AUD_readSoundBuffer(const char* filename, float low, float high,
- float attack, float release, float threshold,
- int accumulate, int additive, int square,
- float sthreshold, double samplerate,
- int* length);
-
-/**
- * Pauses a playing sound after a specific amount of time.
- * \param handle The handle to the sound.
- * \param seconds The time in seconds.
- * \return The silence handle.
- */
-extern AUD_API AUD_Handle* AUD_pauseAfter(AUD_Handle* handle, float seconds);
-
-/**
- * Reads a sound into a buffer for drawing at a specific sampling rate.
- * \param sound The sound to read.
- * \param buffer The buffer to write to. Must have a size of 3*4*length.
- * \param length How many samples to read from the sound.
- * \param samples_per_second How many samples to read per second of the sound.
- * \return How many samples really have been read. Always <= length.
- */
-extern AUD_API int AUD_readSound(AUD_Sound* sound, float* buffer, int length, int samples_per_second, short* interrupt);
-
-/**
- * Mixes a sound down into a file.
- * \param sound The sound scene to mix down.
- * \param start The start frame.
- * \param length The count of frames to write.
- * \param buffersize How many samples should be written at once.
- * \param filename The file to write to.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \return An error message or NULL in case of success.
- */
-extern AUD_API const char* AUD_mixdown(AUD_Sound* sound, unsigned int start, unsigned int length,
- unsigned int buffersize, const char* filename,
- AUD_DeviceSpecs specs, AUD_Container format,
- AUD_Codec codec, unsigned int bitrate);
-
-/**
- * Mixes a sound down into multiple files.
- * \param sound The sound scene to mix down.
- * \param start The start frame.
- * \param length The count of frames to write.
- * \param buffersize How many samples should be written at once.
- * \param filename The file to write to, the channel number and an underscore are added at the beginning.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \return An error message or NULL in case of success.
- */
-extern AUD_API const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length,
- unsigned int buffersize, const char* filename,
- AUD_DeviceSpecs specs, AUD_Container format,
- AUD_Codec codec, unsigned int bitrate);
-
-/**
- * Opens a read device and prepares it for mixdown of the sound scene.
- * \param specs Output audio specifications.
- * \param sequencer The sound scene to mix down.
- * \param volume The overall mixdown volume.
- * \param start The start time of the mixdown in the sound scene.
- * \return The read device for the mixdown.
- */
-extern AUD_API AUD_Device* AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound* sequencer, float volume, float start);
-
-/**
- * Initializes audio routines (FFMPEG/JACK if it is enabled).
- */
-extern AUD_API void AUD_initOnce();
-
-/**
- * Unitinitializes an audio routines.
- */
-extern AUD_API void AUD_exitOnce();
-
-/**
- * Initializes an audio device.
- * \param device The device type that should be used.
- * \param specs The audio specification to be used.
- * \param buffersize The buffersize for the device.
- * \return Whether the device has been initialized.
- */
-extern AUD_API AUD_Device* AUD_init(const char* device, AUD_DeviceSpecs specs, int buffersize, const char* name);
-
-/**
- * Unitinitializes an audio device.
- * \param device The device to free.
- */
-extern AUD_API void AUD_exit(AUD_Device* device);
-
-/**
- * Retrieves available devices. Note that all memory returned has to be freed!
- */
-extern AUD_API char** AUD_getDeviceNames();
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extern/audaspace/bindings/C/AUD_ThreadPool.cpp b/extern/audaspace/bindings/C/AUD_ThreadPool.cpp
deleted file mode 100644
index f22a904838b..00000000000
--- a/extern/audaspace/bindings/C/AUD_ThreadPool.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "Exception.h"
-
-#include <cassert>
-
-using namespace aud;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_ThreadPool.h"
-
-AUD_API AUD_ThreadPool* AUD_ThreadPool_create(int nThreads)
-{
- try
- {
- return new AUD_ThreadPool(new ThreadPool(nThreads));
- }
- catch(Exception&)
- {
- return nullptr;
- }
-}
-
-AUD_API void AUD_ThreadPool_free(AUD_ThreadPool* pool)
-{
- assert(pool);
- delete pool;
-} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_ThreadPool.h b/extern/audaspace/bindings/C/AUD_ThreadPool.h
deleted file mode 100644
index c1b2204a80a..00000000000
--- a/extern/audaspace/bindings/C/AUD_ThreadPool.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include "AUD_Types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
-* Creates a new ThreadPool object.
-* \param nThreads The number of threads of the pool.
-* \return The new ThreadPool object.
-*/
-extern AUD_API AUD_ThreadPool* AUD_ThreadPool_create(int nThreads);
-
-/**
-* Deletes a ThreadPool object.
-* \param threadPool The ThreadPool object to be deleted.
-*/
-extern AUD_API void AUD_ThreadPool_free(AUD_ThreadPool* threadPool);
-
-#ifdef __cplusplus
-}
-#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_Types.h b/extern/audaspace/bindings/C/AUD_Types.h
deleted file mode 100644
index 75e4ffae18c..00000000000
--- a/extern/audaspace/bindings/C/AUD_Types.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include "Audaspace.h"
-
-#ifdef __cplusplus
-using namespace aud;
-#endif
-
-#ifdef AUD_CAPI_IMPLEMENTATION
-#include "ISound.h"
-#include "devices/IHandle.h"
-#include "devices/IDevice.h"
-#include "sequence/SequenceEntry.h"
-#include "fx/PlaybackManager.h"
-#include "fx/DynamicMusic.h"
-#include "fx/Source.h"
-#include "util/ThreadPool.h"
-#ifdef WITH_CONVOLUTION
-#include "fx/ImpulseResponse.h"
-#include "fx/HRTF.h"
-#endif
-
-typedef std::shared_ptr<aud::ISound> AUD_Sound;
-typedef std::shared_ptr<aud::IHandle> AUD_Handle;
-typedef std::shared_ptr<aud::IDevice> AUD_Device;
-typedef std::shared_ptr<aud::SequenceEntry> AUD_SequenceEntry;
-typedef std::shared_ptr<aud::PlaybackManager> AUD_PlaybackManager;
-typedef std::shared_ptr<aud::DynamicMusic> AUD_DynamicMusic;
-typedef std::shared_ptr<aud::ThreadPool> AUD_ThreadPool;
-typedef std::shared_ptr<aud::Source> AUD_Source;
-#ifdef WITH_CONVOLUTION
-typedef std::shared_ptr<aud::ImpulseResponse> AUD_ImpulseResponse;
-typedef std::shared_ptr<aud::HRTF> AUD_HRTF;
-#endif
-#else
-typedef void AUD_Sound;
-typedef void AUD_Handle;
-typedef void AUD_Device;
-typedef void AUD_SequenceEntry;
-typedef void AUD_PlaybackManager;
-typedef void AUD_DynamicMusic;
-typedef void AUD_ThreadPool;
-typedef void AUD_Source;
-#ifdef WITH_CONVOLUTION
-typedef void AUD_ImpulseResponse;
-typedef void AUD_HRTF;
-#endif
-#endif
-
-/// Container formats for writers.
-typedef enum
-{
- AUD_CONTAINER_INVALID = 0,
- AUD_CONTAINER_AC3,
- AUD_CONTAINER_FLAC,
- AUD_CONTAINER_MATROSKA,
- AUD_CONTAINER_MP2,
- AUD_CONTAINER_MP3,
- AUD_CONTAINER_OGG,
- AUD_CONTAINER_WAV
-} AUD_Container;
-
-/// Audio codecs for writers.
-typedef enum
-{
- AUD_CODEC_INVALID = 0,
- AUD_CODEC_AAC,
- AUD_CODEC_AC3,
- AUD_CODEC_FLAC,
- AUD_CODEC_MP2,
- AUD_CODEC_MP3,
- AUD_CODEC_PCM,
- AUD_CODEC_VORBIS,
- AUD_CODEC_OPUS
-} AUD_Codec;
-
-/**
- * The format of a sample.
- * The last 4 bit save the byte count of the format.
- */
-typedef enum
-{
- AUD_FORMAT_INVALID = 0x00, /// Invalid sample format.
- AUD_FORMAT_U8 = 0x01, /// 1 byte unsigned byte.
- AUD_FORMAT_S16 = 0x12, /// 2 byte signed integer.
- AUD_FORMAT_S24 = 0x13, /// 3 byte signed integer.
- AUD_FORMAT_S32 = 0x14, /// 4 byte signed integer.
- AUD_FORMAT_FLOAT32 = 0x24, /// 4 byte float.
- AUD_FORMAT_FLOAT64 = 0x28 /// 8 byte float.
-} AUD_SampleFormat;
-
-/// The channel count.
-typedef enum
-{
- AUD_CHANNELS_INVALID = 0, /// Invalid channel count.
- AUD_CHANNELS_MONO = 1, /// Mono.
- AUD_CHANNELS_STEREO = 2, /// Stereo.
- AUD_CHANNELS_STEREO_LFE = 3, /// Stereo with LFE channel.
- AUD_CHANNELS_SURROUND4 = 4, /// 4 channel surround sound.
- AUD_CHANNELS_SURROUND5 = 5, /// 5 channel surround sound.
- AUD_CHANNELS_SURROUND51 = 6, /// 5.1 surround sound.
- AUD_CHANNELS_SURROUND61 = 7, /// 6.1 surround sound.
- AUD_CHANNELS_SURROUND71 = 8 /// 7.1 surround sound.
-} AUD_Channels;
-
-/**
- * The sample rate tells how many samples are played back within one second.
- * Some exotic formats may use other sample rates than provided here.
- */
-typedef enum
-{
- AUD_RATE_INVALID = 0, /// Invalid sample rate.
- AUD_RATE_8000 = 8000, /// 8000 Hz.
- AUD_RATE_16000 = 16000, /// 16000 Hz.
- AUD_RATE_11025 = 11025, /// 11025 Hz.
- AUD_RATE_22050 = 22050, /// 22050 Hz.
- AUD_RATE_32000 = 32000, /// 32000 Hz.
- AUD_RATE_44100 = 44100, /// 44100 Hz.
- AUD_RATE_48000 = 48000, /// 48000 Hz.
- AUD_RATE_88200 = 88200, /// 88200 Hz.
- AUD_RATE_96000 = 96000, /// 96000 Hz.
- AUD_RATE_192000 = 192000 /// 192000 Hz.
-} AUD_DefaultSampleRate;
-
-/// Sample rate type.
-typedef double AUD_SampleRate;
-
-/// Specification of a sound source.
-typedef struct
-{
- /// Sample rate in Hz.
- AUD_SampleRate rate;
-
- /// Channel count.
- AUD_Channels channels;
-} AUD_Specs;
-
-/// Specification of a sound device.
-typedef struct
-{
- /// Sample format.
- AUD_SampleFormat format;
-
- union
- {
- struct
- {
- /// Sample rate in Hz.
- AUD_SampleRate rate;
-
- /// Channel count.
- AUD_Channels channels;
- };
- AUD_Specs specs;
- };
-} AUD_DeviceSpecs;
-
-/// Sound information structure.
-typedef struct
-{
- AUD_Specs specs;
- float length;
-} AUD_SoundInfo;
diff --git a/extern/audaspace/bindings/doc/conf.py.in b/extern/audaspace/bindings/doc/conf.py.in
deleted file mode 100644
index e08efbcf7f6..00000000000
--- a/extern/audaspace/bindings/doc/conf.py.in
+++ /dev/null
@@ -1,261 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-#
-# audaspace documentation build configuration file, created by
-# sphinx-quickstart on Tue Sep 9 01:48:48 2014.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys
-import os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- 'sphinx.ext.autodoc',
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = []
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = 'audaspace'
-copyright = '2009-2015, Jörg Müller'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '@AUDASPACE_VERSION@'
-# The full version, including alpha/beta/rc tags.
-release = '@AUDASPACE_LONG_VERSION@'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = []
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-#keep_warnings = False
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = 'alabaster'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = []
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'audaspacedoc'
-
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-#'papersize': 'letterpaper',
-
-# The font size ('10pt', '11pt' or '12pt').
-#'pointsize': '10pt',
-
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- ('index', 'audaspace.tex', 'audaspace Documentation',
- 'Jörg Müller', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- ('index', 'audaspace', 'audaspace Documentation',
- ['Jörg Müller'], 1)
-]
-
-# If true, show URL addresses after external links.
-#man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- ('index', 'audaspace', 'audaspace Documentation',
- 'Jörg Müller', 'audaspace', 'One line description of project.',
- 'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
-
-# If false, no module index is generated.
-#texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#texinfo_no_detailmenu = False
diff --git a/extern/audaspace/bindings/doc/device.rst b/extern/audaspace/bindings/doc/device.rst
deleted file mode 100644
index fd6b334022c..00000000000
--- a/extern/audaspace/bindings/doc/device.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Device
-======
-
-.. currentmodule:: aud
-.. autoclass:: Device
- :members:
-
diff --git a/extern/audaspace/bindings/doc/handle.rst b/extern/audaspace/bindings/doc/handle.rst
deleted file mode 100644
index aceedbca3a6..00000000000
--- a/extern/audaspace/bindings/doc/handle.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Handle
-======
-
-.. currentmodule:: aud
-.. autoclass:: Handle
- :members:
-
diff --git a/extern/audaspace/bindings/doc/index.rst b/extern/audaspace/bindings/doc/index.rst
deleted file mode 100644
index b8a26822949..00000000000
--- a/extern/audaspace/bindings/doc/index.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-.. audaspace documentation master file, created by
- sphinx-quickstart on Tue Sep 9 01:48:48 2014.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
-
-Welcome to audaspace's documentation!
-=====================================
-
-.. automodule:: aud
-
-This documentation is valid for both the Python and C bindings of audaspace. If you are looking for installation instructions check the `C++ API documentation <../index.html>`_. As C is not an object oriented language everything is accessible via functions where the first paramter is always the object. For methods these are named as ``AUD_ClassName_method()`` and properties are accessed via ``AUD_ClassName_property_get/set()``. Python users simply ``import aud`` to access the library.
-
-.. toctree::
- :maxdepth: 2
-
- tutorials
-
-Classes:
-
-.. toctree::
- :maxdepth: 2
-
- device
- sound
- handle
- sequence
- sequence_entry
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-
diff --git a/extern/audaspace/bindings/doc/sequence.rst b/extern/audaspace/bindings/doc/sequence.rst
deleted file mode 100644
index 16fcb00f4dc..00000000000
--- a/extern/audaspace/bindings/doc/sequence.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Sequence
-========
-
-.. currentmodule:: aud
-.. autoclass:: Sequence
- :members:
-
diff --git a/extern/audaspace/bindings/doc/sequence_entry.rst b/extern/audaspace/bindings/doc/sequence_entry.rst
deleted file mode 100644
index 0a3d83388e9..00000000000
--- a/extern/audaspace/bindings/doc/sequence_entry.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Sequence Entry
-==============
-
-.. currentmodule:: aud
-.. autoclass:: SequenceEntry
- :members:
-
diff --git a/extern/audaspace/bindings/doc/sound.rst b/extern/audaspace/bindings/doc/sound.rst
deleted file mode 100644
index 2f14721cf3a..00000000000
--- a/extern/audaspace/bindings/doc/sound.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Sound
-=====
-
-.. currentmodule:: aud
-.. autoclass:: Sound
- :members:
-
diff --git a/extern/audaspace/bindings/doc/tutorials.rst b/extern/audaspace/bindings/doc/tutorials.rst
deleted file mode 100644
index 55f51d9ee2f..00000000000
--- a/extern/audaspace/bindings/doc/tutorials.rst
+++ /dev/null
@@ -1,166 +0,0 @@
-Tutorials
-=========
-
-Introduction
-------------
-
-The C and Python binding for audaspace were designed with simplicity in mind. This means however that to use the full capabilities of audaspace, there is no way around the C++ library.
-
-Simple Demo
------------
-
-The **simple.py** example program contains all the basic building blocks for an application using audaspace. These building blocks are basically the classes :class:`aud.Device`, :class:`aud.Sound` and :class:`aud.Handle`.
-
-We start with importing :mod:`aud` and :mod:`time` as the modules we need for our simple example.
-
-.. code-block:: python
-
- #!/usr/bin/python
- import aud, time
-
-The first step now is to open an output device and this can simply be done by allocating a :class:`aud.Device` object.
-
-.. code-block:: python
-
- device = aud.Device()
-
-To create a sound we can choose to load one from a :func:`aud.Sound.file`, or we use one of our signal generators. We decide to do the latter and create a :func:`aud.Sound.sine` signal with a frequency of 440 Hz.
-
-.. code-block:: python
-
- sine = aud.Sound.sine(440)
-
-.. note:: At this point nothing is playing back yet, :class:`aud.Sound` objects are just descriptions of sounds.
-
-However instead of a sine wave, we would like to have a square wave to produce a more retro gaming sound. We could of course use the :func:`aud.Sound.square` generator instead of sine, but we want to show how to apply effects, so we apply a :func:`aud.Sound.threshold` which makes a square wave out of our sine too, even if less efficient than directly generating the square wave.
-
-.. code-block:: python
-
- square = sine.threshold()
-
-.. note:: The :class:`aud.Sound` class offers generator and effect functions.
-
-The we can play our sound by calling the :func:`aud.Device.play` method of our device. This method returns a :class:`aud.Handle` which is used to control the playback of the sound.
-
-.. code-block:: python
-
- handle = device.play(square)
-
-Now if we do nothing else anymore the application will quit immediately, so we won't hear much of our square wave, so we decide to wait for three seconds before quitting the application by calling :func:`time.sleep`.
-
-.. code-block:: python
-
- time.sleep(3)
-
-Audioplayer
------------
-
-Now that we know the basics of audaspace, we can build our own music player easily by just slightly changing the previous program. The **player.py** example does exactly that, let's have a short look at the differences:
-
-Instead of creating a sine signal and thresholding it, we in fact use the :func:`aud.Sound.file` function to load a sound from a file. The filename we pass is the first command line argument our application got.
-
-.. code-block:: python
-
- sound = aud.Sound.file(sys.argv[1])
-
-When the sound gets played back we now want to wait until the whole file has been played, so we use the :data:`aud.Handle.status` property to determine whether the sound finished playing.
-
-.. code-block:: python
-
- while handle.status:
- time.sleep(0.1)
-
-We don't make any error checks if the user actually added a command line argument. As an exercise you could extend this program to play any number of command line supplied files in sequence.
-
-Siren
------
-
-Let's get a little bit more complex. The **siren.py** example plays a generated siren sound that circles around your head. Depending on how many speakers you have and if the output device used supports the speaker setup, you will hear this effect. With stereo speakers you should at least hear some left-right-panning.
-
-We start off again with importing the modules we need and we also define some properties of our siren sound. We want it to consist of two sine sounds with different frequencies. We define a length for the sine sounds and how long a fade in/out should take. We also know already how to open a device.
-
-.. code-block:: python
-
- #!/usr/bin/python
- import aud, math, time
- length = 0.5
- fadelength = 0.05
-
- device = aud.Device()
-
-The next thing to do is to define our sine waves and apply all the required effects. As each of the effect functions returns the corresponding sound, we can easily chain those calls together.
-
-.. code-block:: python
-
- high = aud.Sound.sine(880).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length)
- low = aud.Sound.sine(700).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length).volume(0.6)
-
-The next step is to connect the two sines, which we do using the :func:`aud.Sound.join` function.
-
-.. code-block:: python
-
- sound = high.join(low)
-
-The generated siren sound can now be played back and what we also do is to loop it. Therefore we set the :data:`aud.Handle.loop_count` to a negative value to loop forever.
-
-.. code-block:: python
-
- handle = device.play(sound)
- handle.loop_count = -1
-
-Now we use some timing code to make sure our demo runs for 10 seconds, but we also use the time to update the location of our playing sound, with the :data:`aud.Handle.location` property, which is a three dimensional vector. The trigonometic calculation based on the running time of the program keeps the sound on the XZ plane letting it follow a circle around us.
-
-.. code-block:: python
-
- start = time.time()
-
- while time.time() - start < 10:
- angle = time.time() - start
-
- handle.location = [math.sin(angle), 0, -math.cos(angle)]
-
-As an exercise you could try to let the sound come from the far left and go to the far right and a little bit in front of you within the 10 second runtime of the program. With this change you should be able to hear the volume of the sound change, depending on how far it is away from you. Updating the :data:`aud.Handle.velocity` property properly also enables the doppler effect. Compare your solution to the **siren2.py** demo.
-
-Tetris
-------
-
-The **tetris.py** demo application shows an even more complex application which generates retro tetris music. Looking at the source code there should be nothing new here, again the functions used from audaspace are the same as in the previous examples. In the :func:`parseNote` function all single notes get joined which leads to a very long chain of sounds. If you think of :func:`aud.Sound.join` as a function that creates a binary tree with the two joined sounds as leaves then the :func:`parseNote` function creates a very unbalanced tree.
-
-Insted we could rewrite the code to use two other classes: :class:`aud.Sequence` and :class:`aud.SequenceEntry` to sequence the notes. The **tetris2.py** application does exactly that. Before the while loop we add a variable that stores the current position in the score and create a new :class:`aud.Sequence` object.
-
-.. code-block:: python
-
- position = 0
- sequence = aud.Sequence()
-
-Then in the loop we can create the note simply by chaining the :func:`aud.Sound.square` generator and :func:`aud.Sound.fadein` and :func:`aud.Sound.fadeout` effects.
-
-.. code-block:: python
-
- note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength)
-
-Now instead of using :func:`aud.Sound.limit` and :func:`aud.Sound.join` we simply add the sound to the sequence.
-
-.. code-block:: python
-
- entry = sequence.add(note, position, position + length, 0)
-
-The entry returned from the :func:`aud.Sequence.add` function is an object of the :class:`aud.SequenceEntry` class. We can use this entry to mute the note in case it's actually a pause.
-
-.. code-block:: python
-
- if char == 'p':
- entry.muted = True
-
-Lastly we have to update our position variable.
-
-.. code-block:: python
-
- position += length
-
-Now in **tetris2.py** we used the :data:`aud.SequenceEntry.muted` property to show how the :class:`aud.SequenceEntry` class can be used, but it would actually be smarter to not even create a note for pauses and just skip them. You can try to implement this as an exercise and then check out the solution in **tetris3.py**.
-
-Conclusion
-----------
-
-We introduced all five currently available classes in the audaspace Python API. Of course all classes offer a lot more functions than have been used in these demo applications, check out the specific class documentation for more details.
diff --git a/extern/audaspace/bindings/python/PyAPI.cpp b/extern/audaspace/bindings/python/PyAPI.cpp
deleted file mode 100644
index cceadbc0992..00000000000
--- a/extern/audaspace/bindings/python/PyAPI.cpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/*******************************************************************************
- * 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 "PyAPI.h"
-#include "PySound.h"
-#include "PyHandle.h"
-#include "PyDevice.h"
-#include "PySequenceEntry.h"
-#include "PySequence.h"
-#include "PyPlaybackManager.h"
-#include "PyDynamicMusic.h"
-#include "PyThreadPool.h"
-#include "PySource.h"
-
-#ifdef WITH_CONVOLUTION
-#include "PyImpulseResponse.h"
-#include "PyHRTF.h"
-#endif
-
-#include "respec/Specification.h"
-#include "devices/IHandle.h"
-#include "devices/I3DDevice.h"
-#include "file/IWriter.h"
-#include "plugin/PluginManager.h"
-#include "sequence/AnimateableProperty.h"
-#include "ISound.h"
-
-#include <memory>
-
-#include <structmember.h>
-
-using namespace aud;
-
-// ====================================================================
-
-#define PY_MODULE_ADD_CONSTANT(module, name) PyModule_AddIntConstant(module, #name, name)
-
-// ====================================================================
-
-extern PyObject* AUDError;
-PyObject* AUDError = nullptr;
-
-// ====================================================================
-
-PyDoc_STRVAR(M_aud_doc,
- "Audaspace (pronounced \"outer space\") is a high level audio library.");
-
-static struct PyModuleDef audmodule = {
- PyModuleDef_HEAD_INIT,
- "aud", /* name of module */
- M_aud_doc, /* module documentation */
- -1, /* size of per-interpreter state of the module,
- or -1 if the module keeps state in global variables. */
- nullptr, nullptr, nullptr, nullptr, nullptr
-};
-
-PyMODINIT_FUNC
-PyInit_aud()
-{
- PyObject* module;
-
- PluginManager::loadPlugins();
-
- if(!initializeSound())
- return nullptr;
-
- if(!initializeDevice())
- return nullptr;
-
- if(!initializeHandle())
- return nullptr;
-
- if(!initializeSequenceEntry())
- return nullptr;
-
- if(!initializeSequence())
- return nullptr;
-
- if(!initializeDynamicMusic())
- return nullptr;
-
- if(!initializePlaybackManager())
- return nullptr;
-
- if(!initializeThreadPool())
- return nullptr;
-
- if(!initializeSource())
- return nullptr;
-
-#ifdef WITH_CONVOLUTION
- if(!initializeImpulseResponse())
- return nullptr;
-
- if(!initializeHRTF())
- return nullptr;
-#endif
-
- module = PyModule_Create(&audmodule);
- if(module == nullptr)
- return nullptr;
-
- addSoundToModule(module);
- addHandleToModule(module);
- addDeviceToModule(module);
- addSequenceEntryToModule(module);
- addSequenceToModule(module);
- addDynamicMusicToModule(module);
- addPlaybackManagerToModule(module);
- addThreadPoolToModule(module);
- addSourceToModule(module);
-
-#ifdef WITH_CONVOLUTION
- addImpulseResponseToModule(module);
- addHRTFToModule(module);
-#endif
-
- AUDError = PyErr_NewException("aud.error", nullptr, nullptr);
- Py_INCREF(AUDError);
- PyModule_AddObject(module, "error", AUDError);
-
- // animatable property type constants
- PY_MODULE_ADD_CONSTANT(module, AP_VOLUME);
- PY_MODULE_ADD_CONSTANT(module, AP_PANNING);
- PY_MODULE_ADD_CONSTANT(module, AP_PITCH);
- PY_MODULE_ADD_CONSTANT(module, AP_LOCATION);
- PY_MODULE_ADD_CONSTANT(module, AP_ORIENTATION);
- // channels constants
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_INVALID);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_MONO);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_STEREO);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_STEREO_LFE);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND4);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND5);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND51);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND61);
- PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND71);
- // codec constants
- PY_MODULE_ADD_CONSTANT(module, CODEC_INVALID);
- PY_MODULE_ADD_CONSTANT(module, CODEC_AAC);
- PY_MODULE_ADD_CONSTANT(module, CODEC_AC3);
- PY_MODULE_ADD_CONSTANT(module, CODEC_FLAC);
- PY_MODULE_ADD_CONSTANT(module, CODEC_MP2);
- PY_MODULE_ADD_CONSTANT(module, CODEC_MP3);
- PY_MODULE_ADD_CONSTANT(module, CODEC_PCM);
- PY_MODULE_ADD_CONSTANT(module, CODEC_VORBIS);
- PY_MODULE_ADD_CONSTANT(module, CODEC_OPUS);
- // container constants
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_INVALID);
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_AC3);
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_FLAC);
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_MATROSKA);
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_MP2);
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_MP3);
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_OGG);
- PY_MODULE_ADD_CONSTANT(module, CONTAINER_WAV);
- // distance model constants
- PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_EXPONENT);
- PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_EXPONENT_CLAMPED);
- PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVERSE);
- PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVERSE_CLAMPED);
- PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_LINEAR);
- PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_LINEAR_CLAMPED);
- PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVALID);
- // format constants
- PY_MODULE_ADD_CONSTANT(module, FORMAT_INVALID);
- PY_MODULE_ADD_CONSTANT(module, FORMAT_FLOAT32);
- PY_MODULE_ADD_CONSTANT(module, FORMAT_FLOAT64);
- PY_MODULE_ADD_CONSTANT(module, FORMAT_INVALID);
- PY_MODULE_ADD_CONSTANT(module, FORMAT_S16);
- PY_MODULE_ADD_CONSTANT(module, FORMAT_S24);
- PY_MODULE_ADD_CONSTANT(module, FORMAT_S32);
- PY_MODULE_ADD_CONSTANT(module, FORMAT_U8);
- // rate constants
- PY_MODULE_ADD_CONSTANT(module, RATE_INVALID);
- PY_MODULE_ADD_CONSTANT(module, RATE_8000);
- PY_MODULE_ADD_CONSTANT(module, RATE_16000);
- PY_MODULE_ADD_CONSTANT(module, RATE_11025);
- PY_MODULE_ADD_CONSTANT(module, RATE_22050);
- PY_MODULE_ADD_CONSTANT(module, RATE_32000);
- PY_MODULE_ADD_CONSTANT(module, RATE_44100);
- PY_MODULE_ADD_CONSTANT(module, RATE_48000);
- PY_MODULE_ADD_CONSTANT(module, RATE_88200);
- PY_MODULE_ADD_CONSTANT(module, RATE_96000);
- PY_MODULE_ADD_CONSTANT(module, RATE_192000);
- // status constants
- PY_MODULE_ADD_CONSTANT(module, STATUS_INVALID);
- PY_MODULE_ADD_CONSTANT(module, STATUS_PAUSED);
- PY_MODULE_ADD_CONSTANT(module, STATUS_PLAYING);
- PY_MODULE_ADD_CONSTANT(module, STATUS_STOPPED);
-
- return module;
-}
-
-AUD_API PyObject* AUD_getPythonSound(void* sound)
-{
- if(sound)
- {
- Sound* object = (Sound*) Sound_empty();
- if(object)
- {
- object->sound = new std::shared_ptr<ISound>(*reinterpret_cast<std::shared_ptr<ISound>*>(sound));
- return (PyObject *) object;
- }
- }
-
- return nullptr;
-}
-
-AUD_API void* AUD_getSoundFromPython(PyObject* object)
-{
- Sound* sound = checkSound(object);
-
- if(!sound)
- return nullptr;
-
- return new std::shared_ptr<ISound>(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound));
-}
diff --git a/extern/audaspace/bindings/python/PyAPI.h b/extern/audaspace/bindings/python/PyAPI.h
deleted file mode 100644
index a413b4813d6..00000000000
--- a/extern/audaspace/bindings/python/PyAPI.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-PyMODINIT_FUNC
-PyInit_aud();
-
-/**
- * Retrieves the python factory of a sound.
- * \param sound The sound factory.
- * \return The python factory.
- */
-extern AUD_API PyObject* AUD_getPythonSound(void* sound);
-
-/**
- * Retrieves the sound factory of a python factory.
- * \param sound The python factory.
- * \return The sound factory.
- */
-extern AUD_API void* AUD_getSoundFromPython(PyObject* object);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/extern/audaspace/bindings/python/PyDevice.cpp b/extern/audaspace/bindings/python/PyDevice.cpp
deleted file mode 100644
index a6beef57d83..00000000000
--- a/extern/audaspace/bindings/python/PyDevice.cpp
+++ /dev/null
@@ -1,785 +0,0 @@
-/*******************************************************************************
- * 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 "PyDevice.h"
-
-#include "PySound.h"
-#include "PyHandle.h"
-
-#include "Exception.h"
-#include "devices/IDevice.h"
-#include "devices/I3DDevice.h"
-#include "devices/DeviceManager.h"
-#include "devices/IDeviceFactory.h"
-
-#include <structmember.h>
-
-using namespace aud;
-
-extern PyObject* AUDError;
-static const char* device_not_3d_error = "Device is not a 3D device!";
-
-// ====================================================================
-
-static void
-Device_dealloc(Device* self)
-{
- if(self->device)
- delete reinterpret_cast<std::shared_ptr<IDevice>*>(self->device);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyObject *
-Device_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- Device* self;
-
- static const char* kwlist[] = {"type", "rate", "channels", "format", "buffer_size", "name", nullptr};
- const char* device = nullptr;
- double rate = RATE_48000;
- int channels = CHANNELS_STEREO;
- int format = FORMAT_FLOAT32;
- int buffersize = AUD_DEFAULT_BUFFER_SIZE;
- const char* name = "";
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "|sdiiis:Device", const_cast<char**>(kwlist),
- &device, &rate, &channels, &format, &buffersize, &name))
- return nullptr;
-
- if(buffersize < 128)
- {
- PyErr_SetString(PyExc_ValueError, "buffer_size must be at least 128!");
- return nullptr;
- }
-
- self = (Device*)type->tp_alloc(type, 0);
-
- if(self != nullptr)
- {
- DeviceSpecs specs;
- specs.channels = (Channels)channels;
- specs.format = (SampleFormat)format;
- specs.rate = (SampleRate)rate;
-
- self->device = nullptr;
-
- try
- {
- if(!device)
- {
- auto dev = DeviceManager::getDevice();
- if(!dev)
- {
- DeviceManager::openDefaultDevice();
- dev = DeviceManager::getDevice();
- }
- self->device = new std::shared_ptr<IDevice>(dev);
- }
- else
- {
- std::shared_ptr<IDeviceFactory> factory;
- if(!*device)
- factory = DeviceManager::getDefaultDeviceFactory();
- else
- factory = DeviceManager::getDeviceFactory(device);
-
- if(factory)
- {
- factory->setName(name);
- factory->setSpecs(specs);
- factory->setBufferSize(buffersize);
- self->device = new std::shared_ptr<IDevice>(factory->openDevice());
- }
- }
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-
- if(!self->device)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, "Unsupported device type!");
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Device_lock_doc,
- "lock()\n\n"
- "Locks the device so that it's guaranteed, that no samples are "
- "read from the streams until :meth:`unlock` is called.\n"
- "This is useful if you want to do start/stop/pause/resume some "
- "sounds at the same time.\n\n"
- ".. note:: The device has to be unlocked as often as locked to be "
- "able to continue playback.\n\n"
- ".. warning:: Make sure the time between locking and unlocking is "
- "as short as possible to avoid clicks.");
-
-static PyObject *
-Device_lock(Device* self)
-{
- try
- {
- (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->lock();
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_play_doc,
- "play(sound, keep=False)\n\n"
- "Plays a sound.\n\n"
- ":arg sound: The sound to play.\n"
- ":type sound: :class:`Sound`\n"
- ":arg keep: See :attr:`Handle.keep`.\n"
- ":type keep: bool\n"
- ":return: The playback handle with which playback can be "
- "controlled with.\n"
- ":rtype: :class:`Handle`");
-
-static PyObject *
-Device_play(Device* self, PyObject* args, PyObject* kwds)
-{
- PyObject* object;
- PyObject* keepo = nullptr;
-
- bool keep = false;
-
- static const char* kwlist[] = {"sound", "keep", nullptr};
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:play", const_cast<char**>(kwlist), &object, &keepo))
- return nullptr;
-
- Sound* sound = checkSound(object);
-
- if(!sound)
- return nullptr;
-
- if(keepo != nullptr)
- {
- if(!PyBool_Check(keepo))
- {
- PyErr_SetString(PyExc_TypeError, "keep is not a boolean!");
- return nullptr;
- }
-
- keep = keepo == Py_True;
- }
-
- Handle* handle;
-
- handle = (Handle*)Handle_empty();
- if(handle != nullptr)
- {
- try
- {
- handle->handle = new std::shared_ptr<IHandle>((*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->play(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound), keep));
- }
- catch(Exception& e)
- {
- Py_DECREF(handle);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)handle;
-}
-
-PyDoc_STRVAR(M_aud_Device_stopAll_doc,
- "stopAll()\n\n"
- "Stops all playing and paused sounds.");
-
-static PyObject *
-Device_stopAll(Device* self)
-{
- try
- {
- (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->stopAll();
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_unlock_doc,
- "unlock()\n\n"
- "Unlocks the device after a lock call, see :meth:`lock` for "
- "details.");
-
-static PyObject *
-Device_unlock(Device* self)
-{
- try
- {
- (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->unlock();
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyMethodDef Device_methods[] = {
- {"lock", (PyCFunction)Device_lock, METH_NOARGS,
- M_aud_Device_lock_doc
- },
- {"play", (PyCFunction)Device_play, METH_VARARGS | METH_KEYWORDS,
- M_aud_Device_play_doc
- },
- {"stopAll", (PyCFunction)Device_stopAll, METH_NOARGS,
- M_aud_Device_stopAll_doc
- },
- {"unlock", (PyCFunction)Device_unlock, METH_NOARGS,
- M_aud_Device_unlock_doc
- },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Device_channels_doc,
- "The channel count of the device.");
-
-static PyObject *
-Device_get_channels(Device* self, void* nothing)
-{
- try
- {
- DeviceSpecs specs = (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getSpecs();
- return Py_BuildValue("i", specs.channels);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_distance_model_doc,
- "The distance model of the device.\n\n"
- ".. seealso:: http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.htm#_Toc199835864");
-
-static PyObject *
-Device_get_distance_model(Device* self, void* nothing)
-{
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- return Py_BuildValue("i", int(device->getDistanceModel()));
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Device_set_distance_model(Device* self, PyObject* args, void* nothing)
-{
- int model;
-
- if(!PyArg_Parse(args, "i:distance_model", &model))
- return -1;
-
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- device->setDistanceModel(DistanceModel(model));
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_doppler_factor_doc,
- "The doppler factor of the device.\n"
- "This factor is a scaling factor for the velocity vectors in "
- "doppler calculation. So a value bigger than 1 will exaggerate "
- "the effect as it raises the velocity.");
-
-static PyObject *
-Device_get_doppler_factor(Device* self, void* nothing)
-{
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- return Py_BuildValue("f", device->getDopplerFactor());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Device_set_doppler_factor(Device* self, PyObject* args, void* nothing)
-{
- float factor;
-
- if(!PyArg_Parse(args, "f:doppler_factor", &factor))
- return -1;
-
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- device->setDopplerFactor(factor);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_format_doc,
- "The native sample format of the device.");
-
-static PyObject *
-Device_get_format(Device* self, void* nothing)
-{
- try
- {
- DeviceSpecs specs = (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getSpecs();
- return Py_BuildValue("i", specs.format);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_listener_location_doc,
- "The listeners's location in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Device_get_listener_location(Device* self, void* nothing)
-{
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- Vector3 v = device->getListenerLocation();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-Device_set_listener_location(Device* self, PyObject* args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):listener_location", &x, &y, &z))
- return -1;
-
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- Vector3 location(x, y, z);
- device->setListenerLocation(location);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_listener_orientation_doc,
- "The listener's orientation in 3D space as quaternion, a 4 float tuple.");
-
-static PyObject *
-Device_get_listener_orientation(Device* self, void* nothing)
-{
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- Quaternion o = device->getListenerOrientation();
- return Py_BuildValue("(ffff)", o.w(), o.x(), o.y(), o.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-Device_set_listener_orientation(Device* self, PyObject* args, void* nothing)
-{
- float w, x, y, z;
-
- if(!PyArg_Parse(args, "(ffff):listener_orientation", &w, &x, &y, &z))
- return -1;
-
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- Quaternion orientation(w, x, y, z);
- device->setListenerOrientation(orientation);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_listener_velocity_doc,
- "The listener's velocity in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Device_get_listener_velocity(Device* self, void* nothing)
-{
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- Vector3 v = device->getListenerVelocity();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-Device_set_listener_velocity(Device* self, PyObject* args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):listener_velocity", &x, &y, &z))
- return -1;
-
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- Vector3 velocity(x, y, z);
- device->setListenerVelocity(velocity);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_rate_doc,
- "The sampling rate of the device in Hz.");
-
-static PyObject *
-Device_get_rate(Device* self, void* nothing)
-{
- try
- {
- DeviceSpecs specs = (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getSpecs();
- return Py_BuildValue("d", specs.rate);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_speed_of_sound_doc,
- "The speed of sound of the device.\n"
- "The speed of sound in air is typically 343.3 m/s.");
-
-static PyObject *
-Device_get_speed_of_sound(Device* self, void* nothing)
-{
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- return Py_BuildValue("f", device->getSpeedOfSound());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Device_set_speed_of_sound(Device* self, PyObject* args, void* nothing)
-{
- float speed;
-
- if(!PyArg_Parse(args, "f:speed_of_sound", &speed))
- return -1;
-
- try
- {
- I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
- if(device)
- {
- device->setSpeedOfSound(speed);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_volume_doc,
- "The overall volume of the device.");
-
-static PyObject *
-Device_get_volume(Device* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getVolume());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Device_set_volume(Device* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume", &volume))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->setVolume(volume);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return -1;
- }
-}
-
-static PyGetSetDef Device_properties[] = {
- {(char*)"channels", (getter)Device_get_channels, nullptr,
- M_aud_Device_channels_doc, nullptr },
- {(char*)"distance_model", (getter)Device_get_distance_model, (setter)Device_set_distance_model,
- M_aud_Device_distance_model_doc, nullptr },
- {(char*)"doppler_factor", (getter)Device_get_doppler_factor, (setter)Device_set_doppler_factor,
- M_aud_Device_doppler_factor_doc, nullptr },
- {(char*)"format", (getter)Device_get_format, nullptr,
- M_aud_Device_format_doc, nullptr },
- {(char*)"listener_location", (getter)Device_get_listener_location, (setter)Device_set_listener_location,
- M_aud_Device_listener_location_doc, nullptr },
- {(char*)"listener_orientation", (getter)Device_get_listener_orientation, (setter)Device_set_listener_orientation,
- M_aud_Device_listener_orientation_doc, nullptr },
- {(char*)"listener_velocity", (getter)Device_get_listener_velocity, (setter)Device_set_listener_velocity,
- M_aud_Device_listener_velocity_doc, nullptr },
- {(char*)"rate", (getter)Device_get_rate, nullptr,
- M_aud_Device_rate_doc, nullptr },
- {(char*)"speed_of_sound", (getter)Device_get_speed_of_sound, (setter)Device_set_speed_of_sound,
- M_aud_Device_speed_of_sound_doc, nullptr },
- {(char*)"volume", (getter)Device_get_volume, (setter)Device_set_volume,
- M_aud_Device_volume_doc, nullptr },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Device_doc,
- "Device objects represent an audio output backend like OpenAL or "
- "SDL, but might also represent a file output or RAM buffer "
- "output.");
-
-static PyTypeObject DeviceType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.Device", /* tp_name */
- sizeof(Device), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Device_dealloc,/* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Device_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Device_methods, /* tp_methods */
- 0, /* tp_members */
- Device_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- Device_new, /* tp_new */
-};
-
-AUD_API PyObject* Device_empty()
-{
- return DeviceType.tp_alloc(&DeviceType, 0);
-}
-
-
-AUD_API Device* checkDevice(PyObject* device)
-{
- if(!PyObject_TypeCheck(device, &DeviceType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Device!");
- return nullptr;
- }
-
- return (Device*)device;
-}
-
-
-bool initializeDevice()
-{
- return PyType_Ready(&DeviceType) >= 0;
-}
-
-
-void addDeviceToModule(PyObject* module)
-{
- Py_INCREF(&DeviceType);
- PyModule_AddObject(module, "Device", (PyObject *)&DeviceType);
-}
diff --git a/extern/audaspace/bindings/python/PyDevice.h b/extern/audaspace/bindings/python/PyDevice.h
deleted file mode 100644
index 610b5b4cd23..00000000000
--- a/extern/audaspace/bindings/python/PyDevice.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_IDevice;
-
-typedef struct {
- PyObject_HEAD
- Reference_IDevice* device;
-} Device;
-
-extern AUD_API PyObject* Device_empty();
-extern AUD_API Device* checkDevice(PyObject* device);
-
-bool initializeDevice();
-void addDeviceToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PyDynamicMusic.cpp b/extern/audaspace/bindings/python/PyDynamicMusic.cpp
deleted file mode 100644
index d49f73737c2..00000000000
--- a/extern/audaspace/bindings/python/PyDynamicMusic.cpp
+++ /dev/null
@@ -1,467 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 "PyDynamicMusic.h"
-#include "PySound.h"
-#include "PyHandle.h"
-#include "PyDevice.h"
-
-#include "Exception.h"
-#include "fx/DynamicMusic.h"
-
-extern PyObject* AUDError;
-
-static PyObject *
-DynamicMusic_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- DynamicMusicP* self = (DynamicMusicP*)type->tp_alloc(type, 0);
-
- if(self != nullptr)
- {
- PyObject* object;
- if(!PyArg_ParseTuple(args, "O:device", &object))
- return nullptr;
- Device* device = checkDevice(object);
-
- try
- {
- self->dynamicMusic = new std::shared_ptr<aud::DynamicMusic>(new aud::DynamicMusic(*reinterpret_cast<std::shared_ptr<aud::IDevice>*>(device->device)));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-static void
-DynamicMusic_dealloc(DynamicMusicP* self)
-{
- if(self->dynamicMusic)
- delete reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_addScene_doc,
- "addScene(scene)\n\n"
- "Adds a new scene.\n\n"
- ":arg scene: The scene sound.\n"
- ":type scene: :class:`Sound`\n"
- ":return: The new scene id.\n"
- ":rtype: int");
-
-static PyObject *
-DynamicMusic_addScene(DynamicMusicP* self, PyObject* args)
-{
- PyObject* object;
- if(!PyArg_Parse(args, "O:sound", &object))
- return nullptr;
-
- Sound* sound = checkSound(object);
- if(!sound)
- return nullptr;
-
- try
- {
- return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->addScene(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound)));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_addTransition_doc,
- "addTransition(ini, end, transition)\n\n"
- "Adds a new scene.\n\n"
- ":arg ini: the initial scene foor the transition.\n"
- ":type ini: int\n"
- ":arg end: The final scene for the transition.\n"
- ":type end: int\n"
- ":arg transition: The transition sound.\n"
- ":type transition: :class:`Sound`\n"
- ":return: false if the ini or end scenes don't exist, true othrwise.\n"
- ":rtype: bool");
-
-static PyObject *
-DynamicMusic_addTransition(DynamicMusicP* self, PyObject* args)
-{
- PyObject* object;
- int ini, end;
- if(!PyArg_ParseTuple(args, "iiO:sound", &ini, &end, &object))
- return nullptr;
- Sound* sound = checkSound(object);
- if(!sound)
- return nullptr;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->addTransition(ini, end, *reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound));
- Py_RETURN_NONE;
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_resume_doc,
- "resume()\n\n"
- "Resumes playback of the scene.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-DynamicMusic_resume(DynamicMusicP* self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->resume());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_pause_doc,
- "pause()\n\n"
- "Pauses playback of the scene.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-DynamicMusic_pause(DynamicMusicP* self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->pause());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_stop_doc,
- "stop()\n\n"
- "Stops playback of the scene.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool\n\n");
-
-static PyObject *
-DynamicMusic_stop(DynamicMusicP* self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->stop());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyMethodDef DynamicMusic_methods[] = {
- { "addScene", (PyCFunction)DynamicMusic_addScene, METH_O,
- M_aud_DynamicMusic_addScene_doc
- },
- { "addTransition", (PyCFunction)DynamicMusic_addTransition, METH_VARARGS,
- M_aud_DynamicMusic_addTransition_doc
- },
- { "resume", (PyCFunction)DynamicMusic_resume, METH_NOARGS,
- M_aud_DynamicMusic_resume_doc
- },
- { "pause", (PyCFunction)DynamicMusic_pause, METH_NOARGS,
- M_aud_DynamicMusic_pause_doc
- },
- { "stop", (PyCFunction)DynamicMusic_stop, METH_NOARGS,
- M_aud_DynamicMusic_stop_doc
- },
- { nullptr } /* Sentinel */
-};
-
-/////////////////////////////////////////////////////
-
-PyDoc_STRVAR(M_aud_DynamicMusic_status_doc,
- "Whether the scene is playing, paused or stopped (=invalid).");
-
-static PyObject *
-DynamicMusic_get_status(DynamicMusicP* self, void* nothing)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getStatus());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_position_doc,
- "The playback position of the scene in seconds.");
-
-static int
-DynamicMusic_set_position(DynamicMusicP* self, PyObject* args, void* nothing)
-{
- float position;
-
- if(!PyArg_Parse(args, "f:position", &position))
- return -1;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->seek(position))
- return 0;
- PyErr_SetString(AUDError, "Couldn't seek the sound!");
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyObject *
-DynamicMusic_get_position(DynamicMusicP* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getPosition());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_fadeTime_doc,
- "The length in seconds of the crossfade transition");
-
-static int
-DynamicMusic_set_fadeTime(DynamicMusicP* self, PyObject* args, void* nothing)
-{
- float fadeTime;
-
- if(!PyArg_Parse(args, "f:fadeTime", &fadeTime))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->setFadeTime(fadeTime);
- return 0;
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyObject *
-DynamicMusic_get_fadeTime(DynamicMusicP* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getFadeTime());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_scene_doc,
- "The current scene");
-
-static int
-DynamicMusic_set_scene(DynamicMusicP* self, PyObject* args, void* nothing)
-{
- int scene;
-
- if(!PyArg_Parse(args, "i:scene", &scene))
- return -1;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->changeScene(scene))
- return 0;
- PyErr_SetString(AUDError, "Couldn't change the scene!");
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyObject *
-DynamicMusic_get_scene(DynamicMusicP* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getScene());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_DynamicMusic_volume_doc,
- "The volume of the scene.");
-
-static int
-DynamicMusic_set_volume(DynamicMusicP* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume", &volume))
- return -1;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->setVolume(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't change the volume!");
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyObject *
-DynamicMusic_get_volume(DynamicMusicP* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getVolume());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyGetSetDef DynamicMusic_properties[] = {
- { (char*)"status", (getter)DynamicMusic_get_status, nullptr,
- M_aud_DynamicMusic_status_doc, nullptr },
- { (char*)"position", (getter)DynamicMusic_get_position, (setter)DynamicMusic_set_position,
- M_aud_DynamicMusic_position_doc, nullptr },
- { (char*)"fadeTime", (getter)DynamicMusic_get_fadeTime, (setter)DynamicMusic_set_fadeTime,
- M_aud_DynamicMusic_fadeTime_doc, nullptr },
- { (char*)"scene", (getter)DynamicMusic_get_scene, (setter)DynamicMusic_set_scene,
- M_aud_DynamicMusic_scene_doc, nullptr },
- { (char*)"volume", (getter)DynamicMusic_get_volume, (setter)DynamicMusic_set_volume,
- M_aud_DynamicMusic_volume_doc, nullptr },
- { nullptr } /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_DynamicMusic_doc,
- "The DynamicMusic object allows to play music depending on a current scene, scene changes are managed by the class, with the possibility of custom transitions.\n"
- "The default transition is a crossfade effect, and the default scene is silent and has id 0");
-
-PyTypeObject DynamicMusicType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.DynamicMusic", /* tp_name */
- sizeof(DynamicMusicP), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)DynamicMusic_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_DynamicMusic_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- DynamicMusic_methods, /* tp_methods */
- 0, /* tp_members */
- DynamicMusic_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- DynamicMusic_new, /* tp_new */
-};
-
-AUD_API PyObject* DynamicMusic_empty()
-{
- return DynamicMusicType.tp_alloc(&DynamicMusicType, 0);
-}
-
-
-AUD_API DynamicMusicP* checkDynamicMusic(PyObject* dynamicMusic)
-{
- if(!PyObject_TypeCheck(dynamicMusic, &DynamicMusicType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type DynamicMusic!");
- return nullptr;
- }
-
- return (DynamicMusicP*)dynamicMusic;
-}
-
-
-bool initializeDynamicMusic()
-{
- return PyType_Ready(&DynamicMusicType) >= 0;
-}
-
-
-void addDynamicMusicToModule(PyObject* module)
-{
- Py_INCREF(&DynamicMusicType);
- PyModule_AddObject(module, "DynamicMusic", (PyObject *)&DynamicMusicType);
-} \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyDynamicMusic.h b/extern/audaspace/bindings/python/PyDynamicMusic.h
deleted file mode 100644
index f19de2d8c75..00000000000
--- a/extern/audaspace/bindings/python/PyDynamicMusic.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_DynamicMusic;
-
-typedef struct {
- PyObject_HEAD
- Reference_DynamicMusic* dynamicMusic;
-} DynamicMusicP;
-
-extern AUD_API PyObject* DynamicMusic_empty();
-extern AUD_API DynamicMusicP* checkDynamicMusic(PyObject* dynamicMusic);
-
-bool initializeDynamicMusic();
-void addDynamicMusicToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyHRTF.cpp b/extern/audaspace/bindings/python/PyHRTF.cpp
deleted file mode 100644
index 2a5b6be624f..00000000000
--- a/extern/audaspace/bindings/python/PyHRTF.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "PyHRTF.h"
-#include "PySound.h"
-
-#include "Exception.h"
-#include "fx/HRTF.h"
-#include "fx/HRTFLoader.h"
-
-extern PyObject* AUDError;
-
-static PyObject *
-HRTF_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- HRTFP* self = (HRTFP*)type->tp_alloc(type, 0);
-
- if(self != nullptr)
- {
- try
- {
- self->hrtf = new std::shared_ptr<aud::HRTF>(new aud::HRTF());
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-static void
-HRTF_dealloc(HRTFP* self)
-{
- if(self->hrtf)
- delete reinterpret_cast<std::shared_ptr<aud::HRTF>*>(self->hrtf);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-PyDoc_STRVAR(M_aud_HRTF_addImpulseResponse_doc,
- "addImpulseResponseFromSound(sound, azimuth, elevation)\n\n"
- "Adds a new hrtf to the HRTF object\n\n"
- ":arg sound: The sound that contains the hrtf.\n"
- ":type sound: :class:`Sound`\n"
- ":arg azimuth: The azimuth angle of the hrtf.\n"
- ":type azimuth: float\n"
- ":arg elevation: The elevation angle of the hrtf.\n"
- ":type elevation: float\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-HRTF_addImpulseResponseFromSound(HRTFP* self, PyObject* args)
-{
- PyObject* object;
- float azimuth, elevation;
-
- if(!PyArg_ParseTuple(args, "Off:hrtf", &object, &azimuth, &elevation))
- return nullptr;
-
- Sound* ir = checkSound(object);
- if(!ir)
- return nullptr;
-
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::HRTF>*>(self->hrtf))->addImpulseResponse(std::make_shared<aud::StreamBuffer>(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(ir->sound)), azimuth, elevation));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_HRTF_loadLeftHrtfSet_doc,
- "loadLeftHrtfSet(extension, directory)\n\n"
- "Loads all HRTFs from a directory.\n\n"
- ":arg extension: The file extension of the hrtfs.\n"
- ":type extension: string\n"
- ":arg directory: The path to where the HRTF files are located.\n"
- ":type extension: string\n"
- ":return: The loaded :class:`HRTF` object.\n"
- ":rtype: :class:`HRTF`\n\n");
-
-static PyObject *
-HRTF_loadLeftHrtfSet(PyTypeObject* type, PyObject* args)
-{
- const char* dir = nullptr;
- const char* ext = nullptr;
-
- if(!PyArg_ParseTuple(args, "ss:hrtf", &ext, &dir))
- return nullptr;
-
- HRTFP* self;
- self = (HRTFP*)type->tp_alloc(type, 0);
-
- try
- {
- self->hrtf = new std::shared_ptr<aud::HRTF>(aud::HRTFLoader::loadLeftHRTFs(ext, dir));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_HRTF_loadRightHrtfSet_doc,
- "loadLeftHrtfSet(extension, directory)\n\n"
- "Loads all HRTFs from a directory.\n\n"
- ":arg extension: The file extension of the hrtfs.\n"
- ":type extension: string\n"
- ":arg directory: The path to where the HRTF files are located.\n"
- ":type extension: string\n"
- ":return: The loaded :class:`HRTF` object.\n"
- ":rtype: :class:`HRTF`\n\n");
-
-static PyObject *
-HRTF_loadRightHrtfSet(PyTypeObject* type, PyObject* args)
-{
- const char* dir = nullptr;
- const char* ext = nullptr;
-
- if(!PyArg_ParseTuple(args, "ss:hrtf", &ext, &dir))
- return nullptr;
-
- HRTFP* self;
- self = (HRTFP*)type->tp_alloc(type, 0);
-
- try
- {
- self->hrtf = new std::shared_ptr<aud::HRTF>(aud::HRTFLoader::loadRightHRTFs(ext, dir));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- return (PyObject *)self;
-}
-
-static PyMethodDef HRTF_methods[] = {
- { "addImpulseResponseFromSound", (PyCFunction)HRTF_addImpulseResponseFromSound, METH_VARARGS | METH_KEYWORDS,
- M_aud_HRTF_addImpulseResponse_doc
- },
- { "loadLeftHrtfSet", (PyCFunction)HRTF_loadLeftHrtfSet, METH_VARARGS | METH_CLASS,
- M_aud_HRTF_loadLeftHrtfSet_doc
- },
- { "loadRightHrtfSet", (PyCFunction)HRTF_loadRightHrtfSet, METH_VARARGS | METH_CLASS,
- M_aud_HRTF_loadRightHrtfSet_doc
- },
- { nullptr } /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_HRTF_doc,
- "An HRTF object represents a set of head related transfer functions as impulse responses. It's used for binaural sound");
-
-PyTypeObject HRTFType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.HRTF", /* tp_name */
- sizeof(HRTFP), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)HRTF_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_HRTF_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- HRTF_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- HRTF_new, /* tp_new */
-};
-
-AUD_API PyObject* HRTF_empty()
-{
- return HRTFType.tp_alloc(&HRTFType, 0);
-}
-
-
-AUD_API HRTFP* checkHRTF(PyObject* hrtf)
-{
- if(!PyObject_TypeCheck(hrtf, &HRTFType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type HRTF!");
- return nullptr;
- }
-
- return (HRTFP*)hrtf;
-}
-
-
-bool initializeHRTF()
-{
- return PyType_Ready(&HRTFType) >= 0;
-}
-
-
-void addHRTFToModule(PyObject* module)
-{
- Py_INCREF(&HRTFType);
- PyModule_AddObject(module, "HRTF", (PyObject *)&HRTFType);
-}
diff --git a/extern/audaspace/bindings/python/PyHRTF.h b/extern/audaspace/bindings/python/PyHRTF.h
deleted file mode 100644
index 0445069929f..00000000000
--- a/extern/audaspace/bindings/python/PyHRTF.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_HRTF;
-
-typedef struct {
- PyObject_HEAD
- Reference_HRTF* hrtf;
-} HRTFP;
-
-extern AUD_API PyObject* HRTF_empty();
-extern AUD_API HRTFP* checkHRTF(PyObject* hrtf);
-
-bool initializeHRTF();
-void addHRTFToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyHandle.cpp b/extern/audaspace/bindings/python/PyHandle.cpp
deleted file mode 100644
index 7f7a7660049..00000000000
--- a/extern/audaspace/bindings/python/PyHandle.cpp
+++ /dev/null
@@ -1,1126 +0,0 @@
-/*******************************************************************************
- * 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 "PyHandle.h"
-
-#include "devices/IHandle.h"
-#include "devices/I3DHandle.h"
-#include "Exception.h"
-
-#include <memory>
-
-#include <structmember.h>
-
-using namespace aud;
-
-extern PyObject* AUDError;
-static const char* device_not_3d_error = "Device is not a 3D device!";
-
-static void
-Handle_dealloc(Handle* self)
-{
- if(self->handle)
- delete reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-PyDoc_STRVAR(M_aud_Handle_pause_doc,
- "pause()\n\n"
- "Pauses playback.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-Handle_pause(Handle* self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->pause());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Handle_resume_doc,
- "resume()\n\n"
- "Resumes playback.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-Handle_resume(Handle* self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->resume());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Handle_stop_doc,
- "stop()\n\n"
- "Stops playback.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool\n\n"
- ".. note:: This makes the handle invalid.");
-
-static PyObject *
-Handle_stop(Handle* self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->stop());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyMethodDef Handle_methods[] = {
- {"pause", (PyCFunction)Handle_pause, METH_NOARGS,
- M_aud_Handle_pause_doc
- },
- {"resume", (PyCFunction)Handle_resume, METH_NOARGS,
- M_aud_Handle_resume_doc
- },
- {"stop", (PyCFunction)Handle_stop, METH_NOARGS,
- M_aud_Handle_stop_doc
- },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Handle_attenuation_doc,
- "This factor is used for distance based attenuation of the "
- "source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_attenuation(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getAttenuation());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_attenuation(Handle* self, PyObject* args, void* nothing)
-{
- float factor;
-
- if(!PyArg_Parse(args, "f:attenuation", &factor))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setAttenuation(factor))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the attenuation!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_cone_angle_inner_doc,
- "The opening angle of the inner cone of the source. If the cone "
- "values of a source are set there are two (audible) cones with "
- "the apex at the :attr:`location` of the source and with infinite "
- "height, heading in the direction of the source's "
- ":attr:`orientation`.\n"
- "In the inner cone the volume is normal. Outside the outer cone "
- "the volume will be :attr:`cone_volume_outer` and in the area "
- "between the volume will be interpolated linearly.");
-
-static PyObject *
-Handle_get_cone_angle_inner(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getConeAngleInner());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_cone_angle_inner(Handle* self, PyObject* args, void* nothing)
-{
- float angle;
-
- if(!PyArg_Parse(args, "f:cone_angle_inner", &angle))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setConeAngleInner(angle))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the cone inner angle!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_cone_angle_outer_doc,
- "The opening angle of the outer cone of the source.\n\n"
- ".. seealso:: :attr:`cone_angle_inner`");
-
-static PyObject *
-Handle_get_cone_angle_outer(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getConeAngleOuter());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_cone_angle_outer(Handle* self, PyObject* args, void* nothing)
-{
- float angle;
-
- if(!PyArg_Parse(args, "f:cone_angle_outer", &angle))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setConeAngleOuter(angle))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the cone outer angle!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_cone_volume_outer_doc,
- "The volume outside the outer cone of the source.\n\n"
- ".. seealso:: :attr:`cone_angle_inner`");
-
-static PyObject *
-Handle_get_cone_volume_outer(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getConeVolumeOuter());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_cone_volume_outer(Handle* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:cone_volume_outer", &volume))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setConeVolumeOuter(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the cone outer volume!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_distance_maximum_doc,
- "The maximum distance of the source.\n"
- "If the listener is further away the source volume will be 0.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_distance_maximum(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getDistanceMaximum());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_distance_maximum(Handle* self, PyObject* args, void* nothing)
-{
- float distance;
-
- if(!PyArg_Parse(args, "f:distance_maximum", &distance))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setDistanceMaximum(distance))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the maximum distance!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_distance_reference_doc,
- "The reference distance of the source.\n"
- "At this distance the volume will be exactly :attr:`volume`.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_distance_reference(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getDistanceReference());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_distance_reference(Handle* self, PyObject* args, void* nothing)
-{
- float distance;
-
- if(!PyArg_Parse(args, "f:distance_reference", &distance))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setDistanceReference(distance))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the reference distance!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_keep_doc,
- "Whether the sound should be kept paused in the device when its "
- "end is reached.\n"
- "This can be used to seek the sound to some position and start "
- "playback again.\n\n"
- ".. warning:: If this is set to true and you forget stopping this "
- "equals a memory leak as the handle exists until the device is "
- "destroyed.");
-
-static PyObject *
-Handle_get_keep(Handle* self, void* nothing)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getKeep());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_keep(Handle* self, PyObject* args, void* nothing)
-{
- if(!PyBool_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "keep is not a boolean!");
- return -1;
- }
-
- bool keep = args == Py_True;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setKeep(keep))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set keep of the sound!");
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_location_doc,
- "The source's location in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Handle_get_location(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- Vector3 v = handle->getLocation();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-Handle_set_location(Handle* self, PyObject* args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):location", &x, &y, &z))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- Vector3 location(x, y, z);
- if(handle->setLocation(location))
- return 0;
- PyErr_SetString(AUDError, "Location couldn't be set!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_loop_count_doc,
- "The (remaining) loop count of the sound. A negative value indicates infinity.");
-
-static PyObject *
-Handle_get_loop_count(Handle* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getLoopCount());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_loop_count(Handle* self, PyObject* args, void* nothing)
-{
- int loops;
-
- if(!PyArg_Parse(args, "i:loop_count", &loops))
- return -1;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setLoopCount(loops))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the loop count!");
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_orientation_doc,
- "The source's orientation in 3D space as quaternion, a 4 float tuple.");
-
-static PyObject *
-Handle_get_orientation(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- Quaternion o = handle->getOrientation();
- return Py_BuildValue("(ffff)", o.w(), o.x(), o.y(), o.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-Handle_set_orientation(Handle* self, PyObject* args, void* nothing)
-{
- float w, x, y, z;
-
- if(!PyArg_Parse(args, "(ffff):orientation", &w, &x, &y, &z))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- Quaternion orientation(w, x, y, z);
- if(handle->setOrientation(orientation))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the orientation!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_pitch_doc,
- "The pitch of the sound.");
-
-static PyObject *
-Handle_get_pitch(Handle* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getPitch());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_pitch(Handle* self, PyObject* args, void* nothing)
-{
- float pitch;
-
- if(!PyArg_Parse(args, "f:pitch", &pitch))
- return -1;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setPitch(pitch))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the sound pitch!");
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_position_doc,
- "The playback position of the sound in seconds.");
-
-static PyObject *
-Handle_get_position(Handle* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getPosition());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_position(Handle* self, PyObject* args, void* nothing)
-{
- float position;
-
- if(!PyArg_Parse(args, "f:position", &position))
- return -1;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->seek(position))
- return 0;
- PyErr_SetString(AUDError, "Couldn't seek the sound!");
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_relative_doc,
- "Whether the source's location, velocity and orientation is relative or absolute to the listener.");
-
-static PyObject *
-Handle_get_relative(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return PyBool_FromLong((long)handle->isRelative());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-Handle_set_relative(Handle* self, PyObject* args, void* nothing)
-{
- if(!PyBool_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "Value is not a boolean!");
- return -1;
- }
-
- bool relative = (args == Py_True);
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setRelative(relative))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the relativeness!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_status_doc,
- "Whether the sound is playing, paused or stopped (=invalid).");
-
-static PyObject *
-Handle_get_status(Handle* self, void* nothing)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getStatus());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Handle_velocity_doc,
- "The source's velocity in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Handle_get_velocity(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- Vector3 v = handle->getVelocity();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-Handle_set_velocity(Handle* self, PyObject* args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):velocity", &x, &y, &z))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- Vector3 velocity(x, y, z);
- if(handle->setVelocity(velocity))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the velocity!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_volume_doc,
- "The volume of the sound.");
-
-static PyObject *
-Handle_get_volume(Handle* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getVolume());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_volume(Handle* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume", &volume))
- return -1;
-
- try
- {
- if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setVolume(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the sound volume!");
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_volume_maximum_doc,
- "The maximum volume of the source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_volume_maximum(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getVolumeMaximum());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_volume_maximum(Handle* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume_maximum", &volume))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setVolumeMaximum(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the maximum volume!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_volume_minimum_doc,
- "The minimum volume of the source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_volume_minimum(Handle* self, void* nothing)
-{
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getVolumeMinimum());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return nullptr;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Handle_set_volume_minimum(Handle* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume_minimum", &volume))
- return -1;
-
- try
- {
- I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setVolumeMinimum(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the minimum volume!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyGetSetDef Handle_properties[] = {
- {(char*)"attenuation", (getter)Handle_get_attenuation, (setter)Handle_set_attenuation,
- M_aud_Handle_attenuation_doc, nullptr },
- {(char*)"cone_angle_inner", (getter)Handle_get_cone_angle_inner, (setter)Handle_set_cone_angle_inner,
- M_aud_Handle_cone_angle_inner_doc, nullptr },
- {(char*)"cone_angle_outer", (getter)Handle_get_cone_angle_outer, (setter)Handle_set_cone_angle_outer,
- M_aud_Handle_cone_angle_outer_doc, nullptr },
- {(char*)"cone_volume_outer", (getter)Handle_get_cone_volume_outer, (setter)Handle_set_cone_volume_outer,
- M_aud_Handle_cone_volume_outer_doc, nullptr },
- {(char*)"distance_maximum", (getter)Handle_get_distance_maximum, (setter)Handle_set_distance_maximum,
- M_aud_Handle_distance_maximum_doc, nullptr },
- {(char*)"distance_reference", (getter)Handle_get_distance_reference, (setter)Handle_set_distance_reference,
- M_aud_Handle_distance_reference_doc, nullptr },
- {(char*)"keep", (getter)Handle_get_keep, (setter)Handle_set_keep,
- M_aud_Handle_keep_doc, nullptr },
- {(char*)"location", (getter)Handle_get_location, (setter)Handle_set_location,
- M_aud_Handle_location_doc, nullptr },
- {(char*)"loop_count", (getter)Handle_get_loop_count, (setter)Handle_set_loop_count,
- M_aud_Handle_loop_count_doc, nullptr },
- {(char*)"orientation", (getter)Handle_get_orientation, (setter)Handle_set_orientation,
- M_aud_Handle_orientation_doc, nullptr },
- {(char*)"pitch", (getter)Handle_get_pitch, (setter)Handle_set_pitch,
- M_aud_Handle_pitch_doc, nullptr },
- {(char*)"position", (getter)Handle_get_position, (setter)Handle_set_position,
- M_aud_Handle_position_doc, nullptr },
- {(char*)"relative", (getter)Handle_get_relative, (setter)Handle_set_relative,
- M_aud_Handle_relative_doc, nullptr },
- {(char*)"status", (getter)Handle_get_status, nullptr,
- M_aud_Handle_status_doc, nullptr },
- {(char*)"velocity", (getter)Handle_get_velocity, (setter)Handle_set_velocity,
- M_aud_Handle_velocity_doc, nullptr },
- {(char*)"volume", (getter)Handle_get_volume, (setter)Handle_set_volume,
- M_aud_Handle_volume_doc, nullptr },
- {(char*)"volume_maximum", (getter)Handle_get_volume_maximum, (setter)Handle_set_volume_maximum,
- M_aud_Handle_volume_maximum_doc, nullptr },
- {(char*)"volume_minimum", (getter)Handle_get_volume_minimum, (setter)Handle_set_volume_minimum,
- M_aud_Handle_volume_minimum_doc, nullptr },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Handle_doc,
- "Handle objects are playback handles that can be used to control "
- "playback of a sound. If a sound is played back multiple times "
- "then there are as many handles.");
-
-static PyTypeObject HandleType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.Handle", /* tp_name */
- sizeof(Handle), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Handle_dealloc,/* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Handle_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Handle_methods, /* tp_methods */
- 0, /* tp_members */
- Handle_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- 0, /* tp_new */
-};
-
-
-AUD_API PyObject* Handle_empty()
-{
- return HandleType.tp_alloc(&HandleType, 0);
-}
-
-
-AUD_API Handle*checkHandle(PyObject* handle)
-{
- if(!PyObject_TypeCheck(handle, &HandleType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Handle!");
- return nullptr;
- }
-
- return (Handle*)handle;
-}
-
-
-bool initializeHandle()
-{
- return PyType_Ready(&HandleType) >= 0;
-}
-
-
-void addHandleToModule(PyObject* module)
-{
- Py_INCREF(&HandleType);
- PyModule_AddObject(module, "Handle", (PyObject *)&HandleType);
-}
-
-
diff --git a/extern/audaspace/bindings/python/PyHandle.h b/extern/audaspace/bindings/python/PyHandle.h
deleted file mode 100644
index 95006c88da7..00000000000
--- a/extern/audaspace/bindings/python/PyHandle.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_IHandle;
-
-typedef struct {
- PyObject_HEAD
- Reference_IHandle* handle;
-} Handle;
-
-extern AUD_API PyObject* Handle_empty();
-extern AUD_API Handle* checkHandle(PyObject* handle);
-
-bool initializeHandle();
-void addHandleToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PyImpulseResponse.cpp b/extern/audaspace/bindings/python/PyImpulseResponse.cpp
deleted file mode 100644
index 5200c938511..00000000000
--- a/extern/audaspace/bindings/python/PyImpulseResponse.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "PyImpulseResponse.h"
-#include "PySound.h"
-
-#include "Exception.h"
-#include "fx/ImpulseResponse.h"
-#include "util/StreamBuffer.h"
-
-extern PyObject* AUDError;
-
-static PyObject *
-ImpulseResponse_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- ImpulseResponseP* self = (ImpulseResponseP*)type->tp_alloc(type, 0);
-
- if(self != nullptr)
- {
- PyObject* object;
- if(!PyArg_ParseTuple(args, "O:sound", &object))
- return nullptr;
- Sound* sound = checkSound(object);
-
- try
- {
- self->impulseResponse = new std::shared_ptr<aud::ImpulseResponse>(new aud::ImpulseResponse(std::make_shared<aud::StreamBuffer>(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound))));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-static void
-ImpulseResponse_dealloc(ImpulseResponseP* self)
-{
- if(self->impulseResponse)
- delete reinterpret_cast<std::shared_ptr<aud::ImpulseResponse>*>(self->impulseResponse);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyMethodDef ImpulseResponse_methods[] = {
- { nullptr } /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_ImpulseResponse_doc,
- "An ImpulseResponse object represents a filter with which to convolve a sound.");
-
-PyTypeObject ImpulseResponseType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.ImpulseResponse", /* tp_name */
- sizeof(ImpulseResponseP), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)ImpulseResponse_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_ImpulseResponse_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- ImpulseResponse_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- ImpulseResponse_new, /* tp_new */
-};
-
-AUD_API PyObject* ImpulseResponse_empty()
-{
- return ImpulseResponseType.tp_alloc(&ImpulseResponseType, 0);
-}
-
-
-AUD_API ImpulseResponseP* checkImpulseResponse(PyObject* impulseResponse)
-{
- if(!PyObject_TypeCheck(impulseResponse, &ImpulseResponseType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type ImpulseResponse!");
- return nullptr;
- }
-
- return (ImpulseResponseP*)impulseResponse;
-}
-
-
-bool initializeImpulseResponse()
-{
- return PyType_Ready(&ImpulseResponseType) >= 0;
-}
-
-
-void addImpulseResponseToModule(PyObject* module)
-{
- Py_INCREF(&ImpulseResponseType);
- PyModule_AddObject(module, "ImpulseResponse", (PyObject *)&ImpulseResponseType);
-}
diff --git a/extern/audaspace/bindings/python/PyImpulseResponse.h b/extern/audaspace/bindings/python/PyImpulseResponse.h
deleted file mode 100644
index 3e974c0701c..00000000000
--- a/extern/audaspace/bindings/python/PyImpulseResponse.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_ImpulseResponse;
-
-typedef struct {
- PyObject_HEAD
- Reference_ImpulseResponse* impulseResponse;
-} ImpulseResponseP;
-
-extern AUD_API PyObject* ImpulseResponse_empty();
-extern AUD_API ImpulseResponseP* checkImpulseResponse(PyObject* impulseResponse);
-
-bool initializeImpulseResponse();
-void addImpulseResponseToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyPlaybackManager.cpp b/extern/audaspace/bindings/python/PyPlaybackManager.cpp
deleted file mode 100644
index 9b6614cae9a..00000000000
--- a/extern/audaspace/bindings/python/PyPlaybackManager.cpp
+++ /dev/null
@@ -1,389 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 "PyPlaybackManager.h"
-#include "PySound.h"
-#include "PyHandle.h"
-#include "PyDevice.h"
-
-#include "Exception.h"
-#include "fx/PlaybackManager.h"
-
-extern PyObject* AUDError;
-
-static PyObject *
-PlaybackManager_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- PlaybackManagerP* self = (PlaybackManagerP*)type->tp_alloc(type, 0);
-
- if(self != nullptr)
- {
- PyObject* object;
- if(!PyArg_ParseTuple(args, "O:catKey", &object))
- return nullptr;
- Device* device = checkDevice(object);
-
- try
- {
- self->playbackManager = new std::shared_ptr<aud::PlaybackManager>(new aud::PlaybackManager(*reinterpret_cast<std::shared_ptr<aud::IDevice>*>(device->device)));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-static void
-PlaybackManager_dealloc(PlaybackManagerP* self)
-{
- if(self->playbackManager)
- delete reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_play_doc,
- "setVolume(sound, catKey)\n\n"
- "Plays a sound through the playback manager and assigns it to a category.\n\n"
- ":arg sound: The sound to play.\n"
- ":type sound: :class:`Sound`\n"
- ":arg catKey: the key of the category in which the sound will be added, if it doesn't exist, a new one will be created.\n"
- ":type catKey: int\n"
- ":return: The playback handle with which playback can be controlled with.\n"
- ":rtype: :class:`Handle`");
-
-static PyObject *
-PlaybackManager_play(PlaybackManagerP* self, PyObject* args)
-{
- PyObject* object;
- unsigned int cat;
-
- if(!PyArg_ParseTuple(args, "OI:catKey", &object, &cat))
- return nullptr;
-
- Sound* sound = checkSound(object);
- if(!sound)
- return nullptr;
-
- Handle* handle;
-
- handle = (Handle*)Handle_empty();
- if(handle != nullptr)
- {
- try
- {
- handle->handle = new std::shared_ptr<aud::IHandle>((*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->play(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound), cat));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(handle);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)handle;
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_resume_doc,
- "resume(catKey)\n\n"
- "Resumes playback of the catgory.\n\n"
- ":arg catKey: the key of the category.\n"
- ":type catKey: int\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-PlaybackManager_resume(PlaybackManagerP* self, PyObject* args)
-{
- unsigned int cat;
-
- if(!PyArg_ParseTuple(args, "I:catKey", &cat))
- return nullptr;
-
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->resume(cat));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_pause_doc,
- "pause(catKey)\n\n"
- "Pauses playback of the category.\n\n"
- ":arg catKey: the key of the category.\n"
- ":type catKey: int\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-PlaybackManager_pause(PlaybackManagerP* self, PyObject* args)
-{
- unsigned int cat;
-
- if(!PyArg_ParseTuple(args, "I:catKey", &cat))
- return nullptr;
-
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->pause(cat));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_add_category_doc,
- "addCategory(volume)\n\n"
- "Adds a category with a custom volume.\n\n"
- ":arg volume: The volume for ther new category.\n"
- ":type volume: float\n"
- ":return: The key of the new category.\n"
- ":rtype: int\n\n");
-
-static PyObject *
-PlaybackManager_add_category(PlaybackManagerP* self, PyObject* args)
-{
- float vol;
-
- if(!PyArg_ParseTuple(args, "f:volume", &vol))
- return nullptr;
-
- try
- {
- return Py_BuildValue("I", (*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->addCategory(vol));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_get_volume_doc,
- "getVolume(catKey)\n\n"
- "Retrieves the volume of a category.\n\n"
- ":arg catKey: the key of the category.\n"
- ":type catKey: int\n"
- ":return: The volume of the cateogry.\n"
- ":rtype: float\n\n");
-
-static PyObject *
-PlaybackManager_get_volume(PlaybackManagerP* self, PyObject* args)
-{
- unsigned int cat;
-
- if(!PyArg_ParseTuple(args, "I:catKey", &cat))
- return nullptr;
-
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->getVolume(cat));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_set_volume_doc,
- "setVolume(volume, catKey)\n\n"
- "Changes the volume of a category.\n\n"
- ":arg volume: the new volume value.\n"
- ":type volume: float\n"
- ":arg catKey: the key of the category.\n"
- ":type catKey: int\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: int\n\n");
-
-static PyObject *
-PlaybackManager_set_volume(PlaybackManagerP* self, PyObject* args)
-{
- float volume;
- unsigned int cat;
-
- if(!PyArg_ParseTuple(args, "fI:volume", &volume, &cat))
- return nullptr;
-
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->setVolume(volume, cat));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_stop_doc,
- "stop(catKey)\n\n"
- "Stops playback of the category.\n\n"
- ":arg catKey: the key of the category.\n"
- ":type catKey: int\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool\n\n");
-
-static PyObject *
-PlaybackManager_stop(PlaybackManagerP* self, PyObject* args)
-{
- unsigned int cat;
-
- if(!PyArg_ParseTuple(args, "I:catKey", &cat))
- return nullptr;
-
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->stop(cat));
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_PlaybackManager_clean_doc,
- "clean()\n\n"
- "Cleans all the invalid and finished sound from the playback manager.\n\n");
-
-static PyObject *
-PlaybackManager_clean(PlaybackManagerP* self)
-{
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->clean();
- Py_RETURN_NONE;
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyMethodDef PlaybackManager_methods[] = {
- { "play", (PyCFunction)PlaybackManager_play, METH_VARARGS | METH_KEYWORDS,
- M_aud_PlaybackManager_play_doc
- },
- { "resume", (PyCFunction)PlaybackManager_resume, METH_VARARGS,
- M_aud_PlaybackManager_resume_doc
- },
- { "pause", (PyCFunction)PlaybackManager_pause, METH_VARARGS,
- M_aud_PlaybackManager_pause_doc
- },
- { "stop", (PyCFunction)PlaybackManager_stop, METH_VARARGS,
- M_aud_PlaybackManager_stop_doc
- },
- { "addCategory", (PyCFunction)PlaybackManager_add_category, METH_VARARGS,
- M_aud_PlaybackManager_add_category_doc
- },
- { "getVolume", (PyCFunction)PlaybackManager_get_volume, METH_VARARGS,
- M_aud_PlaybackManager_get_volume_doc
- },
- { "setVolume", (PyCFunction)PlaybackManager_set_volume, METH_VARARGS,
- M_aud_PlaybackManager_set_volume_doc
- },
- { "clean", (PyCFunction)PlaybackManager_clean, METH_NOARGS,
- M_aud_PlaybackManager_clean_doc
- },
- { nullptr } /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_PlaybackManager_doc,
- "A PlabackManager object allows to easily control groups os sounds organized in categories.");
-
-PyTypeObject PlaybackManagerType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.PlaybackManager", /* tp_name */
- sizeof(PlaybackManagerP), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)PlaybackManager_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_PlaybackManager_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- PlaybackManager_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- PlaybackManager_new, /* tp_new */
-};
-
-AUD_API PyObject* PlaybackManager_empty()
-{
- return PlaybackManagerType.tp_alloc(&PlaybackManagerType, 0);
-}
-
-
-AUD_API PlaybackManagerP* checkPlaybackManager(PyObject* playbackManager)
-{
- if(!PyObject_TypeCheck(playbackManager, &PlaybackManagerType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type PlaybackManager!");
- return nullptr;
- }
-
- return (PlaybackManagerP*)playbackManager;
-}
-
-
-bool initializePlaybackManager()
-{
- return PyType_Ready(&PlaybackManagerType) >= 0;
-}
-
-
-void addPlaybackManagerToModule(PyObject* module)
-{
- Py_INCREF(&PlaybackManagerType);
- PyModule_AddObject(module, "PlaybackManager", (PyObject *)&PlaybackManagerType);
-}
diff --git a/extern/audaspace/bindings/python/PyPlaybackManager.h b/extern/audaspace/bindings/python/PyPlaybackManager.h
deleted file mode 100644
index f26df1b32d0..00000000000
--- a/extern/audaspace/bindings/python/PyPlaybackManager.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_PlaybackManager;
-
-typedef struct {
- PyObject_HEAD
- Reference_PlaybackManager* playbackManager;
-} PlaybackManagerP;
-
-extern AUD_API PyObject* PlaybackManager_empty();
-extern AUD_API PlaybackManagerP* checkPlaybackManager(PyObject* playbackManager);
-
-bool initializePlaybackManager();
-void addPlaybackManagerToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PySequence.cpp b/extern/audaspace/bindings/python/PySequence.cpp
deleted file mode 100644
index d4773c743ee..00000000000
--- a/extern/audaspace/bindings/python/PySequence.cpp
+++ /dev/null
@@ -1,655 +0,0 @@
-/*******************************************************************************
- * 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 "PySequence.h"
-
-#include "PySound.h"
-#include "PySequenceEntry.h"
-
-#include "sequence/AnimateableProperty.h"
-#include "sequence/Sequence.h"
-#include "Exception.h"
-
-#include <vector>
-#include <structmember.h>
-
-using aud::Channels;
-using aud::DistanceModel;
-using aud::Exception;
-using aud::ISound;
-using aud::AnimateableProperty;
-using aud::AnimateablePropertyType;
-using aud::Specs;
-
-extern PyObject* AUDError;
-
-// ====================================================================
-
-static void
-Sequence_dealloc(Sequence* self)
-{
- if(self->sequence)
- delete reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyObject *
-Sequence_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- Sequence* self;
-
- int channels = aud::CHANNELS_STEREO;
- double rate = aud::RATE_48000;
- float fps = 30.0f;
- bool muted = false;
- PyObject* mutedo = nullptr;
-
- self = (Sequence*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- static const char* kwlist[] = {"channels", "rate", "fps", "muted", nullptr};
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "|idfO:Sequence", const_cast<char**>(kwlist), &channels, &rate, &fps, &mutedo))
- {
- Py_DECREF(self);
- return nullptr;
- }
-
- if(mutedo)
- {
- if(!PyBool_Check(mutedo))
- {
- PyErr_SetString(PyExc_TypeError, "muted is not a boolean!");
- return nullptr;
- }
-
- muted = mutedo == Py_True;
- }
-
- aud::Specs specs;
- specs.channels = static_cast<aud::Channels>(channels);
- specs.rate = rate;
-
- try
- {
- self->sequence = new std::shared_ptr<aud::Sequence>(new aud::Sequence(specs, fps, muted));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sequence_add_doc,
- "add()\n\n"
- "Adds a new entry to the scene.\n"
- ":arg sound: The sound this entry should play.\n"
- ":type sound: :class:`Sound`\n"
- ":arg begin: The start time.\n"
- ":type begin: float\n"
- ":arg end: The end time or a negative value if determined by the sound.\n"
- ":type end: float\n"
- ":arg skip: How much seconds should be skipped at the beginning.\n"
- ":type skip: float\n"
- ":return: The entry added.\n"
- ":rtype: :class:`SequenceEntry`");
-
-static PyObject *
-Sequence_add(Sequence* self, PyObject* args, PyObject* kwds)
-{
- PyObject* object;
- float begin;
- float end = -1.0f;
- float skip = 0.0f;
-
- static const char* kwlist[] = {"sound", "begin", "end", "skip", nullptr};
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "Of|ff:add", const_cast<char**>(kwlist), &object, &begin, &end, &skip))
- return nullptr;
-
- Sound* sound = checkSound(object);
-
- if(!sound)
- return nullptr;
-
- SequenceEntry* entry;
-
- entry = (SequenceEntry*)SequenceEntry_empty();
- if(entry != nullptr)
- {
- try
- {
- entry->entry = new std::shared_ptr<aud::SequenceEntry>((*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->add(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound), begin, end, skip));
- }
- catch(Exception& e)
- {
- Py_DECREF(entry);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)entry;
-}
-
-PyDoc_STRVAR(M_aud_Sequence_remove_doc,
- "reomve()\n\n"
- "Adds a new entry to the scene.\n"
- ":arg entry: The entry to remove.\n"
- ":type entry: :class:`SequenceEntry`\n");
-
-static PyObject *
-Sequence_remove(Sequence* self, PyObject* args)
-{
- PyObject* object;
-
- if(!PyArg_ParseTuple(args, "O:remove", &object))
- return nullptr;
-
- SequenceEntry* entry = checkSequenceEntry(object);
-
- if(!entry)
- return nullptr;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->remove(*reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(entry->entry));
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- Py_DECREF(entry);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Sequence_setAnimationData_doc,
- "setAnimationData()\n\n"
- "Writes animation data to a sequence.\n\n"
- ":arg type: The type of animation data.\n"
- ":type type: int\n"
- ":arg frame: The frame this data is for.\n"
- ":type frame: int\n"
- ":arg data: The data to write.\n"
- ":type data: sequence of float\n"
- ":arg animated: Whether the attribute is animated.\n"
- ":type animated: bool");
-
-static PyObject *
-Sequence_setAnimationData(Sequence* self, PyObject* args)
-{
- int type, frame;
- PyObject* py_data;
- Py_ssize_t py_data_len;
- PyObject* animatedo;
- bool animated;
-
- if(!PyArg_ParseTuple(args, "iiOO:setAnimationData", &type, &frame, &py_data, &animatedo))
- return nullptr;
-
- if(!PySequence_Check(py_data))
- {
- PyErr_SetString(PyExc_TypeError, "Parameter is not a sequence!");
- return nullptr;
- }
-
- py_data_len= PySequence_Size(py_data);
-
- std::vector<float> data;
- data.resize(py_data_len);
-
- PyObject* py_value;
- float value;
-
- for(Py_ssize_t i = 0; i < py_data_len; i++)
- {
- py_value = PySequence_GetItem(py_data, i);
- value= (float)PyFloat_AsDouble(py_value);
- Py_DECREF(py_value);
-
- if(value == -1.0f && PyErr_Occurred()) {
- return nullptr;
- }
-
- data.push_back(value);
- }
-
- if(!PyBool_Check(animatedo))
- {
- PyErr_SetString(PyExc_TypeError, "animated is not a boolean!");
- return nullptr;
- }
-
- animated = animatedo == Py_True;
-
- try
- {
- AnimateableProperty* prop = (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getAnimProperty(static_cast<AnimateablePropertyType>(type));
-
- if(prop->getCount() != py_data_len)
- {
- PyErr_SetString(PyExc_ValueError, "the amount of floats doesn't fit the animated property");
- return nullptr;
- }
-
- if(animated)
- {
- if(frame >= 0)
- prop->write(&data[0], frame, 1);
- }
- else
- {
- prop->write(&data[0]);
- }
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyMethodDef Sequence_methods[] = {
- {"add", (PyCFunction)Sequence_add, METH_VARARGS | METH_KEYWORDS,
- M_aud_Sequence_add_doc
- },
- {"remove", (PyCFunction)Sequence_remove, METH_VARARGS,
- M_aud_Sequence_remove_doc
- },
- {"setAnimationData", (PyCFunction)Sequence_setAnimationData, METH_VARARGS,
- M_aud_Sequence_setAnimationData_doc
- },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Sequence_channels_doc,
- "The channel count of the sequence.");
-
-static PyObject *
-Sequence_get_channels(Sequence* self, void* nothing)
-{
- try
- {
- Specs specs = (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getSpecs();
- return Py_BuildValue("i", specs.channels);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Sequence_set_channels(Sequence* self, PyObject* args, void* nothing)
-{
- int channels;
-
- if(!PyArg_Parse(args, "i:channels", &channels))
- return -1;
-
- try
- {
- std::shared_ptr<aud::Sequence> sequence = *reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
- Specs specs = sequence->getSpecs();
- specs.channels = static_cast<Channels>(channels);
- sequence->setSpecs(specs);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return -1;
- }
-}
-
-PyDoc_STRVAR(M_aud_Sequence_distance_model_doc,
- "The distance model of the sequence.\n\n"
- ".. seealso:: http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.htm#_Toc199835864");
-
-static PyObject *
-Sequence_get_distance_model(Sequence* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getDistanceModel());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Sequence_set_distance_model(Sequence* self, PyObject* args, void* nothing)
-{
- int distance_model;
-
- if(!PyArg_Parse(args, "i:distance_model", &distance_model))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setDistanceModel(static_cast<DistanceModel>(distance_model));
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return -1;
- }
-}
-
-PyDoc_STRVAR(M_aud_Sequence_doppler_factor_doc,
- "The doppler factor of the sequence.\n"
- "This factor is a scaling factor for the velocity vectors in "
- "doppler calculation. So a value bigger than 1 will exaggerate "
- "the effect as it raises the velocity.");
-
-static PyObject *
-Sequence_get_doppler_factor(Sequence* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getDopplerFactor());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Sequence_set_doppler_factor(Sequence* self, PyObject* args, void* nothing)
-{
- float factor;
-
- if(!PyArg_Parse(args, "f:doppler_factor", &factor))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setDopplerFactor(factor);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return -1;
- }
-}
-
-PyDoc_STRVAR(M_aud_Sequence_fps_doc,
- "The listeners's location in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Sequence_get_fps(Sequence* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getFPS());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Sequence_set_fps(Sequence* self, PyObject* args, void* nothing)
-{
- float fps;
-
- if(!PyArg_Parse(args, "f:fps", &fps))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setFPS(fps);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return -1;
- }
-}
-
-PyDoc_STRVAR(M_aud_Sequence_muted_doc,
- "Whether the whole sequence is muted.\n");
-
-static PyObject *
-Sequence_get_muted(Sequence* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::Sequence>* sequence = reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
- return PyBool_FromLong((long)(*sequence)->isMuted());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Sequence_set_muted(Sequence* self, PyObject* args, void* nothing)
-{
- if(!PyBool_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "muted is not a boolean!");
- return -1;
- }
-
- bool muted = args == Py_True;
-
- try
- {
- std::shared_ptr<aud::Sequence>* sequence = reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
- (*sequence)->mute(muted);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Sequence_rate_doc,
- "The sampling rate of the sequence in Hz.");
-
-static PyObject *
-Sequence_get_rate(Sequence* self, void* nothing)
-{
- try
- {
- Specs specs = (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getSpecs();
- return Py_BuildValue("d", specs.rate);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Sequence_set_rate(Sequence* self, PyObject* args, void* nothing)
-{
- double rate;
-
- if(!PyArg_Parse(args, "d:rate", &rate))
- return -1;
-
- try
- {
- std::shared_ptr<aud::Sequence> sequence = *reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
- Specs specs = sequence->getSpecs();
- specs.rate = rate;
- sequence->setSpecs(specs);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return -1;
- }
-}
-
-PyDoc_STRVAR(M_aud_Sequence_speed_of_sound_doc,
- "The speed of sound of the sequence.\n"
- "The speed of sound in air is typically 343.3 m/s.");
-
-static PyObject *
-Sequence_get_speed_of_sound(Sequence* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getSpeedOfSound());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-Sequence_set_speed_of_sound(Sequence* self, PyObject* args, void* nothing)
-{
- float speed;
-
- if(!PyArg_Parse(args, "f:speed_of_sound", &speed))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setSpeedOfSound(speed);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return -1;
- }
-}
-
-static PyGetSetDef Sequence_properties[] = {
- {(char*)"channels", (getter)Sequence_get_channels, (setter)Sequence_set_channels,
- M_aud_Sequence_channels_doc, nullptr },
- {(char*)"distance_model", (getter)Sequence_get_distance_model, (setter)Sequence_set_distance_model,
- M_aud_Sequence_distance_model_doc, nullptr },
- {(char*)"doppler_factor", (getter)Sequence_get_doppler_factor, (setter)Sequence_set_doppler_factor,
- M_aud_Sequence_doppler_factor_doc, nullptr },
- {(char*)"fps", (getter)Sequence_get_fps, (setter)Sequence_set_fps,
- M_aud_Sequence_fps_doc, nullptr },
- {(char*)"muted", (getter)Sequence_get_muted, (setter)Sequence_set_muted,
- M_aud_Sequence_muted_doc, nullptr },
- {(char*)"rate", (getter)Sequence_get_rate, (setter)Sequence_set_rate,
- M_aud_Sequence_rate_doc, nullptr },
- {(char*)"speed_of_sound", (getter)Sequence_get_speed_of_sound, (setter)Sequence_set_speed_of_sound,
- M_aud_Sequence_speed_of_sound_doc, nullptr },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Sequence_doc,
- "This sound represents sequenced entries to play a sound scene.");
-
-extern PyTypeObject SoundType;
-
-static PyTypeObject SequenceType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.Sequence", /* tp_name */
- sizeof(Sequence), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Sequence_dealloc,/* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Sequence_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Sequence_methods, /* tp_methods */
- 0, /* tp_members */
- Sequence_properties, /* tp_getset */
- &SoundType, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- Sequence_new, /* tp_new */
-};
-
-AUD_API PyObject* Sequence_empty()
-{
- return SequenceType.tp_alloc(&SequenceType, 0);
-}
-
-
-AUD_API Sequence* checkSequence(PyObject* sequence)
-{
- if(!PyObject_TypeCheck(sequence, &SequenceType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Sequence!");
- return nullptr;
- }
-
- return (Sequence*)sequence;
-}
-
-
-bool initializeSequence()
-{
- return PyType_Ready(&SequenceType) >= 0;
-}
-
-
-void addSequenceToModule(PyObject* module)
-{
- Py_INCREF(&SequenceType);
- PyModule_AddObject(module, "Sequence", (PyObject *)&SequenceType);
-}
diff --git a/extern/audaspace/bindings/python/PySequence.h b/extern/audaspace/bindings/python/PySequence.h
deleted file mode 100644
index 17855121dda..00000000000
--- a/extern/audaspace/bindings/python/PySequence.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_Sequence;
-
-typedef struct {
- PyObject_HEAD
- Reference_Sequence* sequence;
-} Sequence;
-
-extern AUD_API PyObject* Sequence_empty();
-extern AUD_API Sequence* checkSequence(PyObject* sequence);
-
-bool initializeSequence();
-void addSequenceToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PySequenceEntry.cpp b/extern/audaspace/bindings/python/PySequenceEntry.cpp
deleted file mode 100644
index e6a034ed880..00000000000
--- a/extern/audaspace/bindings/python/PySequenceEntry.cpp
+++ /dev/null
@@ -1,740 +0,0 @@
-/*******************************************************************************
- * 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 "PySequenceEntry.h"
-
-#include "PySound.h"
-
-#include "Exception.h"
-#include "sequence/AnimateableProperty.h"
-#include "sequence/SequenceEntry.h"
-
-#include <structmember.h>
-#include <vector>
-
-using aud::Exception;
-using aud::AnimateableProperty;
-using aud::AnimateablePropertyType;
-using aud::ISound;
-
-extern PyObject* AUDError;
-
-// ====================================================================
-
-static void
-SequenceEntry_dealloc(SequenceEntry* self)
-{
- if(self->entry)
- delete reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_move_doc,
- "move()\n\n"
- "Moves the entry.\n\n"
- ":arg begin: The new start time.\n"
- ":type begin: float\n"
- ":arg end: The new end time or a negative value if unknown.\n"
- ":type end: float\n"
- ":arg skip: How many seconds to skip at the beginning.\n"
- ":type skip: float\n");
-
-static PyObject *
-SequenceEntry_move(SequenceEntry* self, PyObject* args)
-{
- float begin, end, skip;
-
- if(!PyArg_ParseTuple(args, "fff:move", &begin, &end, &skip))
- return nullptr;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry))->move(begin, end, skip);
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_setAnimationData_doc,
- "setAnimationData()\n\n"
- "Writes animation data to a sequenced entry.\n\n"
- ":arg type: The type of animation data.\n"
- ":type type: int\n"
- ":arg frame: The frame this data is for.\n"
- ":type frame: int\n"
- ":arg data: The data to write.\n"
- ":type data: sequence of float\n"
- ":arg animated: Whether the attribute is animated.\n"
- ":type animated: bool");
-
-static PyObject *
-SequenceEntry_setAnimationData(SequenceEntry* self, PyObject* args)
-{
- int type, frame;
- PyObject* py_data;
- Py_ssize_t py_data_len;
- PyObject* animatedo;
- bool animated;
-
- if(!PyArg_ParseTuple(args, "iiOO:setAnimationData", &type, &frame, &py_data, &animatedo))
- return nullptr;
-
- if(!PySequence_Check(py_data))
- {
- PyErr_SetString(PyExc_TypeError, "Parameter is not a sequence!");
- return nullptr;
- }
-
- py_data_len= PySequence_Size(py_data);
-
- std::vector<float> data;
- data.resize(py_data_len);
-
- PyObject* py_value;
- float value;
-
- for(Py_ssize_t i = 0; i < py_data_len; i++)
- {
- py_value = PySequence_GetItem(py_data, i);
- value= (float)PyFloat_AsDouble(py_value);
- Py_DECREF(py_value);
-
- if(value == -1.0f && PyErr_Occurred()) {
- return nullptr;
- }
-
- data.push_back(value);
- }
-
- if(!PyBool_Check(animatedo))
- {
- PyErr_SetString(PyExc_TypeError, "animated is not a boolean!");
- return nullptr;
- }
-
- animated = animatedo == Py_True;
-
- try
- {
- AnimateableProperty* prop = (*reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry))->getAnimProperty(static_cast<AnimateablePropertyType>(type));
-
- if(prop->getCount() != py_data_len)
- {
- PyErr_SetString(PyExc_ValueError, "the amount of floats doesn't fit the animated property");
- return nullptr;
- }
-
- if(animated)
- {
- if(frame >= 0)
- prop->write(&data[0], frame, 1);
- }
- else
- {
- prop->write(&data[0]);
- }
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyMethodDef SequenceEntry_methods[] = {
- {"move", (PyCFunction)SequenceEntry_move, METH_VARARGS,
- M_aud_SequenceEntry_move_doc
- },
- {"setAnimationData", (PyCFunction)SequenceEntry_setAnimationData, METH_VARARGS,
- M_aud_SequenceEntry_setAnimationData_doc
- },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_SequenceEntry_attenuation_doc,
- "This factor is used for distance based attenuation of the "
- "source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-SequenceEntry_get_attenuation(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getAttenuation());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_attenuation(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float factor;
-
- if(!PyArg_Parse(args, "f:attenuation", &factor))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setAttenuation(factor);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_cone_angle_inner_doc,
- "The opening angle of the inner cone of the source. If the cone "
- "values of a source are set there are two (audible) cones with "
- "the apex at the :attr:`location` of the source and with infinite "
- "height, heading in the direction of the source's "
- ":attr:`orientation`.\n"
- "In the inner cone the volume is normal. Outside the outer cone "
- "the volume will be :attr:`cone_volume_outer` and in the area "
- "between the volume will be interpolated linearly.");
-
-static PyObject *
-SequenceEntry_get_cone_angle_inner(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getConeAngleInner());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_cone_angle_inner(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float angle;
-
- if(!PyArg_Parse(args, "f:cone_angle_inner", &angle))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setConeAngleInner(angle);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_cone_angle_outer_doc,
- "The opening angle of the outer cone of the source.\n\n"
- ".. seealso:: :attr:`cone_angle_inner`");
-
-static PyObject *
-SequenceEntry_get_cone_angle_outer(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getConeAngleOuter());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_cone_angle_outer(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float angle;
-
- if(!PyArg_Parse(args, "f:cone_angle_outer", &angle))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setConeAngleOuter(angle);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_cone_volume_outer_doc,
- "The volume outside the outer cone of the source.\n\n"
- ".. seealso:: :attr:`cone_angle_inner`");
-
-static PyObject *
-SequenceEntry_get_cone_volume_outer(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getConeVolumeOuter());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_cone_volume_outer(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:cone_volume_outer", &volume))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setConeVolumeOuter(volume);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_distance_maximum_doc,
- "The maximum distance of the source.\n"
- "If the listener is further away the source volume will be 0.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-SequenceEntry_get_distance_maximum(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getDistanceMaximum());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_distance_maximum(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float distance;
-
- if(!PyArg_Parse(args, "f:distance_maximum", &distance))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setDistanceMaximum(distance);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_distance_reference_doc,
- "The reference distance of the source.\n"
- "At this distance the volume will be exactly :attr:`volume`.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-SequenceEntry_get_distance_reference(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getDistanceReference());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_distance_reference(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float distance;
-
- if(!PyArg_Parse(args, "f:distance_reference", &distance))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setDistanceReference(distance);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_muted_doc,
- "Whether the entry is muted.\n");
-
-static PyObject *
-SequenceEntry_get_muted(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return PyBool_FromLong((long)(*entry)->isMuted());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_muted(SequenceEntry* self, PyObject* args, void* nothing)
-{
- if(!PyBool_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "muted is not a boolean!");
- return -1;
- }
-
- bool muted = args == Py_True;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->mute(muted);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_relative_doc,
- "Whether the source's location, velocity and orientation is relative or absolute to the listener.");
-
-static PyObject *
-SequenceEntry_get_relative(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return PyBool_FromLong((long)(*entry)->isRelative());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-SequenceEntry_set_relative(SequenceEntry* self, PyObject* args, void* nothing)
-{
- if(!PyBool_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "Value is not a boolean!");
- return -1;
- }
-
- bool relative = (args == Py_True);
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setRelative(relative);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_sound_doc,
- "The sound the entry is representing and will be played in the sequence.");
-
-static PyObject *
-SequenceEntry_get_sound(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- Sound* object = (Sound*) Sound_empty();
- if(object)
- {
- object->sound = new std::shared_ptr<ISound>((*entry)->getSound());
- return (PyObject *) object;
- }
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return nullptr;
-}
-
-static int
-SequenceEntry_set_sound(SequenceEntry* self, PyObject* args, void* nothing)
-{
- Sound* sound = checkSound(args);
-
- if(!sound)
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setSound(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound));
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_volume_maximum_doc,
- "The maximum volume of the source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-SequenceEntry_get_volume_maximum(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getVolumeMaximum());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_volume_maximum(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume_maximum", &volume))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setVolumeMaximum(volume);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_SequenceEntry_volume_minimum_doc,
- "The minimum volume of the source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-SequenceEntry_get_volume_minimum(SequenceEntry* self, void* nothing)
-{
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- return Py_BuildValue("f", (*entry)->getVolumeMinimum());
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static int
-SequenceEntry_set_volume_minimum(SequenceEntry* self, PyObject* args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume_minimum", &volume))
- return -1;
-
- try
- {
- std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
- (*entry)->setVolumeMinimum(volume);
- return 0;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyGetSetDef SequenceEntry_properties[] = {
- {(char*)"attenuation", (getter)SequenceEntry_get_attenuation, (setter)SequenceEntry_set_attenuation,
- M_aud_SequenceEntry_attenuation_doc, nullptr },
- {(char*)"cone_angle_inner", (getter)SequenceEntry_get_cone_angle_inner, (setter)SequenceEntry_set_cone_angle_inner,
- M_aud_SequenceEntry_cone_angle_inner_doc, nullptr },
- {(char*)"cone_angle_outer", (getter)SequenceEntry_get_cone_angle_outer, (setter)SequenceEntry_set_cone_angle_outer,
- M_aud_SequenceEntry_cone_angle_outer_doc, nullptr },
- {(char*)"cone_volume_outer", (getter)SequenceEntry_get_cone_volume_outer, (setter)SequenceEntry_set_cone_volume_outer,
- M_aud_SequenceEntry_cone_volume_outer_doc, nullptr },
- {(char*)"distance_maximum", (getter)SequenceEntry_get_distance_maximum, (setter)SequenceEntry_set_distance_maximum,
- M_aud_SequenceEntry_distance_maximum_doc, nullptr },
- {(char*)"distance_reference", (getter)SequenceEntry_get_distance_reference, (setter)SequenceEntry_set_distance_reference,
- M_aud_SequenceEntry_distance_reference_doc, nullptr },
- {(char*)"muted", (getter)SequenceEntry_get_muted, (setter)SequenceEntry_set_muted,
- M_aud_SequenceEntry_muted_doc, nullptr },
- {(char*)"relative", (getter)SequenceEntry_get_relative, (setter)SequenceEntry_set_relative,
- M_aud_SequenceEntry_relative_doc, nullptr },
- {(char*)"sound", (getter)SequenceEntry_get_sound, (setter)SequenceEntry_set_sound,
- M_aud_SequenceEntry_sound_doc, nullptr },
- {(char*)"volume_maximum", (getter)SequenceEntry_get_volume_maximum, (setter)SequenceEntry_set_volume_maximum,
- M_aud_SequenceEntry_volume_maximum_doc, nullptr },
- {(char*)"volume_minimum", (getter)SequenceEntry_get_volume_minimum, (setter)SequenceEntry_set_volume_minimum,
- M_aud_SequenceEntry_volume_minimum_doc, nullptr },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_SequenceEntry_doc,
- "SequenceEntry objects represent an entry of a sequenced sound.");
-
-static PyTypeObject SequenceEntryType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.SequenceEntry", /* tp_name */
- sizeof(SequenceEntry), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)SequenceEntry_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_SequenceEntry_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- SequenceEntry_methods, /* tp_methods */
- 0, /* tp_members */
- SequenceEntry_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- 0, /* tp_new */
-};
-
-AUD_API PyObject* SequenceEntry_empty()
-{
- return SequenceEntryType.tp_alloc(&SequenceEntryType, 0);
-}
-
-
-AUD_API SequenceEntry* checkSequenceEntry(PyObject* entry)
-{
- if(!PyObject_TypeCheck(entry, &SequenceEntryType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type SequenceEntry!");
- return nullptr;
- }
-
- return (SequenceEntry*)entry;
-}
-
-
-bool initializeSequenceEntry()
-{
- return PyType_Ready(&SequenceEntryType) >= 0;
-}
-
-
-void addSequenceEntryToModule(PyObject* module)
-{
- Py_INCREF(&SequenceEntryType);
- PyModule_AddObject(module, "SequenceEntry", (PyObject *)&SequenceEntryType);
-}
diff --git a/extern/audaspace/bindings/python/PySequenceEntry.h b/extern/audaspace/bindings/python/PySequenceEntry.h
deleted file mode 100644
index 7bb4ae4a281..00000000000
--- a/extern/audaspace/bindings/python/PySequenceEntry.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_SequenceEntry;
-
-typedef struct {
- PyObject_HEAD
- Reference_SequenceEntry* entry;
-} SequenceEntry;
-
-extern AUD_API PyObject* SequenceEntry_empty();
-extern AUD_API SequenceEntry* checkSequenceEntry(PyObject* entry);
-
-bool initializeSequenceEntry();
-void addSequenceEntryToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PySound.cpp b/extern/audaspace/bindings/python/PySound.cpp
deleted file mode 100644
index 2ab1974be49..00000000000
--- a/extern/audaspace/bindings/python/PySound.cpp
+++ /dev/null
@@ -1,1966 +0,0 @@
-/*******************************************************************************
- * 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 "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"
-#include "util/StreamBuffer.h"
-#include "generator/Sawtooth.h"
-#include "generator/Silence.h"
-#include "generator/Sine.h"
-#include "generator/Square.h"
-#include "generator/Triangle.h"
-#include "fx/Accumulator.h"
-#include "fx/ADSR.h"
-#include "fx/Delay.h"
-#include "fx/Envelope.h"
-#include "fx/Fader.h"
-#include "fx/Highpass.h"
-#include "fx/IIRFilter.h"
-#include "fx/Limiter.h"
-#include "fx/Loop.h"
-#include "fx/Lowpass.h"
-#include "fx/MutableSound.h"
-#include "fx/Pitch.h"
-#include "fx/Reverse.h"
-#include "fx/SoundList.h"
-#include "fx/Sum.h"
-#include "fx/Threshold.h"
-#include "fx/Volume.h"
-#include "respec/ChannelMapper.h"
-#include "respec/ChannelMapperReader.h"
-#include "respec/LinearResample.h"
-#include "respec/JOSResample.h"
-#include "respec/JOSResampleReader.h"
-#include "sequence/Double.h"
-#include "sequence/PingPong.h"
-#include "sequence/Superpose.h"
-
-#ifdef WITH_CONVOLUTION
-#include "fx/BinauralSound.h"
-#include "fx/ConvolverSound.h"
-#endif
-
-#include <cstring>
-#include <structmember.h>
-#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
-#include <numpy/ndarrayobject.h>
-
-using namespace aud;
-
-extern PyObject* AUDError;
-
-static void
-Sound_dealloc(Sound* self)
-{
- if(self->sound)
- delete reinterpret_cast<std::shared_ptr<ISound>*>(self->sound);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyObject *
-Sound_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- static const char* kwlist[] = {"filename", nullptr};
- const char* filename = nullptr;
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "s:Sound", const_cast<char**>(kwlist), &filename))
- {
- Py_DECREF(self);
- return nullptr;
- }
-
- try
- {
- self->sound = new std::shared_ptr<ISound>(new File(filename));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_data_doc,
- "data()\n\n"
- "Retrieves the data of the sound as numpy array.\n\n"
- ":return: A two dimensional numpy float array.\n"
- ":rtype: :class:`numpy.ndarray`\n\n"
- ".. note:: Best efficiency with cached sounds.");
-
-static PyObject *
-Sound_data(Sound* self)
-{
- std::shared_ptr<ISound> sound = *reinterpret_cast<std::shared_ptr<ISound>*>(self->sound);
-
- auto stream_buffer = std::dynamic_pointer_cast<StreamBuffer>(sound);
- if(!stream_buffer)
- stream_buffer = std::make_shared<StreamBuffer>(sound);
- Specs specs = stream_buffer->getSpecs();
- auto buffer = stream_buffer->getBuffer();
-
- npy_intp dimensions[2];
- dimensions[0] = buffer->getSize() / AUD_SAMPLE_SIZE(specs);
- dimensions[1] = specs.channels;
-
- PyArrayObject* array = reinterpret_cast<PyArrayObject*>(PyArray_SimpleNew(2, dimensions, NPY_FLOAT));
-
- sample_t* data = reinterpret_cast<sample_t*>(PyArray_DATA(array));
-
- std::memcpy(data, buffer->getBuffer(), buffer->getSize());
-
- Py_INCREF(array);
-
- return reinterpret_cast<PyObject*>(array);
-}
-
-PyDoc_STRVAR(M_aud_Sound_write_doc,
- "write(filename, rate, channels, format, container, codec, bitrate, buffersize)\n\n"
- "Writes the sound to a file.\n\n"
- ":arg filename: The path to write to.\n"
- ":type filename: string\n"
- ":arg rate: The sample rate to write with.\n"
- ":type rate: int\n"
- ":arg channels: The number of channels to write with.\n"
- ":type channels: int\n"
- ":arg format: The sample format to write with.\n"
- ":type format: int\n"
- ":arg container: The container format for the file.\n"
- ":type container: int\n"
- ":arg codec: The codec to use in the file.\n"
- ":type codec: int\n"
- ":arg bitrate: The bitrate to write with.\n"
- ":type bitrate: int\n"
- ":arg buffersize: The size of the writing buffer.\n"
- ":type buffersize: int\n");
-
-static PyObject *
-Sound_write(Sound* self, PyObject* args, PyObject* kwds)
-{
- const char* filename = nullptr;
- int rate = RATE_INVALID;
- Channels channels = CHANNELS_INVALID;
- SampleFormat format = FORMAT_INVALID;
- Container container = CONTAINER_INVALID;
- Codec codec = CODEC_INVALID;
- int bitrate = 0;
- int buffersize = 0;
-
- static const char* kwlist[] = {"filename", "rate", "channels", "format", "container", "codec", "bitrate", "buffersize", nullptr};
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "s|iiiiiii:write", const_cast<char**>(kwlist), &filename, &rate, &channels, &format, &container, &codec, &bitrate, &buffersize))
- return nullptr;
-
- try
- {
- std::shared_ptr<IReader> reader = (*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound))->createReader();
-
- DeviceSpecs specs;
- specs.specs = reader->getSpecs();
-
- if((rate != RATE_INVALID) && (specs.rate != rate))
- {
- specs.rate = rate;
- reader = std::make_shared<JOSResampleReader>(reader, rate);
- }
-
- if((channels != CHANNELS_INVALID) && (specs.channels != channels))
- {
- specs.channels = channels;
- reader = std::make_shared<ChannelMapperReader>(reader, channels);
- }
-
- if(format == FORMAT_INVALID)
- format = FORMAT_S16;
- specs.format = format;
-
- const char* invalid_container_error = "Container could not be determined from filename.";
-
- if(container == CONTAINER_INVALID)
- {
- std::string path = filename;
-
- if(path.length() < 4)
- {
- PyErr_SetString(AUDError, invalid_container_error);
- return nullptr;
- }
-
- std::string extension = path.substr(path.length() - 4);
-
- if(extension == ".ac3")
- container = CONTAINER_AC3;
- else if(extension == "flac")
- container = CONTAINER_FLAC;
- else if(extension == ".mkv")
- container = CONTAINER_MATROSKA;
- else if(extension == ".mp2")
- container = CONTAINER_MP2;
- else if(extension == ".mp3")
- container = CONTAINER_MP3;
- else if(extension == ".ogg")
- container = CONTAINER_OGG;
- else if(extension == ".wav")
- container = CONTAINER_WAV;
- else
- {
- PyErr_SetString(AUDError, invalid_container_error);
- return nullptr;
- }
- }
-
- if(codec == CODEC_INVALID)
- {
- switch(container)
- {
- case CONTAINER_AC3:
- codec = CODEC_AC3;
- break;
- case CONTAINER_FLAC:
- codec = CODEC_FLAC;
- break;
- case CONTAINER_MATROSKA:
- codec = CODEC_OPUS;
- break;
- case CONTAINER_MP2:
- codec = CODEC_MP2;
- break;
- case CONTAINER_MP3:
- codec = CODEC_MP3;
- break;
- case CONTAINER_OGG:
- codec = CODEC_VORBIS;
- break;
- case CONTAINER_WAV:
- codec = CODEC_PCM;
- break;
- default:
- PyErr_SetString(AUDError, "Unknown container, cannot select default codec.");
- return nullptr;
- }
- }
-
- if(buffersize <= 0)
- buffersize = AUD_DEFAULT_BUFFER_SIZE;
-
- std::shared_ptr<IWriter> writer = FileWriter::createWriter(filename, specs, container, codec, bitrate);
- FileWriter::writeReader(reader, writer, 0, buffersize);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-
- Py_RETURN_NONE;
-}
-
-PyDoc_STRVAR(M_aud_Sound_buffer_doc,
- "buffer(data, rate)\n\n"
- "Creates a sound from a data buffer.\n\n"
- ":arg data: The data as two dimensional numpy array.\n"
- ":type data: numpy.ndarray\n"
- ":arg rate: The sample rate.\n"
- ":type rate: double\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_buffer(PyTypeObject* type, PyObject* args)
-{
- PyArrayObject* array = nullptr;
- double rate = RATE_INVALID;
-
- if(!PyArg_ParseTuple(args, "Od:buffer", &array, &rate))
- return nullptr;
-
- if((!PyObject_TypeCheck(reinterpret_cast<PyObject*>(array), &PyArray_Type)) || (PyArray_TYPE(array) != NPY_FLOAT))
- {
- PyErr_SetString(PyExc_TypeError, "The data needs to be supplied as float32 numpy array!");
- return nullptr;
- }
-
- if(PyArray_NDIM(array) > 2)
- {
- PyErr_SetString(PyExc_TypeError, "The array needs to have one or two dimensions!");
- return nullptr;
- }
-
- if(rate <= 0)
- {
- PyErr_SetString(PyExc_TypeError, "The sample rate has to be positive!");
- return nullptr;
- }
-
- Specs specs;
- specs.rate = rate;
- specs.channels = CHANNELS_MONO;
-
- if(PyArray_NDIM(array) == 2)
- specs.channels = static_cast<Channels>(PyArray_DIM(array, 1));
-
- int size = PyArray_DIM(array, 0) * AUD_SAMPLE_SIZE(specs);
-
- std::shared_ptr<Buffer> buffer = std::make_shared<Buffer>(size);
-
- std::memcpy(buffer->getBuffer(), PyArray_DATA(array), size);
-
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<StreamBuffer>(new StreamBuffer(buffer, specs));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_cache_doc,
- "cache()\n\n"
- "Caches a sound into RAM.\n"
- "This saves CPU usage needed for decoding and file access if the "
- "underlying sound reads from a file on the harddisk, but it "
- "consumes a lot of memory.\n\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. note:: Only known-length factories can be buffered.\n\n"
- ".. warning:: Raw PCM data needs a lot of space, only buffer "
- "short factories.");
-
-static PyObject *
-Sound_cache(Sound* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new StreamBuffer(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_file_doc,
- "file(filename)\n\n"
- "Creates a sound object of a sound file.\n\n"
- ":arg filename: Path of the file.\n"
- ":type filename: string\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. warning:: If the file doesn't exist or can't be read you will "
- "not get an exception immediately, but when you try to start "
- "playback of that sound.");
-
-static PyObject *
-Sound_file(PyTypeObject* type, PyObject* args)
-{
- const char* filename = nullptr;
-
- if(!PyArg_ParseTuple(args, "s:file", &filename))
- return nullptr;
-
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<ISound>(new File(filename));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_sawtooth_doc,
- "sawtooth(frequency, rate=48000)\n\n"
- "Creates a sawtooth sound which plays a sawtooth wave.\n\n"
- ":arg frequency: The frequency of the sawtooth wave in Hz.\n"
- ":type frequency: float\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_sawtooth(PyTypeObject* type, PyObject* args)
-{
- float frequency;
- double rate = 48000;
-
- if(!PyArg_ParseTuple(args, "f|d:sawtooth", &frequency, &rate))
- return nullptr;
-
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<ISound>(new Sawtooth(frequency, (SampleRate)rate));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_silence_doc,
- "silence()\n\n"
- "Creates a silence sound which plays simple silence.\n\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_silence(PyTypeObject* type)
-{
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<ISound>(new Silence());
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_sine_doc,
- "sine(frequency, rate=48000)\n\n"
- "Creates a sine sound which plays a sine wave.\n\n"
- ":arg frequency: The frequency of the sine wave in Hz.\n"
- ":type frequency: float\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_sine(PyTypeObject* type, PyObject* args)
-{
- float frequency;
- double rate = 48000;
-
- if(!PyArg_ParseTuple(args, "f|d:sine", &frequency, &rate))
- return nullptr;
-
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<ISound>(new Sine(frequency, (SampleRate)rate));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_square_doc,
- "square(frequency, rate=48000)\n\n"
- "Creates a square sound which plays a square wave.\n\n"
- ":arg frequency: The frequency of the square wave in Hz.\n"
- ":type frequency: float\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_square(PyTypeObject* type, PyObject* args)
-{
- float frequency;
- double rate = 48000;
-
- if(!PyArg_ParseTuple(args, "f|d:square", &frequency, &rate))
- return nullptr;
-
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<ISound>(new Square(frequency, (SampleRate)rate));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_triangle_doc,
- "triangle(frequency, rate=48000)\n\n"
- "Creates a triangle sound which plays a triangle wave.\n\n"
- ":arg frequency: The frequency of the triangle wave in Hz.\n"
- ":type frequency: float\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_triangle(PyTypeObject* type, PyObject* args)
-{
- float frequency;
- double rate = 48000;
-
- if(!PyArg_ParseTuple(args, "f|d:triangle", &frequency, &rate))
- return nullptr;
-
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<ISound>(new Triangle(frequency, (SampleRate)rate));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_accumulate_doc,
- "accumulate(additive=False)\n\n"
- "Accumulates a sound by summing over positive input differences thus generating a monotonic sigal. "
- "If additivity is set to true negative input differences get added too, but positive ones with a factor of two. "
- "Note that with additivity the signal is not monotonic anymore.\n\n"
- ":arg additive: Whether the accumulation should be additive or not.\n"
- ":type time: bool\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_accumulate(Sound* self, PyObject* args)
-{
- bool additive = false;
- PyObject* additiveo;
-
- if(!PyArg_ParseTuple(args, "|O:accumulate", &additiveo))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- if(additiveo != nullptr)
- {
- if(!PyBool_Check(additiveo))
- {
- PyErr_SetString(PyExc_TypeError, "additive is not a boolean!");
- return nullptr;
- }
-
- additive = additiveo == Py_True;
- }
-
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Accumulator(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), additive));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_ADSR_doc,
- "ADSR(attack,decay,sustain,release)\n\n"
- "Attack-Decay-Sustain-Release envelopes the volume of a sound. "
- "Note: there is currently no way to trigger the release with this API.\n\n"
- ":arg attack: The attack time in seconds.\n"
- ":type attack: float\n"
- ":arg decay: The decay time in seconds.\n"
- ":type decay: float\n"
- ":arg sustain: The sustain level.\n"
- ":type sustain: float\n"
- ":arg release: The release level.\n"
- ":type release: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_ADSR(Sound* self, PyObject* args)
-{
- float attack, decay, sustain, release;
-
- if(!PyArg_ParseTuple(args, "ffff:ADSR", &attack, &decay, &sustain, &release))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new ADSR(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), attack, decay, sustain, release));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_delay_doc,
- "delay(time)\n\n"
- "Delays by playing adding silence in front of the other sound's "
- "data.\n\n"
- ":arg time: How many seconds of silence should be added before "
- "the sound.\n"
- ":type time: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_delay(Sound* self, PyObject* args)
-{
- float delay;
-
- if(!PyArg_ParseTuple(args, "f:delay", &delay))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Delay(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), delay));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_envelope_doc,
- "envelope(attack, release, threshold, arthreshold)\n\n"
- "Delays by playing adding silence in front of the other sound's "
- "data.\n\n"
- ":arg attack: The attack factor.\n"
- ":type attack: float\n"
- ":arg release: The release factor.\n"
- ":type release: float\n"
- ":arg threshold: The general threshold value.\n"
- ":type threshold: float\n"
- ":arg arthreshold: The attack/release threshold value.\n"
- ":type arthreshold: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_envelope(Sound* self, PyObject* args)
-{
- float attack, release, threshold, arthreshold;
-
- if(!PyArg_ParseTuple(args, "ffff:envelope", &attack, &release, &threshold, &arthreshold))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Envelope(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), attack, release, threshold, arthreshold));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_fadein_doc,
- "fadein(start, length)\n\n"
- "Fades a sound in by raising the volume linearly in the given "
- "time interval.\n\n"
- ":arg start: Time in seconds when the fading should start.\n"
- ":type start: float\n"
- ":arg length: Time in seconds how long the fading should last.\n"
- ":type length: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. note:: Before the fade starts it plays silence.");
-
-static PyObject *
-Sound_fadein(Sound* self, PyObject* args)
-{
- float start, length;
-
- if(!PyArg_ParseTuple(args, "ff:fadein", &start, &length))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Fader(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), FADE_IN, start, length));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_fadeout_doc,
- "fadeout(start, length)\n\n"
- "Fades a sound in by lowering the volume linearly in the given "
- "time interval.\n\n"
- ":arg start: Time in seconds when the fading should start.\n"
- ":type start: float\n"
- ":arg length: Time in seconds how long the fading should last.\n"
- ":type length: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. note:: After the fade this sound plays silence, so that "
- "the length of the sound is not altered.");
-
-static PyObject *
-Sound_fadeout(Sound* self, PyObject* args)
-{
- float start, length;
-
- if(!PyArg_ParseTuple(args, "ff:fadeout", &start, &length))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Fader(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), FADE_OUT, start, length));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_filter_doc,
- "filter(b, a = (1))\n\n"
- "Filters a sound with the supplied IIR filter coefficients.\n"
- "Without the second parameter you'll get a FIR filter.\n"
- "If the first value of the a sequence is 0 it will be set to 1 "
- "automatically.\n"
- "If the first value of the a sequence is neither 0 nor 1, all "
- "filter coefficients will be scaled by this value so that it is 1 "
- "in the end, you don't have to scale yourself.\n\n"
- ":arg b: The nominator filter coefficients.\n"
- ":type b: sequence of float\n"
- ":arg a: The denominator filter coefficients.\n"
- ":type a: sequence of float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_filter(Sound* self, PyObject* args)
-{
- PyObject* py_b;
- PyObject* py_a = nullptr;
- Py_ssize_t py_a_len;
- Py_ssize_t py_b_len;
-
- if(!PyArg_ParseTuple(args, "O|O:filter", &py_b, &py_a))
- return nullptr;
-
- if(!PySequence_Check(py_b) || (py_a != nullptr && !PySequence_Check(py_a)))
- {
- PyErr_SetString(PyExc_TypeError, "Parameter is not a sequence!");
- return nullptr;
- }
-
- py_a_len= py_a ? PySequence_Size(py_a) : 0;
- py_b_len= PySequence_Size(py_b);
-
- if(!py_b_len || ((py_a != nullptr) && !py_a_len))
- {
- PyErr_SetString(PyExc_ValueError, "The sequence has to contain at least one value!");
- return nullptr;
- }
-
- std::vector<float> a, b;
- PyObject* py_value;
- float value;
-
- for(Py_ssize_t i = 0; i < py_b_len; i++)
- {
- py_value = PySequence_GetItem(py_b, i);
- value= (float)PyFloat_AsDouble(py_value);
- Py_DECREF(py_value);
-
- if(value == -1.0f && PyErr_Occurred()) {
- return nullptr;
- }
-
- b.push_back(value);
- }
-
- if(py_a)
- {
- for(Py_ssize_t i = 0; i < py_a_len; i++)
- {
- py_value = PySequence_GetItem(py_a, i);
- value= (float)PyFloat_AsDouble(py_value);
- Py_DECREF(py_value);
-
- if(value == -1.0f && PyErr_Occurred()) {
- return nullptr;
- }
-
- a.push_back(value);
- }
-
- if(a[0] == 0)
- a[0] = 1;
- }
- else
- a.push_back(1);
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new IIRFilter(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), b, a));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_highpass_doc,
- "highpass(frequency, Q=0.5)\n\n"
- "Creates a second order highpass filter based on the transfer "
- "function H(s) = s^2 / (s^2 + s/Q + 1)\n\n"
- ":arg frequency: The cut off trequency of the highpass.\n"
- ":type frequency: float\n"
- ":arg Q: Q factor of the lowpass.\n"
- ":type Q: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_highpass(Sound* self, PyObject* args)
-{
- float frequency;
- float Q = 0.5;
-
- if(!PyArg_ParseTuple(args, "f|f:highpass", &frequency, &Q))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Highpass(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), frequency, Q));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_limit_doc,
- "limit(start, end)\n\n"
- "Limits a sound within a specific start and end time.\n\n"
- ":arg start: Start time in seconds.\n"
- ":type start: float\n"
- ":arg end: End time in seconds.\n"
- ":type end: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_limit(Sound* self, PyObject* args)
-{
- float start, end;
-
- if(!PyArg_ParseTuple(args, "ff:limit", &start, &end))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Limiter(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), start, end));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_loop_doc,
- "loop(count)\n\n"
- "Loops a sound.\n\n"
- ":arg count: How often the sound should be looped. "
- "Negative values mean endlessly.\n"
- ":type count: integer\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. note:: This is a filter function, you might consider using "
- ":attr:`Handle.loop_count` instead.");
-
-static PyObject *
-Sound_loop(Sound* self, PyObject* args)
-{
- int loop;
-
- if(!PyArg_ParseTuple(args, "i:loop", &loop))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Loop(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), loop));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_lowpass_doc,
- "lowpass(frequency, Q=0.5)\n\n"
- "Creates a second order lowpass filter based on the transfer "
- "function H(s) = 1 / (s^2 + s/Q + 1)\n\n"
- ":arg frequency: The cut off trequency of the lowpass.\n"
- ":type frequency: float\n"
- ":arg Q: Q factor of the lowpass.\n"
- ":type Q: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_lowpass(Sound* self, PyObject* args)
-{
- float frequency;
- float Q = 0.5;
-
- if(!PyArg_ParseTuple(args, "f|f:lowpass", &frequency, &Q))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Lowpass(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), frequency, Q));
- }
- 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"
- ":arg factor: The factor to change the pitch with.\n"
- ":type factor: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. note:: This is done by changing the sample rate of the "
- "underlying sound, which has to be an integer, so the factor "
- "value rounded and the factor may not be 100 % accurate.\n\n"
- ".. note:: This is a filter function, you might consider using "
- ":attr:`Handle.pitch` instead.");
-
-static PyObject *
-Sound_pitch(Sound* self, PyObject* args)
-{
- float factor;
-
- if(!PyArg_ParseTuple(args, "f:pitch", &factor))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Pitch(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), factor));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_rechannel_doc,
- "rechannel(channels)\n\n"
- "Rechannels the sound.\n\n"
- ":arg channels: The new channel configuration.\n"
- ":type channels: int\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_rechannel(Sound* self, PyObject* args)
-{
- int channels;
-
- if(!PyArg_ParseTuple(args, "i:rechannel", &channels))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- DeviceSpecs specs;
- specs.channels = static_cast<Channels>(channels);
- specs.rate = RATE_INVALID;
- specs.format = FORMAT_INVALID;
- parent->sound = new std::shared_ptr<ISound>(new ChannelMapper(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), specs));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_resample_doc,
- "resample(rate, high_quality)\n\n"
- "Resamples the sound.\n\n"
- ":arg rate: The new sample rate.\n"
- ":type rate: double\n"
- ":arg high_quality: When true use a higher quality but slower resampler.\n"
- ":type high_quality: bool\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_resample(Sound* self, PyObject* args)
-{
- double rate;
- PyObject* high_qualityo;
- bool high_quality = false;
-
- if(!PyArg_ParseTuple(args, "d|O:resample", &rate, &high_qualityo))
- return nullptr;
-
- if(!PyBool_Check(high_qualityo))
- {
- PyErr_SetString(PyExc_TypeError, "high_quality is not a boolean!");
- return nullptr;
- }
-
- high_quality = high_qualityo == Py_True;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- DeviceSpecs specs;
- specs.channels = CHANNELS_INVALID;
- specs.rate = rate;
- specs.format = FORMAT_INVALID;
- if(high_quality)
- parent->sound = new std::shared_ptr<ISound>(new JOSResample(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), specs));
- else
- parent->sound = new std::shared_ptr<ISound>(new LinearResample(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), specs));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_reverse_doc,
- "reverse()\n\n"
- "Plays a sound reversed.\n\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. note:: The sound has to have a finite length and has to be "
- "seekable. It's recommended to use this only with factories with "
- "fast and accurate seeking, which is not true for encoded audio "
- "files, such ones should be buffered using :meth:`cache` before "
- "being played reversed.\n\n"
- ".. warning:: If seeking is not accurate in the underlying sound "
- "you'll likely hear skips/jumps/cracks.");
-
-static PyObject *
-Sound_reverse(Sound* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Reverse(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_sum_doc,
- "sum()\n\n"
- "Sums the samples of a sound.\n\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_sum(Sound* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Sum(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_threshold_doc,
- "threshold(threshold = 0)\n\n"
- "Makes a threshold wave out of an audio wave by setting all samples "
- "with a amplitude >= threshold to 1, all <= -threshold to -1 and "
- "all between to 0.\n\n"
- ":arg threshold: Threshold value over which an amplitude counts "
- "non-zero.\n"
- ":type threshold: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_threshold(Sound* self, PyObject* args)
-{
- float threshold = 0;
-
- if(!PyArg_ParseTuple(args, "|f:threshold", &threshold))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Threshold(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), threshold));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_volume_doc,
- "volume(volume)\n\n"
- "Changes the volume of a sound.\n\n"
- ":arg volume: The new volume..\n"
- ":type volume: float\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`\n\n"
- ".. note:: Should be in the range [0, 1] to avoid clipping.\n\n"
- ".. note:: This is a filter function, you might consider using "
- ":attr:`Handle.volume` instead.");
-
-static PyObject *
-Sound_volume(Sound* self, PyObject* args)
-{
- float volume;
-
- if(!PyArg_ParseTuple(args, "f:volume", &volume))
- return nullptr;
-
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Volume(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), volume));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_join_doc,
- "join(sound)\n\n"
- "Plays two factories in sequence.\n\n"
- ":arg sound: The sound to play second.\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_join(Sound* self, PyObject* object)
-{
- PyTypeObject* type = Py_TYPE(self);
-
- if(!PyObject_TypeCheck(object, type))
- {
- PyErr_SetString(PyExc_TypeError, "Object has to be of type Sound!");
- return nullptr;
- }
-
- Sound* parent;
- Sound* child = (Sound*)object;
-
- parent = (Sound*)type->tp_alloc(type, 0);
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new Double(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<ISound>*>(child->sound)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_mix_doc,
- "mix(sound)\n\n"
- "Mixes two factories.\n\n"
- ":arg sound: The sound to mix 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_mix(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<ISound>(new Superpose(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<ISound>*>(child->sound)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_pingpong_doc,
- "pingpong()\n\n"
- "Plays a sound forward and then backward.\n"
- "This is like joining a sound with its reverse.\n\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_pingpong(Sound* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new PingPong(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_list_doc,
- "list()\n\n"
- "Creates an empty sound list that can contain several sounds.\n\n"
- ":arg random: wether the playback will be random or not.\n"
- ":type random: int\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_list(PyTypeObject* type, PyObject* args)
-{
- int random;
-
- if(!PyArg_ParseTuple(args, "i:random", &random))
- return nullptr;
-
- Sound* self;
-
- self = (Sound*)type->tp_alloc(type, 0);
- if(self != nullptr)
- {
- try
- {
- self->sound = new std::shared_ptr<ISound>(new SoundList(random));
- }
- catch(Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Sound_mutable_doc,
- "mutable()\n\n"
- "Creates a sound that will be restarted when sought backwards.\n"
- "If the original sound is a sound list, the playing sound can change.\n\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_mutable(Sound* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Sound* parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new MutableSound(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_list_addSound_doc,
- "addSound(sound)\n\n"
- "Adds a new sound to a sound list.\n\n"
- ":arg sound: The sound that will be added to the list.\n"
- ":type sound: :class:`Sound`\n\n"
- ".. note:: You can only add a sound to a sound list.");
-
-static PyObject *
-Sound_list_addSound(Sound* self, PyObject* object)
-{
- PyTypeObject* type = Py_TYPE(self);
-
- if(!PyObject_TypeCheck(object, type))
- {
- PyErr_SetString(PyExc_TypeError, "Object has to be of type Sound!");
- return nullptr;
- }
-
- Sound* child = (Sound*)object;
- try
- {
- (*reinterpret_cast<std::shared_ptr<SoundList>*>(self->sound))->addSound(*reinterpret_cast<std::shared_ptr<ISound>*>(child->sound));
- Py_RETURN_NONE;
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-#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"
- ":arg impulseResponse: The filter with which convolve the sound.\n"
- ":type impulseResponse: :class:`ImpulseResponse`\n"
- ":arg threadPool: A thread pool used to parallelize convolution.\n"
- ":type threadPool: :class:`ThreadPool`\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_convolver(Sound* self, PyObject* args)
-{
- PyTypeObject* type = Py_TYPE(self);
-
- PyObject* object1;
- PyObject* object2;
-
- if(!PyArg_ParseTuple(args, "OO:convolver", &object1, &object2))
- return nullptr;
-
- ImpulseResponseP* filter = checkImpulseResponse(object1);
- if(!filter)
- return nullptr;
-
- ThreadPoolP* threadPool = checkThreadPool(object2);
- if(!threadPool)
- return nullptr;
-
- Sound* parent;
- parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new ConvolverSound(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<ImpulseResponse>*>(filter->impulseResponse), *reinterpret_cast<std::shared_ptr<ThreadPool>*>(threadPool->threadPool)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Sound_binaural_doc,
- "convolver()\n\n"
- "Creates a binaural sound using another sound as source. The original sound must be mono\n\n"
- ":arg hrtfs: An HRTF set.\n"
- ":type hrtf: :class:`HRTF`\n"
- ":arg source: An object representing the source position of the sound.\n"
- ":type source: :class:`Source`\n"
- ":arg threadPool: A thread pool used to parallelize convolution.\n"
- ":type threadPool: :class:`ThreadPool`\n"
- ":return: The created :class:`Sound` object.\n"
- ":rtype: :class:`Sound`");
-
-static PyObject *
-Sound_binaural(Sound* self, PyObject* args)
-{
- PyTypeObject* type = Py_TYPE(self);
-
- PyObject* object1;
- PyObject* object2;
- PyObject* object3;
-
- if(!PyArg_ParseTuple(args, "OOO:binaural", &object1, &object2, &object3))
- return nullptr;
-
- HRTFP* hrtfs = checkHRTF(object1);
- if(!hrtfs)
- return nullptr;
-
- SourceP* source = checkSource(object2);
- if(!hrtfs)
- return nullptr;
-
- ThreadPoolP* threadPool = checkThreadPool(object3);
- if(!threadPool)
- return nullptr;
-
- Sound* parent;
- parent = (Sound*)type->tp_alloc(type, 0);
-
- if(parent != nullptr)
- {
- try
- {
- parent->sound = new std::shared_ptr<ISound>(new BinauralSound(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<HRTF>*>(hrtfs->hrtf), *reinterpret_cast<std::shared_ptr<Source>*>(source->source), *reinterpret_cast<std::shared_ptr<ThreadPool>*>(threadPool->threadPool)));
- }
- catch(Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)parent;
-}
-
-#endif
-
-static PyMethodDef Sound_methods[] = {
- {"data", (PyCFunction)Sound_data, METH_NOARGS,
- M_aud_Sound_data_doc
- },
- {"write", (PyCFunction)Sound_write, METH_VARARGS | METH_KEYWORDS,
- M_aud_Sound_write_doc
- },
- {"buffer", (PyCFunction)Sound_buffer, METH_VARARGS | METH_CLASS,
- M_aud_Sound_buffer_doc
- },
- {"cache", (PyCFunction)Sound_cache, METH_NOARGS,
- M_aud_Sound_cache_doc
- },
- {"file", (PyCFunction)Sound_file, METH_VARARGS | METH_CLASS,
- M_aud_Sound_file_doc
- },
- {"sawtooth", (PyCFunction)Sound_sawtooth, METH_VARARGS | METH_CLASS,
- M_aud_Sound_sawtooth_doc
- },
- {"silence", (PyCFunction)Sound_silence, METH_NOARGS | METH_CLASS,
- M_aud_Sound_silence_doc
- },
- {"sine", (PyCFunction)Sound_sine, METH_VARARGS | METH_CLASS,
- M_aud_Sound_sine_doc
- },
- {"square", (PyCFunction)Sound_square, METH_VARARGS | METH_CLASS,
- M_aud_Sound_square_doc
- },
- {"triangle", (PyCFunction)Sound_triangle, METH_VARARGS | METH_CLASS,
- M_aud_Sound_triangle_doc
- },
- {"accumulate", (PyCFunction)Sound_accumulate, METH_VARARGS,
- M_aud_Sound_accumulate_doc
- },
- {"ADSR", (PyCFunction)Sound_ADSR, METH_VARARGS,
- M_aud_Sound_ADSR_doc
- },
- {"delay", (PyCFunction)Sound_delay, METH_VARARGS,
- M_aud_Sound_delay_doc
- },
- {"envelope", (PyCFunction)Sound_envelope, METH_VARARGS,
- M_aud_Sound_envelope_doc
- },
- {"fadein", (PyCFunction)Sound_fadein, METH_VARARGS,
- M_aud_Sound_fadein_doc
- },
- {"fadeout", (PyCFunction)Sound_fadeout, METH_VARARGS,
- M_aud_Sound_fadeout_doc
- },
- {"filter", (PyCFunction)Sound_filter, METH_VARARGS,
- M_aud_Sound_filter_doc
- },
- {"highpass", (PyCFunction)Sound_highpass, METH_VARARGS,
- M_aud_Sound_highpass_doc
- },
- {"limit", (PyCFunction)Sound_limit, METH_VARARGS,
- M_aud_Sound_limit_doc
- },
- {"loop", (PyCFunction)Sound_loop, METH_VARARGS,
- M_aud_Sound_loop_doc
- },
- {"lowpass", (PyCFunction)Sound_lowpass, METH_VARARGS,
- M_aud_Sound_lowpass_doc
- },
- {"pitch", (PyCFunction)Sound_pitch, METH_VARARGS,
- M_aud_Sound_pitch_doc
- },
- {"rechannel", (PyCFunction)Sound_rechannel, METH_VARARGS,
- M_aud_Sound_rechannel_doc
- },
- {"resample", (PyCFunction)Sound_resample, METH_VARARGS,
- M_aud_Sound_resample_doc
- },
- {"reverse", (PyCFunction)Sound_reverse, METH_NOARGS,
- M_aud_Sound_reverse_doc
- },
- {"sum", (PyCFunction)Sound_sum, METH_NOARGS,
- M_aud_Sound_sum_doc
- },
- {"threshold", (PyCFunction)Sound_threshold, METH_VARARGS,
- M_aud_Sound_threshold_doc
- },
- {"volume", (PyCFunction)Sound_volume, METH_VARARGS,
- M_aud_Sound_volume_doc
- },
- {"join", (PyCFunction)Sound_join, METH_O,
- M_aud_Sound_join_doc
- },
- {"mix", (PyCFunction)Sound_mix, METH_O,
- M_aud_Sound_mix_doc
- },
- { "pingpong", (PyCFunction)Sound_pingpong, METH_NOARGS,
- M_aud_Sound_pingpong_doc
- },
- { "list", (PyCFunction)Sound_list, METH_VARARGS | METH_CLASS,
- M_aud_Sound_list_doc
- },
- { "mutable", (PyCFunction)Sound_mutable, METH_NOARGS,
- M_aud_Sound_mutable_doc
- },
- { "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 */
-};
-
-PyDoc_STRVAR(M_aud_Sound_specs_doc,
- "The sample specification of the sound as a tuple with rate and channel count.");
-
-static PyObject *
-Sound_get_specs(Sound* self, void* nothing)
-{
- try
- {
- Specs specs = (*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound))->createReader()->getSpecs();
- return Py_BuildValue("(di)", specs.rate, specs.channels);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Sound_length_doc,
- "The sample specification of the sound as a tuple with rate and channel count.");
-
-static PyObject *
-Sound_get_length(Sound* self, void* nothing)
-{
- try
- {
- int length = (*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound))->createReader()->getLength();
- return Py_BuildValue("i", length);
- }
- catch(Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyGetSetDef Sound_properties[] = {
- {(char*)"specs", (getter)Sound_get_specs, nullptr,
- M_aud_Sound_specs_doc, nullptr },
- {(char*)"length", (getter)Sound_get_length, nullptr,
- M_aud_Sound_length_doc, nullptr },
- {nullptr} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Sound_doc,
- "Sound objects are immutable and represent a sound that can be "
- "played simultaneously multiple times. They are called factories "
- "because they create reader objects internally that are used for "
- "playback.");
-
-PyTypeObject SoundType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.Sound", /* tp_name */
- sizeof(Sound), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Sound_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Sound_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Sound_methods, /* tp_methods */
- 0, /* tp_members */
- Sound_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- Sound_new, /* tp_new */
-};
-
-AUD_API PyObject* Sound_empty()
-{
- return SoundType.tp_alloc(&SoundType, 0);
-}
-
-AUD_API Sound* checkSound(PyObject* sound)
-{
- if(!PyObject_TypeCheck(sound, &SoundType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Sound!");
- return nullptr;
- }
-
- return (Sound*)sound;
-}
-
-
-bool initializeSound()
-{
- import_array();
-
- return PyType_Ready(&SoundType) >= 0;
-}
-
-
-void addSoundToModule(PyObject* module)
-{
- Py_INCREF(&SoundType);
- PyModule_AddObject(module, "Sound", (PyObject *)&SoundType);
-}
diff --git a/extern/audaspace/bindings/python/PySound.h b/extern/audaspace/bindings/python/PySound.h
deleted file mode 100644
index 657bb2131e6..00000000000
--- a/extern/audaspace/bindings/python/PySound.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_ISound;
-
-typedef struct {
- PyObject_HEAD
- Reference_ISound* sound;
-} Sound;
-
-extern AUD_API PyObject* Sound_empty();
-extern AUD_API Sound* checkSound(PyObject* sound);
-
-bool initializeSound();
-void addSoundToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PySource.cpp b/extern/audaspace/bindings/python/PySource.cpp
deleted file mode 100644
index a948cf46645..00000000000
--- a/extern/audaspace/bindings/python/PySource.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "PySource.h"
-
-#include "Exception.h"
-#include "fx/Source.h"
-
-#include <memory>
-
-extern PyObject* AUDError;
-
-static PyObject *
-Source_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- SourceP* self = (SourceP*)type->tp_alloc(type, 0);
-
- if(self != nullptr)
- {
- float azimuth, elevation, distance;
- if(!PyArg_ParseTuple(args, "fff:angles", &azimuth, &elevation, &distance))
- return nullptr;
-
- try
- {
- self->source = new std::shared_ptr<aud::Source>(new aud::Source(azimuth, elevation, distance));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-static void
-Source_dealloc(SourceP* self)
-{
- if(self->source)
- delete reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyMethodDef Source_methods[] = {
- { nullptr } /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Source_azimuth_doc,
- "The azimuth angle.");
-
-static int
-Source_set_azimuth(SourceP* self, PyObject* args, void* nothing)
-{
- float azimuth;
-
- if(!PyArg_Parse(args, "f:azimuth", &azimuth))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->setAzimuth(azimuth);
- return 0;
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyObject *
-Source_get_azimuth(SourceP* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->getAzimuth());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Source_elevation_doc,
- "The elevation angle.");
-
-static int
-Source_set_elevation(SourceP* self, PyObject* args, void* nothing)
-{
- float elevation;
-
- if(!PyArg_Parse(args, "f:elevation", &elevation))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->setElevation(elevation);
- return 0;
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyObject *
-Source_get_elevation(SourceP* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->getElevation());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-PyDoc_STRVAR(M_aud_Source_distance_doc,
- "The distance value. 0 is min, 1 is max.");
-
-static int
-Source_set_distance(SourceP* self, PyObject* args, void* nothing)
-{
- float distance;
-
- if(!PyArg_Parse(args, "f:distance", &distance))
- return -1;
-
- try
- {
- (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->setDistance(distance);
- return 0;
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- }
-
- return -1;
-}
-
-static PyObject *
-Source_get_distance(SourceP* self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->getDistance());
- }
- catch(aud::Exception& e)
- {
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
-}
-
-static PyGetSetDef Source_properties[] = {
- { (char*)"azimuth", (getter)Source_get_azimuth, (setter)Source_set_azimuth,
- M_aud_Source_azimuth_doc, nullptr },
- { (char*)"elevation", (getter)Source_get_elevation, (setter)Source_set_elevation,
- M_aud_Source_elevation_doc, nullptr },
- { (char*)"distance", (getter)Source_get_distance, (setter)Source_set_distance,
- M_aud_Source_distance_doc, nullptr },
- { nullptr } /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Source_doc,
- "The source object represents the source position of a binaural sound.");
-
-PyTypeObject SourceType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.Source", /* tp_name */
- sizeof(SourceP), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Source_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Source_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Source_methods, /* tp_methods */
- 0, /* tp_members */
- Source_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- Source_new, /* tp_new */
-};
-
-AUD_API PyObject* Source_empty()
-{
- return SourceType.tp_alloc(&SourceType, 0);
-}
-
-
-AUD_API SourceP* checkSource(PyObject* source)
-{
- if(!PyObject_TypeCheck(source, &SourceType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Source!");
- return nullptr;
- }
-
- return (SourceP*)source;
-}
-
-
-bool initializeSource()
-{
- return PyType_Ready(&SourceType) >= 0;
-}
-
-
-void addSourceToModule(PyObject* module)
-{
- Py_INCREF(&SourceType);
- PyModule_AddObject(module, "Source", (PyObject *)&SourceType);
-}
diff --git a/extern/audaspace/bindings/python/PySource.h b/extern/audaspace/bindings/python/PySource.h
deleted file mode 100644
index 19960d80901..00000000000
--- a/extern/audaspace/bindings/python/PySource.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_Source;
-
-typedef struct {
- PyObject_HEAD
- Reference_Source* source;
-} SourceP;
-
-extern AUD_API PyObject* Source_empty();
-extern AUD_API SourceP* checkSource(PyObject* source);
-
-bool initializeSource();
-void addSourceToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyThreadPool.cpp b/extern/audaspace/bindings/python/PyThreadPool.cpp
deleted file mode 100644
index 75811f08273..00000000000
--- a/extern/audaspace/bindings/python/PyThreadPool.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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 "PyThreadPool.h"
-
-#include "Exception.h"
-#include "util/ThreadPool.h"
-
-extern PyObject* AUDError;
-
-static PyObject *
-ThreadPool_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
-{
- ThreadPoolP* self = (ThreadPoolP*)type->tp_alloc(type, 0);
-
- if(self != nullptr)
- {
- unsigned int nThreads;
- if(!PyArg_ParseTuple(args, "I:nThreads", &nThreads))
- return nullptr;
-
- try
- {
- self->threadPool = new std::shared_ptr<aud::ThreadPool>(new aud::ThreadPool(nThreads));
- }
- catch(aud::Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.what());
- return nullptr;
- }
- }
-
- return (PyObject *)self;
-}
-
-static void
-ThreadPool_dealloc(ThreadPoolP* self)
-{
- if(self->threadPool)
- delete reinterpret_cast<std::shared_ptr<aud::ThreadPool>*>(self->threadPool);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyMethodDef ThreadPool_methods[] = {
- { nullptr } /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_ThreadPool_doc,
- "A ThreadPool is used to parallelize convolution efficiently.");
-
-PyTypeObject ThreadPoolType = {
- PyVarObject_HEAD_INIT(nullptr, 0)
- "aud.ThreadPool", /* tp_name */
- sizeof(ThreadPoolP), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)ThreadPool_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_ThreadPool_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- ThreadPool_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- ThreadPool_new, /* tp_new */
-};
-
-AUD_API PyObject* ThreadPool_empty()
-{
- return ThreadPoolType.tp_alloc(&ThreadPoolType, 0);
-}
-
-
-AUD_API ThreadPoolP* checkThreadPool(PyObject* threadPool)
-{
- if(!PyObject_TypeCheck(threadPool, &ThreadPoolType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type ThreadPool!");
- return nullptr;
- }
-
- return (ThreadPoolP*)threadPool;
-}
-
-
-bool initializeThreadPool()
-{
- return PyType_Ready(&ThreadPoolType) >= 0;
-}
-
-
-void addThreadPoolToModule(PyObject* module)
-{
- Py_INCREF(&ThreadPoolType);
- PyModule_AddObject(module, "ThreadPool", (PyObject *)&ThreadPoolType);
-}
diff --git a/extern/audaspace/bindings/python/PyThreadPool.h b/extern/audaspace/bindings/python/PyThreadPool.h
deleted file mode 100644
index e38d905f52a..00000000000
--- a/extern/audaspace/bindings/python/PyThreadPool.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
-* Copyright 2009-2015 Juan Francisco Crespo Galán
-*
-* 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
-
-#include <Python.h>
-#include "Audaspace.h"
-
-typedef void Reference_ThreadPool;
-
-typedef struct {
- PyObject_HEAD
- Reference_ThreadPool* threadPool;
-} ThreadPoolP;
-
-extern AUD_API PyObject* ThreadPool_empty();
-extern AUD_API ThreadPoolP* checkThreadPool(PyObject* ThreadPool);
-
-bool initializeThreadPool();
-void addThreadPoolToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/binaural.py b/extern/audaspace/bindings/python/examples/binaural.py
deleted file mode 100644
index e7a2f6cf6d9..00000000000
--- a/extern/audaspace/bindings/python/examples/binaural.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/python
-import aud, sys, time, multiprocessing
-device = aud.Device()
-hrtf = aud.HRTF().loadLeftHrtfSet(".wav", sys.argv[2])
-threadPool = aud.ThreadPool(multiprocessing.cpu_count())
-source = aud.Source(0, 0, 0)
-sound = aud.Sound.file(sys.argv[1]).rechannel(1).binaural(hrtf, source, threadPool)
-handle = device.play(sound)
-
-while handle.status:
- source.azimuth += 1
- print("Azimuth: " + str(source.azimuth))
- time.sleep(0.1) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/convolution.py b/extern/audaspace/bindings/python/examples/convolution.py
deleted file mode 100644
index 4de25b0336a..00000000000
--- a/extern/audaspace/bindings/python/examples/convolution.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/python
-import aud, sys, time, multiprocessing
-device = aud.Device()
-ir = aud.ImpulseResponse(aud.Sound.file(sys.argv[2]))
-threadPool = aud.ThreadPool(multiprocessing.cpu_count())
-sound = aud.Sound.file(sys.argv[1]).convolver(ir, threadPool)
-handle = device.play(sound)
-handle.volume = 0.1
-while handle.status:
- time.sleep(0.1) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/dynamicmusic.py b/extern/audaspace/bindings/python/examples/dynamicmusic.py
deleted file mode 100644
index 348e2496c0a..00000000000
--- a/extern/audaspace/bindings/python/examples/dynamicmusic.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import aud, sys, time
-
-device=aud.Device()
-dMusic = aud.DynamicMusic(device)
-sound1 = aud.Sound.file(sys.argv[1])
-sound2 = aud.Sound.file(sys.argv[2])
-effect = aud.Sound.file(sys.argv[3])
-
-dMusic.addScene(sound1)
-dMusic.addScene(sound2)
-dMusic.addTransition(1,2,effect)
-
-dMusic.fadeTime=3
-dMusic.volume=0.5
-
-dMusic.scene=1
-time.sleep(5)
-dMusic.scene=2
-
-time.sleep(500) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/playbackmanager.py b/extern/audaspace/bindings/python/examples/playbackmanager.py
deleted file mode 100644
index 2aa1c283545..00000000000
--- a/extern/audaspace/bindings/python/examples/playbackmanager.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import aud, sys, time
-
-device=aud.Device()
-manager = aud.PlaybackManager(device)
-sound1 = aud.Sound.file(sys.argv[1])
-sound2 = aud.Sound.file(sys.argv[2])
-sound3 = aud.Sound.file(sys.argv[3])
-sound4 = aud.Sound.file(sys.argv[4])
-
-manager.play(sound1, 0)
-manager.play(sound2, 0)
-manager.play(sound3, 1)
-manager.play(sound4, 1)
-
-manager.setVolume(0.2, 0)
-time.sleep(5)
-manager.setVolume(0.0, 1)
-time.sleep(5)
-manager.pause(0)
-time.sleep(5)
-manager.setVolume(0.5, 1)
-manager.setVolume(1.0, 0)
-time.sleep(5)
-manager.stop(1)
-manager.resume(0)
-
-time.sleep(500) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/player.py b/extern/audaspace/bindings/python/examples/player.py
deleted file mode 100644
index 8acf4ac833f..00000000000
--- a/extern/audaspace/bindings/python/examples/player.py
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/python
-import aud, sys, time
-device = aud.Device()
-sound = aud.Sound.file(sys.argv[1])
-handle = device.play(sound)
-while handle.status:
- time.sleep(0.1)
diff --git a/extern/audaspace/bindings/python/examples/randomSounds.py b/extern/audaspace/bindings/python/examples/randomSounds.py
deleted file mode 100644
index 113b0921f09..00000000000
--- a/extern/audaspace/bindings/python/examples/randomSounds.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import aud, sys, time
-
-device=aud.Device()
-sound1 = aud.Sound.file(sys.argv[1])
-sound2 = aud.Sound.file(sys.argv[2])
-sound3 = aud.Sound.file(sys.argv[3])
-sound4 = aud.Sound.file(sys.argv[4])
-list=aud.Sound.list(True)
-
-list.addSound(sound1)
-list.addSound(sound2)
-list.addSound(sound3)
-list.addSound(sound4)
-mutable=aud.Sound.mutable(list)
-
-device.lock()
-handle=device.play(mutable)
-handle.loop_count=2
-device.unlock()
-
-time.sleep(500) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/simple.py b/extern/audaspace/bindings/python/examples/simple.py
deleted file mode 100644
index 7aa45b41042..00000000000
--- a/extern/audaspace/bindings/python/examples/simple.py
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/python
-import aud, time
-device = aud.Device()
-sine = aud.Sound.sine(440)
-square = sine.threshold()
-handle = device.play(square)
-time.sleep(3)
diff --git a/extern/audaspace/bindings/python/examples/siren.py b/extern/audaspace/bindings/python/examples/siren.py
deleted file mode 100644
index 071279b162d..00000000000
--- a/extern/audaspace/bindings/python/examples/siren.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/python
-import aud, math, time
-length = 0.5
-fadelength = 0.05
-
-device = aud.Device()
-high = aud.Sound.sine(880).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length)
-low = aud.Sound.sine(700).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length).volume(0.6)
-sound = high.join(low)
-handle = device.play(sound)
-handle.loop_count = -1
-
-start = time.time()
-
-while time.time() - start < 10:
- angle = time.time() - start
-
- handle.location = [math.sin(angle), 0, -math.cos(angle)]
-
diff --git a/extern/audaspace/bindings/python/examples/siren2.py b/extern/audaspace/bindings/python/examples/siren2.py
deleted file mode 100644
index 35e1a600581..00000000000
--- a/extern/audaspace/bindings/python/examples/siren2.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/python
-import aud, math, time
-length = 0.5
-fadelength = 0.05
-runtime = 10
-distance = 100
-velocity = 2 * distance / runtime
-
-device = aud.Device()
-high = aud.Sound.sine(880).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length)
-low = aud.Sound.sine(700).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length).volume(0.6)
-sound = high.join(low)
-handle = device.play(sound)
-handle.loop_count = -1
-
-handle.velocity = [velocity, 0, 0]
-
-start = time.time()
-
-while time.time() - start < runtime:
- location = -distance + velocity * (time.time() - start)
-
- handle.location = [location, 10, 0]
diff --git a/extern/audaspace/bindings/python/examples/tetris.py b/extern/audaspace/bindings/python/examples/tetris.py
deleted file mode 100644
index 236a6fa59c1..00000000000
--- a/extern/audaspace/bindings/python/examples/tetris.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/python
-import aud, math, time
-
-def parseNotes(notes, bpm, basefreq, rate = 44100,
- notechars = "XXXCXDXEFXGXAXHcXdXefXgXaXhp"):
- pos = 0
- fadelength = 60/bpm/10
- halfchars = "#b"
- durationchars = "2345678"
- sound = None
-
- while pos < len(notes):
- char = notes[pos]
- mod = None
- dur = 1
- pos += 1
- while pos < len(notes) and notes[pos] not in notechars:
- if notes[pos] in halfchars:
- mod = notes[pos]
- elif notes[pos] in durationchars:
- dur = notes[pos]
- pos += 1
-
- freq = notechars.find(char)
- if mod == '#':
- freq += 1
- elif mod == 'b':
- freq -= 1
-
- freq = math.pow(2, freq/12)*basefreq
- length = float(dur)*60/bpm
-
- snd = aud.Sound.square(freq, rate)
- if char == 'p':
- snd = snd.volume(0)
- snd = snd.limit(0, length)
- snd = snd.fadein(0, fadelength)
- snd = snd.fadeout(length - fadelength, fadelength)
-
- if sound:
- sound = sound.join(snd)
- else:
- sound = snd
- return sound
-
-def tetris(bpm = 300, freq = 220, rate = 44100):
- notes = "e2Hcd2cH A2Ace2dc H3cd2e2 c2A2A4 pd2fa2gf e3ce2dc H2Hcd2e2 c2A2A2p2"
- s11 = parseNotes(notes, bpm, freq, rate)
-
- notes = "e4c4 d4H4 c4A4 G#4p4 e4c4 d4H4 A2c2a4 g#4p4"
- s12 = parseNotes(notes, bpm, freq, rate)
-
- notes = "EeEeEeEe AaAaAaAa AbabAbabAbabAbab AaAaAAHC DdDdDdDd CcCcCcCc HhHhHhHh AaAaA2p2"
- s21 = parseNotes(notes, bpm, freq, rate, notechars = "AXHCXDXEFXGXaXhcXdXefXgXp")
-
- notes = "aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2 aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2"
- s22 = parseNotes(notes, bpm, freq/2, rate)
-
- return s11.join(s12).join(s11).volume(0.5).mix(s21.join(s22).join(s21).volume(0.3))
-
-if __name__ == "__main__":
- dev = aud.Device()
- handle = dev.play(tetris(300, 220, dev.rate))
- while handle.status:
- time.sleep(0.1)
-
diff --git a/extern/audaspace/bindings/python/examples/tetris2.py b/extern/audaspace/bindings/python/examples/tetris2.py
deleted file mode 100644
index 08708581af6..00000000000
--- a/extern/audaspace/bindings/python/examples/tetris2.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/python
-import aud, math, time
-
-def parseNotes(notes, bpm, basefreq, rate = 44100,
- notechars = "XXXCXDXEFXGXAXHcXdXefXgXaXhp"):
- pos = 0
- fadelength = 60/bpm/10
- halfchars = "#b"
- durationchars = "2345678"
- position = 0
- sequence = aud.Sequence()
-
- while pos < len(notes):
- char = notes[pos]
- mod = None
- dur = 1
- pos += 1
- while pos < len(notes) and notes[pos] not in notechars:
- if notes[pos] in halfchars:
- mod = notes[pos]
- elif notes[pos] in durationchars:
- dur = notes[pos]
- pos += 1
-
- freq = notechars.find(char)
- if mod == '#':
- freq += 1
- elif mod == 'b':
- freq -= 1
-
- freq = math.pow(2, freq/12)*basefreq
- length = float(dur)*60/bpm
-
- note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength)
-
- entry = sequence.add(note, position, position + length, 0)
- if char == 'p':
- entry.muted = True
-
- position += length
-
- return sequence.limit(0, position)
-
-def tetris(bpm = 300, freq = 220, rate = 44100):
- notes = "e2Hcd2cH A2Ace2dc H3cd2e2 c2A2A4 pd2fa2gf e3ce2dc H2Hcd2e2 c2A2A2p2"
- s11 = parseNotes(notes, bpm, freq, rate)
-
- notes = "e4c4 d4H4 c4A4 G#4p4 e4c4 d4H4 A2c2a4 g#4p4"
- s12 = parseNotes(notes, bpm, freq, rate)
-
- notes = "EeEeEeEe AaAaAaAa AbabAbabAbabAbab AaAaAAHC DdDdDdDd CcCcCcCc HhHhHhHh AaAaA2p2"
- s21 = parseNotes(notes, bpm, freq, rate, notechars = "AXHCXDXEFXGXaXhcXdXefXgXp")
-
- notes = "aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2 aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2"
- s22 = parseNotes(notes, bpm, freq/2, rate)
-
- return s11.join(s12).join(s11).volume(0.5).mix(s21.join(s22).join(s21).volume(0.3))
-
-if __name__ == "__main__":
- dev = aud.Device()
- handle = dev.play(tetris(300, 220, dev.rate))
- while handle.status:
- time.sleep(0.1)
-
diff --git a/extern/audaspace/bindings/python/examples/tetris3.py b/extern/audaspace/bindings/python/examples/tetris3.py
deleted file mode 100644
index aa66d5457d3..00000000000
--- a/extern/audaspace/bindings/python/examples/tetris3.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/python
-import aud, math, time
-
-def parseNotes(notes, bpm, basefreq, rate = 44100,
- notechars = "XXXCXDXEFXGXAXHcXdXefXgXaXhp"):
- pos = 0
- fadelength = 60/bpm/10
- halfchars = "#b"
- durationchars = "2345678"
- position = 0
- sequence = aud.Sequence()
-
- while pos < len(notes):
- char = notes[pos]
- mod = None
- dur = 1
- pos += 1
- while pos < len(notes) and notes[pos] not in notechars:
- if notes[pos] in halfchars:
- mod = notes[pos]
- elif notes[pos] in durationchars:
- dur = notes[pos]
- pos += 1
-
- freq = notechars.find(char)
- if mod == '#':
- freq += 1
- elif mod == 'b':
- freq -= 1
-
- freq = math.pow(2, freq/12)*basefreq
- length = float(dur)*60/bpm
-
- if char != 'p':
- note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength)
-
- sequence.add(note, position, position + length, 0)
-
- position += length
-
- return sequence.limit(0, position)
-
-def tetris(bpm = 300, freq = 220, rate = 44100):
- notes = "e2Hcd2cH A2Ace2dc H3cd2e2 c2A2A4 pd2fa2gf e3ce2dc H2Hcd2e2 c2A2A2p2"
- s11 = parseNotes(notes, bpm, freq, rate)
-
- notes = "e4c4 d4H4 c4A4 G#4p4 e4c4 d4H4 A2c2a4 g#4p4"
- s12 = parseNotes(notes, bpm, freq, rate)
-
- notes = "EeEeEeEe AaAaAaAa AbabAbabAbabAbab AaAaAAHC DdDdDdDd CcCcCcCc HhHhHhHh AaAaA2p2"
- s21 = parseNotes(notes, bpm, freq, rate, notechars = "AXHCXDXEFXGXaXhcXdXefXgXp")
-
- notes = "aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2 aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2"
- s22 = parseNotes(notes, bpm, freq/2, rate)
-
- return s11.join(s12).join(s11).volume(0.5).mix(s21.join(s22).join(s21).volume(0.3))
-
-if __name__ == "__main__":
- dev = aud.Device()
- handle = dev.play(tetris(300, 220, dev.rate))
- while handle.status:
- time.sleep(0.1)
-
diff --git a/extern/audaspace/bindings/python/setup.py.in b/extern/audaspace/bindings/python/setup.py.in
deleted file mode 100644
index add1a2d1475..00000000000
--- a/extern/audaspace/bindings/python/setup.py.in
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import sys
-import os
-import codecs
-import numpy
-
-from distutils.core import setup, Extension
-
-if len(sys.argv) > 2 and sys.argv[1] == '--build-docs':
- import subprocess
- from distutils.core import Distribution
- from distutils.command.build import build
-
- dist = Distribution()
- cmd = build(dist)
- cmd.finalize_options()
- #print(cmd.build_platlib)
-
- os.environ['PYTHONPATH'] = os.path.join(os.getcwd(), cmd.build_platlib)
- os.environ['LD_LIBRARY_PATH'] = os.getcwd()
-
- ret = subprocess.call(sys.argv[2:])
- sys.exit(ret)
-
-
-# the following line is not working due to https://bugs.python.org/issue9023
-#source_directory = os.path.relpath('@PYTHON_SOURCE_DIRECTORY@')
-source_directory = '@PYTHON_SOURCE_DIRECTORY@'
-
-extra_args = []
-
-if sys.platform == 'win32':
- extra_args.append('/EHsc')
- extra_args.append('/DAUD_BUILD_SHARED_LIBRARY')
-else:
- extra_args.append('-std=c++11')
-
-audaspace = Extension(
- 'aud',
- include_dirs = ['@CMAKE_CURRENT_BINARY_DIR@', '@FFTW_INCLUDE_DIR@', os.path.join(source_directory, '../../include'), numpy.get_include()],
- libraries = ['audaspace'],
- 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', 'PySource.cpp'] + (['PyImpulseResponse.cpp', 'PyHRTF.cpp'] if '@WITH_FFTW@' == 'ON' else [])]
-)
-
-setup(
- name = 'audaspace',
- version = '@AUDASPACE_LONG_VERSION@',
- description = 'Audaspace is a high level audio library.',
- author = 'Jörg Müller',
- author_email = 'nexyon@gmail.com',
- url = 'https://github.com/audaspace/audaspace',
- 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', 'PySource.h'] + (['PyImpulseResponse.h', 'PyHRTF.h'] if '@WITH_FFTW@' == 'ON' else [])] + ['Audaspace.h']
-)
-
diff --git a/extern/audaspace/blender_config.cmake b/extern/audaspace/blender_config.cmake
deleted file mode 100644
index 5b5440920d0..00000000000
--- a/extern/audaspace/blender_config.cmake
+++ /dev/null
@@ -1,26 +0,0 @@
-set(AUDASPACE_STANDALONE FALSE)
-set(BUILD_DEMOS FALSE)
-set(SHARED_LIBRARY FALSE)
-set(WITH_C TRUE)
-set(WITH_DOCS FALSE)
-set(WITH_FFMPEG ${WITH_CODEC_FFMPEG})
-set(WITH_FFTW FALSE)
-set(WITH_LIBSNDFILE ${WITH_CODEC_SNDFILE})
-set(SEPARATE_C FALSE)
-set(PLUGIN_FFMPEG FALSE)
-set(PLUGIN_JACK FALSE)
-set(PLUGIN_LIBSNDFILE FALSE)
-set(PLUGIN_OPENAL FALSE)
-set(PLUGIN_SDL FALSE)
-set(WITH_PYTHON_MODULE FALSE)
-set(DYNLOAD_JACK ${WITH_JACK_DYNLOAD})
-set(WITH_BINDING_DOCS FALSE)
-set(BLENDER_AUDASPACE TRUE)
-set(FFMPEG_FOUND ${WITH_CODEC_FFMPEG})
-set(JACK_FOUND ${WITH_JACK})
-set(LIBSNDFILE_FOUND ${WITH_CODEC_SNDFILE})
-set(OPENAL_FOUND ${WITH_OPENAL})
-set(PYTHONLIBS_FOUND TRUE)
-set(NUMPY_FOUND TRUE)
-set(NUMPY_INCLUDE_DIRS ${PYTHON_NUMPY_INCLUDE_DIRS})
-set(SDL_FOUND ${WITH_SDL})
diff --git a/extern/audaspace/config/Audaspace.h.in b/extern/audaspace/config/Audaspace.h.in
deleted file mode 100644
index 3e6912727b8..00000000000
--- a/extern/audaspace/config/Audaspace.h.in
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * 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 Audaspace.h
- * @ingroup general
- * The main header file of the library defining the namespace and basic data types.
- */
-
-/**
- * \def AUD_API
- * Used for exporting symbols in the shared library.
- */
-
-/**
- * \def AUD_PLUGIN_API
- * Used for exporting symbols in the shared library.
- */
-
-/**
- * \def AUD_EXPORT_API
- * Used for using exporting symbols of the shared library.
- */
-
-/**
- * \def AUD_USE_API
- * Used for using exporting symbols of the shared library.
- */
-
-/**
- * \def AUD_LOCAL
- * Used for hiding symbols from export in the shared library.
- */
-
-// the following two defines and undefines are a hack to silence an error by doxygen
-
-/**
- * \def AUD_SHARED_LIBRARY
- * Defined when audaspace was built as a shared library.
- */
-#define AUD_SHARED_LIBRARY
-#undef AUD_SHARED_LIBRARY
-
-/**
- * \def AUD_STATIC_LIBRARY
- * Defined when audaspace was built as a static library.
- */
- #define AUD_STATIC_LIBRARY
- #undef AUD_STATIC_LIBRARY
-
-#define @AUD_LIBRARY_TYPE@
-
-#ifdef _MSC_VER
- #define AUD_EXPORT_API __declspec(dllexport)
- #define AUD_USE_API __declspec(dllimport)
- #define AUD_LOCAL
-#else
- #ifdef __GNUC__
- #define AUD_EXPORT_API __attribute__((visibility ("default")))
- #define AUD_USE_API AUD_EXPORT_API
- #define AUD_LOCAL __attribute__((visibility ("hidden")))
- #else
- #define AUD_EXPORT_API
- #define AUD_USE_API
- #define AUD_LOCAL
- #endif
-#endif
-
-#ifdef AUD_SHARED_LIBRARY
- #ifdef AUD_BUILD_PLUGIN
- #define AUD_API AUD_USE_API
- #define AUD_PLUGIN_API AUD_EXPORT_API
- #else
- #ifdef AUD_BUILD_SHARED_LIBRARY
- #define AUD_API AUD_EXPORT_API
- #define AUD_PLUGIN_API AUD_EXPORT_API
- #else
- #define AUD_API AUD_USE_API
- #define AUD_PLUGIN_API AUD_USE_API
- #endif
- #endif
-#else
- #define AUD_API
- #define AUD_PLUGIN_API
-#endif
-
-/// The default playback buffer size of a device.
-#define AUD_DEFAULT_BUFFER_SIZE 1024
-
-#ifdef __cplusplus
-
-/// Opens the audaspace namespace aud.
-#define AUD_NAMESPACE_BEGIN namespace aud {
-
-/// Closes the audaspace namespace aud.
-#define AUD_NAMESPACE_END }
-
-#else
-
-/// Opens the audaspace namespace aud.
-#define AUD_NAMESPACE_BEGIN
-
-/// Closes the audaspace namespace aud.
-#define AUD_NAMESPACE_END
-
-#endif
-
-AUD_NAMESPACE_BEGIN
-
-/// Sample type.(float samples)
-typedef float sample_t;
-
-/// Sample data type (format samples)
-typedef unsigned char data_t;
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/Exception.h b/extern/audaspace/include/Exception.h
deleted file mode 100644
index b102bfade63..00000000000
--- a/extern/audaspace/include/Exception.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*******************************************************************************
- * 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
-
-/**
- * \def AUD_NOEXCEPT
- * Compatibility macro for noexcept.
- */
-#ifdef _MSC_VER
-#define AUD_NOEXCEPT
-#else
-#define AUD_NOEXCEPT noexcept
-#endif
-
-/**
- * @file Exception.h
- * @ingroup general
- * Defines the Exception class as well as the AUD_THROW macro for easy throwing.
- */
-
-#include "Audaspace.h"
-
-#include <exception>
-#include <string>
-
-/// Throws a Exception with the provided error code.
-#define AUD_THROW(exception, message) { throw exception(message, __FILE__, __LINE__); }
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * The Exception class is the general exception base class.
- */
-class AUD_API Exception : public std::exception
-{
-protected:
- /// A message describing the problem.
- const std::string m_message;
-
- /// The source code file in which the exception was thrown.
- const std::string m_file;
-
- /// The source code line from which the exception was thrown.
- const int m_line;
-
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- Exception(const Exception& exception);
-
- /**
- * Creates a new Exception object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- Exception(std::string message, std::string file, int line);
-public:
- /**
- * Destroys the object.
- */
- virtual ~Exception() AUD_NOEXCEPT;
-
- /**
- * Returns the error message.
- * @return A C string error message.
- */
- virtual const char* what() const AUD_NOEXCEPT;
-
- /**
- * Returns the error message plus file and line number for debugging purposes.
- * @return The error message including debug information.
- */
- virtual std::string getDebugMessage() const;
-
- /**
- * Returns the error message.
- * @return The error message as string.
- */
- const std::string& getMessage() const;
-
- /**
- * Returns the file in which the exception was thrown.
- * @return The name of the file in which the exception was thrown.
- */
- const std::string& getFile() const;
-
- /**
- * Returns the line where the exception was originally thrown.
- * @return The line of the source file where the exception was generated.
- */
- int getLine() const;
-};
-
-/**
- * The FileException class is used for error cases in which files cannot
- * be read or written due to unknown containers or codecs.
- */
-class AUD_API FileException : public Exception
-{
-public:
- /**
- * Creates a new FileException object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- FileException(std::string message, std::string file, int line);
-
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- FileException(const FileException& exception);
-
- ~FileException() AUD_NOEXCEPT;
-};
-
-/**
- * The DeviceException class is used for error cases in connection with
- * devices, which usually happens when specific features or requests
- * cannot be fulfilled by a device, for example when the device is opened.
- */
-class AUD_API DeviceException : public Exception
-{
-public:
- /**
- * Creates a new DeviceException object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- DeviceException(std::string message, std::string file, int line);
-
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- DeviceException(const DeviceException& exception);
-
- ~DeviceException() AUD_NOEXCEPT;
-};
-
-/**
- * The StateException class is used for error cases of sounds or readers
- * with illegal states or requirements for states of dependent classes.
- * It is used for example when an effect reader needs a specific
- * specification from its input.
- */
-class AUD_API StateException : public Exception
-{
-public:
- /**
- * Creates a new StateException object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- StateException(std::string message, std::string file, int line);
-
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- StateException(const StateException& exception);
-
- ~StateException() AUD_NOEXCEPT;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/IReader.h b/extern/audaspace/include/IReader.h
deleted file mode 100644
index c29900ca579..00000000000
--- a/extern/audaspace/include/IReader.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * 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 IReader.h
- * @ingroup general
- * The IReader interface.
- */
-
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * @interface IReader
- * This class represents a sound source as stream or as buffer which can be read
- * for example by another reader, a device or whatever.
- */
-class AUD_API IReader
-{
-public:
- /**
- * Destroys the reader.
- */
- virtual ~IReader() {}
-
- /**
- * Tells whether the source provides seeking functionality or not.
- * \warning This doesn't mean that the seeking always has to succeed.
- * \return Always returns true for readers of buffering types.
- */
- virtual bool isSeekable() const=0;
-
- /**
- * Seeks to a specific position in the source.
- * \param position The position to seek for measured in samples. To get
- * from a given time to the samples you simply have to multiply the
- * time value in seconds with the sample rate of the reader.
- * \warning This may work or not, depending on the actual reader.
- */
- virtual void seek(int position)=0;
-
- /**
- * Returns an approximated length of the source in samples.
- * \return The length as sample count. May be negative if unknown.
- */
- virtual int getLength() const=0;
-
- /**
- * Returns the position of the source as a sample count value.
- * \return The current position in the source. A negative value indicates
- * that the position is unknown.
- * \warning The value returned doesn't always have to be correct for readers,
- * especially after seeking.
- */
- virtual int getPosition() const=0;
-
- /**
- * Returns the specification of the reader.
- * \return The Specs structure.
- */
- virtual Specs getSpecs() const=0;
-
- /**
- * Request to read the next length samples out of the source.
- * The buffer supplied has the needed size.
- * \param[in,out] length The count of samples that should be read. Shall
- * contain the real count of samples after reading, in case
- * there were only fewer samples available.
- * A smaller value also indicates the end of the reader.
- * \param[out] eos End of stream, whether the end is reached or not.
- * \param[in] buffer The pointer to the buffer to read into.
- */
- virtual void read(int& length, bool& eos, sample_t* buffer)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/ISound.h b/extern/audaspace/include/ISound.h
deleted file mode 100644
index c28337e1b4e..00000000000
--- a/extern/audaspace/include/ISound.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * 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 ISound.h
- * @ingroup general
- * The ISound interface.
- */
-
-#include "Audaspace.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class IReader;
-
-/**
- * @interface ISound
- * This class represents a type of sound source and saves the necessary values
- * for it. It is able to create a reader that is actually usable for playback
- * of the respective sound source through the factory method createReader.
- */
-class AUD_API ISound
-{
-public:
- /**
- * Destroys the sound.
- */
- virtual ~ISound() {}
-
- /**
- * Creates a reader for playback of the sound source.
- * \return A pointer to an IReader object or nullptr if there has been an
- * error.
- * \exception Exception An exception may be thrown if there has been
- * a more unexpected error during reader creation.
- */
- virtual std::shared_ptr<IReader> createReader()=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/DefaultSynchronizer.h b/extern/audaspace/include/devices/DefaultSynchronizer.h
deleted file mode 100644
index 31f6c65219c..00000000000
--- a/extern/audaspace/include/devices/DefaultSynchronizer.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * 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 DefaultSynchronizer.h
- * @ingroup devices
- * The DefaultSynchronizer class.
- */
-
-#include "ISynchronizer.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is a default ISynchronizer implementation that actually does no
- * synchronization and is intended for devices that don't support it.
- */
-class AUD_API DefaultSynchronizer : public ISynchronizer
-{
-public:
- virtual void seek(std::shared_ptr<IHandle> handle, float time);
- virtual float getPosition(std::shared_ptr<IHandle> handle);
- virtual void play();
- virtual void stop();
- virtual void setSyncCallback(syncFunction function, void* data);
- virtual int isPlaying();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/DeviceManager.h b/extern/audaspace/include/devices/DeviceManager.h
deleted file mode 100644
index 27a546630e8..00000000000
--- a/extern/audaspace/include/devices/DeviceManager.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * 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 DeviceManager.h
- * @ingroup devices
- * The DeviceManager class.
- */
-
-#include "Audaspace.h"
-
-#include <memory>
-#include <vector>
-#include <unordered_map>
-
-AUD_NAMESPACE_BEGIN
-
-class IDevice;
-class IDeviceFactory;
-class I3DDevice;
-
-/**
- * This class manages all device plugins and maintains a device if asked to do so.
- *
- * This enables applications to access their output device without having to carry
- * it through the whole application.
- */
-class AUD_API DeviceManager
-{
-private:
- static std::unordered_map<std::string, std::shared_ptr<IDeviceFactory>> m_factories;
-
- static std::shared_ptr<IDevice> m_device;
-
- // delete copy constructor and operator=
- DeviceManager(const DeviceManager&) = delete;
- DeviceManager& operator=(const DeviceManager&) = delete;
- DeviceManager() = delete;
-
-public:
- /**
- * Registers a device factory.
- *
- * This method is mostly used by plugin developers to add their device implementation
- * for general use by the library end users.
- * @param name A representative name for the device.
- * @param factory The factory that creates the device.
- */
- static void registerDevice(std::string name, std::shared_ptr<IDeviceFactory> factory);
-
- /**
- * Returns the factory for a specific device.
- * @param name The representative name of the device.
- * @return The factory if it was found, or nullptr otherwise.
- */
- static std::shared_ptr<IDeviceFactory> getDeviceFactory(std::string name);
-
- /**
- * Returns the default device based on the priorities of the registered factories.
- * @return The default device or nullptr if no factory has been registered.
- */
- static std::shared_ptr<IDeviceFactory> getDefaultDeviceFactory();
-
-
- /**
- * Sets a device that should be handled by the manager.
- *
- * If a device is currently being handled it will be released.
- * @param device The device the manager should take care of.
- */
- static void setDevice(std::shared_ptr<IDevice> device);
-
- /**
- * Opens a device which will then be handled by the manager.
- *
- * If a device is currently being handled it will be released.
- * @param name The representative name of the device.
- */
- static void openDevice(std::string name);
-
- /**
- * Opens the default device which will then be handled by the manager.
- *
- * The device to open is selected based on the priority of the registered factories.
- * If a device is currently being handled it will be released.
- */
- static void openDefaultDevice();
-
- /**
- * Releases the currently handled device.
- */
- static void releaseDevice();
-
- /**
- * Returns the currently handled device.
- * @return The handled device or nullptr if no device has been registered.
- */
- static std::shared_ptr<IDevice> getDevice();
-
- /**
- * Returns the currently handled 3D device.
- * @return The handled device or nullptr if no device has been registered
- * or the registered device is not an I3DDevice.
- */
- static std::shared_ptr<I3DDevice> get3DDevice();
-
- /**
- * Returns a list of available devices.
- * @return A list of strings with the names of available devices.
- */
- static std::vector<std::string> getAvailableDeviceNames();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/I3DDevice.h b/extern/audaspace/include/devices/I3DDevice.h
deleted file mode 100644
index f49bbcbb07e..00000000000
--- a/extern/audaspace/include/devices/I3DDevice.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*******************************************************************************
- * 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 I3DDevice.h
- * @ingroup devices
- * Defines the I3DDevice interface as well as the different distance models.
- */
-
-#include "util/Math3D.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * Possible distance models for the 3D device.
- *
- * The distance models supported are the same as documented in the [OpenAL Specification](http://openal.org/).
- */
-enum DistanceModel
-{
- DISTANCE_MODEL_INVALID = 0,
- DISTANCE_MODEL_INVERSE,
- DISTANCE_MODEL_INVERSE_CLAMPED,
- DISTANCE_MODEL_LINEAR,
- DISTANCE_MODEL_LINEAR_CLAMPED,
- DISTANCE_MODEL_EXPONENT,
- DISTANCE_MODEL_EXPONENT_CLAMPED
-};
-
-/**
- * @interface I3DDevice
- * The I3DDevice interface represents an output device for 3D sound.
- *
- * The interface has been modelled after the OpenAL 1.1 API,
- * see the [OpenAL Specification](http://openal.org/) for lots of details.
- */
-class AUD_API I3DDevice
-{
-public:
- /**
- * Retrieves the listener location.
- * \return The listener location.
- */
- virtual Vector3 getListenerLocation() const=0;
-
- /**
- * Sets the listener location.
- * \param location The new location.
- * \note The location is not updated with the velocity and
- * remains constant until the next call of this method.
- */
- virtual void setListenerLocation(const Vector3& location)=0;
-
- /**
- * Retrieves the listener velocity.
- * \return The listener velocity.
- */
- virtual Vector3 getListenerVelocity() const=0;
-
- /**
- * Sets the listener velocity.
- * \param velocity The new velocity.
- * \note This velocity does not change the position of the listener
- * over time, it is simply used for the calculation of the doppler effect.
- */
- virtual void setListenerVelocity(const Vector3& velocity)=0;
-
- /**
- * Retrieves the listener orientation.
- * \return The listener orientation as quaternion.
- */
- virtual Quaternion getListenerOrientation() const=0;
-
- /**
- * Sets the listener orientation.
- * \param orientation The new orientation as quaternion.
- * \note The coordinate system used is right handed and the listener
- * by default is oriented looking in the negative z direction with the
- * positive y axis as up direction.
- */
- virtual void setListenerOrientation(const Quaternion& orientation)=0;
-
-
- /**
- * Retrieves the speed of sound.
- * This value is needed for doppler effect calculation.
- * \return The speed of sound.
- */
- virtual float getSpeedOfSound() const=0;
-
- /**
- * Sets the speed of sound.
- * This value is needed for doppler effect calculation.
- * \param speed The new speed of sound.
- */
- virtual void setSpeedOfSound(float speed)=0;
-
- /**
- * Retrieves the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \return The doppler factor.
- */
- virtual float getDopplerFactor() const=0;
-
- /**
- * Sets the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \param factor The new doppler factor.
- */
- virtual void setDopplerFactor(float factor)=0;
-
- /**
- * Retrieves the distance model.
- * \return The distance model.
- */
- virtual DistanceModel getDistanceModel() const=0;
-
- /**
- * Sets the distance model.
- * \param model distance model.
- */
- virtual void setDistanceModel(DistanceModel model)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/I3DHandle.h b/extern/audaspace/include/devices/I3DHandle.h
deleted file mode 100644
index 2ff29f9bd21..00000000000
--- a/extern/audaspace/include/devices/I3DHandle.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
- * 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 I3DHandle.h
- * @ingroup devices
- * The I3DHandle interface.
- */
-
-#include "util/Math3D.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * @interface I3DHandle
- * The I3DHandle interface represents a playback handle for 3D sources.
- * If the playback IDevice class also implements the I3DDevice interface
- * then all playback IHandle instances also implement this interface.
- *
- * The interface has been modelled after the OpenAL 1.1 API,
- * see the [OpenAL Specification](http://openal.org/) for lots of details.
- */
-class AUD_API I3DHandle
-{
-public:
- /**
- * Destroys the handle.
- */
- virtual ~I3DHandle() {}
-
- /**
- * Retrieves the location of the source.
- * \return The location.
- */
- virtual Vector3 getLocation()=0;
-
- /**
- * Sets the location of the source.
- * \param location The new location.
- * \return Whether the action succeeded.
- * \note The location is not updated with the velocity and
- * remains constant until the next call of this method.
- */
- virtual bool setLocation(const Vector3& location)=0;
-
- /**
- * Retrieves the velocity of the source.
- * \return The velocity.
- */
- virtual Vector3 getVelocity()=0;
-
- /**
- * Sets the velocity of the source.
- * \param velocity The new velocity.
- * \return Whether the action succeeded.
- * \note This velocity does not change the position of the listener
- * over time, it is simply used for the calculation of the doppler effect.
- */
- virtual bool setVelocity(const Vector3& velocity)=0;
-
- /**
- * Retrieves the orientation of the source.
- * \return The orientation as quaternion.
- */
- virtual Quaternion getOrientation()=0;
-
- /**
- * Sets the orientation of the source.
- * \param orientation The new orientation as quaternion.
- * \return Whether the action succeeded.
- * \note The coordinate system used is right handed and the source
- * by default is oriented looking in the negative z direction with the
- * positive y axis as up direction.
- * \note This setting currently only affects sounds with non-default cone settings.
- */
- virtual bool setOrientation(const Quaternion& orientation)=0;
-
-
- /**
- * Checks whether the source location, velocity and orientation are relative
- * to the listener.
- * \return Whether the source is relative.
- */
- virtual bool isRelative()=0;
-
- /**
- * Sets whether the source location, velocity and orientation are relative
- * to the listener.
- * \param relative Whether the source is relative.
- * \return Whether the action succeeded.
- * \note The default value is true as this setting is used to play sounds ordinarily without 3D.
- */
- virtual bool setRelative(bool relative)=0;
-
- /**
- * Retrieves the maximum volume of a source.
- * \return The maximum volume.
- */
- virtual float getVolumeMaximum()=0;
-
- /**
- * Sets the maximum volume of a source.
- * \param volume The new maximum volume.
- * \return Whether the action succeeded.
- */
- virtual bool setVolumeMaximum(float volume)=0;
-
- /**
- * Retrieves the minimum volume of a source.
- * \return The minimum volume.
- */
- virtual float getVolumeMinimum()=0;
-
- /**
- * Sets the minimum volume of a source.
- * \param volume The new minimum volume.
- * \return Whether the action succeeded.
- */
- virtual bool setVolumeMinimum(float volume)=0;
-
- /**
- * Retrieves the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \return The maximum distance.
- */
- virtual float getDistanceMaximum()=0;
-
- /**
- * Sets the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \param distance The new maximum distance.
- * \return Whether the action succeeded.
- */
- virtual bool setDistanceMaximum(float distance)=0;
-
- /**
- * Retrieves the reference distance of a source.
- * \return The reference distance.
- */
- virtual float getDistanceReference()=0;
-
- /**
- * Sets the reference distance of a source.
- * \param distance The new reference distance.
- * \return Whether the action succeeded.
- */
- virtual bool setDistanceReference(float distance)=0;
-
- /**
- * Retrieves the attenuation of a source.
- * \return The attenuation.
- */
- virtual float getAttenuation()=0;
-
- /**
- * Sets the attenuation of a source.
- * This value is used for distance calculation.
- * \param factor The new attenuation.
- * \return Whether the action succeeded.
- */
- virtual bool setAttenuation(float factor)=0;
-
- /**
- * Retrieves the outer opening angle of the cone of a source.
- * \return The outer angle of the cone.
- * \note This angle is defined in degrees.
- */
- virtual float getConeAngleOuter()=0;
-
- /**
- * Sets the outer opening angle of the cone of a source.
- * \param angle The new outer angle of the cone.
- * \return Whether the action succeeded.
- * \note This angle is defined in degrees.
- */
- virtual bool setConeAngleOuter(float angle)=0;
-
- /**
- * Retrieves the inner opening angle of the cone of a source.
- * The volume inside this cone is unaltered.
- * \return The inner angle of the cone.
- * \note This angle is defined in degrees.
- */
- virtual float getConeAngleInner()=0;
-
- /**
- * Sets the inner opening angle of the cone of a source.
- * The volume inside this cone is unaltered.
- * \param angle The new inner angle of the cone.
- * \return Whether the action succeeded.
- * \note This angle is defined in degrees.
- */
- virtual bool setConeAngleInner(float angle)=0;
-
- /**
- * Retrieves the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \return The outer volume of the cone.
- * \note The general volume of the handle still applies on top of this.
- */
- virtual float getConeVolumeOuter()=0;
-
- /**
- * Sets the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \param volume The new outer volume of the cone.
- * \return Whether the action succeeded.
- * \note The general volume of the handle still applies on top of this.
- */
- virtual bool setConeVolumeOuter(float volume)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/IDevice.h b/extern/audaspace/include/devices/IDevice.h
deleted file mode 100644
index 92a85d900e2..00000000000
--- a/extern/audaspace/include/devices/IDevice.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * 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 IDevice.h
- * @ingroup devices
- * The IDevice interface.
- */
-
-#include "respec/Specification.h"
-#include "util/ILockable.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class IHandle;
-class IReader;
-class ISound;
-class ISynchronizer;
-
-/**
- * @interface IDevice
- * The IDevice interface represents an output device for sound sources.
- * Output devices may be several backends such as plattform independand like
- * SDL or OpenAL or plattform specific like ALSA, but they may also be
- * files, RAM buffers or other types of streams.
- * \warning Thread safety must be insured so that no reader is beeing called
- * twice at the same time.
- */
-class IDevice : public ILockable
-{
-public:
- /**
- * Destroys the device.
- */
- virtual ~IDevice() {}
-
- /**
- * Returns the specification of the device.
- */
- virtual DeviceSpecs getSpecs() const=0;
-
- /**
- * Plays a sound source.
- * \param reader The reader to play.
- * \param keep When keep is true the sound source will not be deleted but
- * set to paused when its end has been reached.
- * \return Returns a handle with which the playback can be controlled.
- * This is nullptr if the sound couldn't be played back.
- * \exception Exception Thrown if there's an unexpected (from the
- * device side) error during creation of the reader.
- */
- virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false)=0;
-
- /**
- * Plays a sound source.
- * \param sound The sound to create the reader for the sound source.
- * \param keep When keep is true the sound source will not be deleted but
- * set to paused when its end has been reached.
- * \return Returns a handle with which the playback can be controlled.
- * This is nullptr if the sound couldn't be played back.
- * \exception Exception Thrown if there's an unexpected (from the
- * device side) error during creation of the reader.
- */
- virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false)=0;
-
- /**
- * Stops all playing sounds.
- */
- virtual void stopAll()=0;
-
- /**
- * Locks the device.
- * Used to make sure that between lock and unlock, no buffers are read, so
- * that it is possible to start, resume, pause, stop or seek several
- * playback handles simultaneously.
- * \warning Make sure the locking time is as small as possible to avoid
- * playback delays that result in unexpected noise and cracks.
- */
- virtual void lock()=0;
-
- /**
- * Unlocks the previously locked device.
- */
- virtual void unlock()=0;
-
- /**
- * Retrieves the overall device volume.
- * \return The overall device volume.
- */
- virtual float getVolume() const=0;
-
- /**
- * Sets the overall device volume.
- * \param volume The overall device volume.
- */
- virtual void setVolume(float volume)=0;
-
- /**
- * Retrieves the synchronizer for this device, which enables accurate synchronization
- * between audio playback and video playback for example.
- * @return The synchronizer which will be the DefaultSynchronizer if synchonization is not supported.
- */
- virtual ISynchronizer* getSynchronizer()=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/IDeviceFactory.h b/extern/audaspace/include/devices/IDeviceFactory.h
deleted file mode 100644
index 6a0f4537b13..00000000000
--- a/extern/audaspace/include/devices/IDeviceFactory.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * 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 IDeviceFactory.h
- * @ingroup devices
- * The IDeviceFactory interface.
- */
-
-#include "respec/Specification.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * @interface IDeviceFactory
- * The IDeviceFactory interface opens an output device.
- */
-class AUD_API IDeviceFactory
-{
-public:
- /**
- * Opens an audio device for playback.
- * \exception Exception Thrown if the audio device cannot be opened.
- */
- virtual std::shared_ptr<IDevice> openDevice()=0;
-
- /**
- * Returns the priority of the device to be the default device for a system.
- * The higher the priority the more likely it is for this device to be used as the default device.
- * \return Priority to be the default device.
- */
- virtual int getPriority()=0;
-
- /**
- * Sets the wanted device specifications for opening the device.
- * \param specs The wanted audio specification.
- */
- virtual void setSpecs(DeviceSpecs specs)=0;
-
- /**
- * Sets the size for the internal playback buffers.
- * The bigger the buffersize, the less likely clicks happen,
- * but the latency increases too.
- * \param buffersize The size of the internal buffer.
- */
- virtual void setBufferSize(int buffersize)=0;
-
- /**
- * Sets a name for the device.
- * \param name The internal name for the device.
- */
- virtual void setName(std::string name)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/IHandle.h b/extern/audaspace/include/devices/IHandle.h
deleted file mode 100644
index 3f42fc33c3a..00000000000
--- a/extern/audaspace/include/devices/IHandle.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/*******************************************************************************
- * 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 IHandle.h
- * @ingroup devices
- * Defines the IHandle interface as well as possible states of the handle.
- */
-
-#include "Audaspace.h"
-
-AUD_NAMESPACE_BEGIN
-
-/// Status of a playback handle.
-enum Status
-{
- STATUS_INVALID = 0, /// Invalid handle. Maybe due to stopping.
- STATUS_PLAYING, /// Sound is playing.
- STATUS_PAUSED, /// Sound is being paused.
- STATUS_STOPPED /// Sound is stopped but kept in the device.
-};
-
-/**
- * The stopCallback is called when a handle reaches the end of the stream and
- * thus gets stopped. A user defined pointer is supplied to the callback.
- */
-typedef void (*stopCallback)(void*);
-
-/**
- * @interface IHandle
- * The IHandle interface represents a playback handles of a specific device.
- */
-class AUD_API IHandle
-{
-public:
- /**
- * Destroys the handle.
- */
- virtual ~IHandle() {}
-
- /**
- * Pauses a played back sound.
- * \return
- * - true if the sound has been paused.
- * - false if the sound isn't playing back or the handle is invalid.
- */
- virtual bool pause()=0;
-
- /**
- * Resumes a paused sound.
- * \return
- * - true if the sound has been resumed.
- * - false if the sound isn't paused or the handle is invalid.
- */
- virtual bool resume()=0;
-
- /**
- * Stops a played back or paused sound. The handle is definitely invalid
- * afterwards.
- * \return
- * - true if the sound has been stopped.
- * - false if the handle is invalid.
- */
- virtual bool stop()=0;
-
- /**
- * Gets the behaviour of the device for a played back sound when the sound
- * doesn't return any more samples.
- * \return
- * - true if the source will be paused when it's end is reached
- * - false if the handle won't kept or is invalid.
- */
- virtual bool getKeep()=0;
-
- /**
- * Sets the behaviour of the device for a played back sound when the sound
- * doesn't return any more samples.
- * \param keep True when the source should be paused and not deleted.
- * \return
- * - true if the behaviour has been changed.
- * - false if the handle is invalid.
- */
- virtual bool setKeep(bool keep)=0;
-
- /**
- * Seeks in a played back sound.
- * \param position The new position from where to play back, in seconds.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- * \warning Whether the seek works or not depends on the sound source.
- */
- virtual bool seek(float position)=0;
-
- /**
- * Retrieves the current playback position of a sound.
- * \return The playback position in seconds, or 0.0 if the handle is
- * invalid.
- */
- virtual float getPosition()=0;
-
- /**
- * Returns the status of a played back sound.
- * \return
- * - STATUS_INVALID if the sound has stopped or the handle is
- *. invalid
- * - STATUS_PLAYING if the sound is currently played back.
- * - STATUS_PAUSED if the sound is currently paused.
- * - STATUS_STOPPED if the sound finished playing and is still
- * kept in the device.
- * \see Status
- */
- virtual Status getStatus()=0;
-
- /**
- * Retrieves the volume of a playing sound.
- * \return The volume.
- */
- virtual float getVolume()=0;
-
- /**
- * Sets the volume of a playing sound.
- * \param volume The volume.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setVolume(float volume)=0;
-
- /**
- * Retrieves the pitch of a playing sound.
- * \return The pitch.
- */
- virtual float getPitch()=0;
-
- /**
- * Sets the pitch of a playing sound.
- * \param pitch The pitch.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setPitch(float pitch)=0;
-
- /**
- * Retrieves the loop count of a playing sound.
- * A negative value indicates infinity.
- * \return The remaining loop count.
- */
- virtual int getLoopCount()=0;
-
- /**
- * Sets the loop count of a playing sound.
- * A negative value indicates infinity.
- * \param count The new loop count.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setLoopCount(int count)=0;
-
- /**
- * Sets the callback function that's called when the end of a playing sound
- * is reached.
- * \param callback The callback function.
- * \param data The data that should be passed to the callback function.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setStopCallback(stopCallback callback = 0, void* data = 0)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/ISynchronizer.h b/extern/audaspace/include/devices/ISynchronizer.h
deleted file mode 100644
index 6f14de59565..00000000000
--- a/extern/audaspace/include/devices/ISynchronizer.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * 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 ISynchronizer.h
- * @ingroup devices
- * The ISynchronizer interface.
- */
-
-#include "Audaspace.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class IHandle;
-
-/**
- * @interface ISynchronizer
- * This class enables global synchronization of several audio applications if supported.
- * JACK for example supports synchronization through JACK Transport.
- */
-class AUD_API ISynchronizer
-{
-public:
- /**
- * Destroys the synchronizer.
- */
- virtual ~ISynchronizer() {}
-
- /**
- * The syncFunction is called when a synchronization event happens.
- * The function awaits three parameters. The first one is a user defined
- * pointer, the second informs about whether playback is on and the third
- * is the current playback time in seconds.
- */
- typedef void (*syncFunction)(void*, int, float);
-
- /**
- * Sets the playback position of a handle and the synchronizer to a specific time.
- * @param handle The handle that should be synchronized/seeked.
- * @param time The absolute time to synchronize to.
- */
- virtual void seek(std::shared_ptr<IHandle> handle, float time) = 0;
-
- /**
- * Retrieves the position of the synchronizer.
- * @param handle The handle which is synchronized.
- * @return The position in seconds.
- */
- virtual float getPosition(std::shared_ptr<IHandle> handle) = 0;
-
- /**
- * Starts the synchronizer playback.
- */
- virtual void play() = 0;
-
- /**
- * Stops the synchronizer playback.
- */
- virtual void stop() = 0;
-
- /**
- * Sets the callback function that is called when a synchronization event happens.
- * @param function The function to be called.
- * @param data User data to be passed to the callback.
- */
- virtual void setSyncCallback(syncFunction function, void* data) = 0;
-
- /**
- * Retrieves whether the synchronizer is playing back.
- * @return Whether the synchronizer plays back.
- */
- virtual int isPlaying() = 0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/NULLDevice.h b/extern/audaspace/include/devices/NULLDevice.h
deleted file mode 100644
index 76211a799b9..00000000000
--- a/extern/audaspace/include/devices/NULLDevice.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * 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 NULLDevice.h
- * @ingroup devices
- * The NULLDevice class.
- */
-
-#include "devices/IDevice.h"
-#include "devices/IHandle.h"
-
-AUD_NAMESPACE_BEGIN
-
-class IReader;
-
-/**
- * This device plays nothing.
- * It is similar to the linux device /dev/null.
- */
-class AUD_API NULLDevice : public IDevice
-{
-private:
- class AUD_LOCAL NULLHandle : public IHandle
- {
- private:
- // delete copy constructor and operator=
- NULLHandle(const NULLHandle&) = delete;
- NULLHandle& operator=(const NULLHandle&) = delete;
-
- public:
-
- NULLHandle();
-
- virtual ~NULLHandle() {}
- virtual bool pause();
- virtual bool resume();
- virtual bool stop();
- virtual bool getKeep();
- virtual bool setKeep(bool keep);
- virtual bool seek(float position);
- virtual float getPosition();
- virtual Status getStatus();
- virtual float getVolume();
- virtual bool setVolume(float volume);
- virtual float getPitch();
- virtual bool setPitch(float pitch);
- virtual int getLoopCount();
- virtual bool setLoopCount(int count);
- virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
- };
-
- // delete copy constructor and operator=
- NULLDevice(const NULLDevice&) = delete;
- NULLDevice& operator=(const NULLDevice&) = delete;
-
-public:
- /**
- * Creates a new NULLDevice.
- */
- NULLDevice();
-
- virtual ~NULLDevice();
-
- virtual DeviceSpecs getSpecs() const;
- virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false);
- virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false);
- virtual void stopAll();
- virtual void lock();
- virtual void unlock();
- virtual float getVolume() const;
- virtual void setVolume(float volume);
- virtual ISynchronizer* getSynchronizer();
-
- /**
- * Registers this plugin.
- */
- static void registerPlugin();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/ReadDevice.h b/extern/audaspace/include/devices/ReadDevice.h
deleted file mode 100644
index b56bd8ce5c4..00000000000
--- a/extern/audaspace/include/devices/ReadDevice.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * 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 ReadDevice.h
- * @ingroup devices
- * The ReadDevice class.
- */
-
-#include "devices/SoftwareDevice.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This device enables to let the user read raw data out of it.
- */
-class AUD_API ReadDevice : public SoftwareDevice
-{
-private:
- /**
- * Whether the device is currently playing back.
- */
- bool m_playing;
-
- // delete copy constructor and operator=
- ReadDevice(const ReadDevice&) = delete;
- ReadDevice& operator=(const ReadDevice&) = delete;
-
-protected:
- virtual void AUD_LOCAL playing(bool playing);
-
-public:
- /**
- * Creates a new read device.
- * \param specs The wanted audio specification.
- */
- ReadDevice(DeviceSpecs specs);
-
- /**
- * Creates a new read device.
- * \param specs The wanted audio specification.
- */
- ReadDevice(Specs specs);
-
- /**
- * Closes the device.
- */
- virtual ~ReadDevice();
-
- /**
- * Reads the next bytes into the supplied buffer.
- * \param buffer The target buffer.
- * \param length The length in samples to be filled.
- * \return True if the reading succeeded, false if there are no sounds
- * played back currently, in that case the buffer is filled with
- * silence.
- */
- bool read(data_t* buffer, int length);
-
- /**
- * Changes the output specification.
- * \param specs The new audio data specification.
- */
- void changeSpecs(Specs specs);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/SoftwareDevice.h b/extern/audaspace/include/devices/SoftwareDevice.h
deleted file mode 100644
index 8f3846394c6..00000000000
--- a/extern/audaspace/include/devices/SoftwareDevice.h
+++ /dev/null
@@ -1,368 +0,0 @@
-/*******************************************************************************
- * 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 SoftwareDevice.h
- * @ingroup devices
- * The SoftwareDevice class.
- */
-
-#include "devices/IDevice.h"
-#include "devices/IHandle.h"
-#include "devices/I3DDevice.h"
-#include "devices/I3DHandle.h"
-#include "devices/DefaultSynchronizer.h"
-#include "util/Buffer.h"
-
-#include <list>
-#include <mutex>
-
-AUD_NAMESPACE_BEGIN
-
-class Mixer;
-class PitchReader;
-class ResampleReader;
-class ChannelMapperReader;
-
-/**
- * The software device is a generic device with software mixing.
- * It is a base class for all software mixing classes.
- * Classes implementing this have to:
- * - Implement the playing function.
- * - Prepare the m_specs, m_mixer variables.
- * - Call the create and destroy functions.
- * - Call the mix function to retrieve their audio data.
- */
-class AUD_API SoftwareDevice : public IDevice, public I3DDevice
-{
-protected:
- /// Saves the data for playback.
- class AUD_API SoftwareHandle : public IHandle, public I3DHandle
- {
- private:
- // delete copy constructor and operator=
- SoftwareHandle(const SoftwareHandle&) = delete;
- SoftwareHandle& operator=(const SoftwareHandle&) = delete;
-
- public:
- /// The reader source.
- std::shared_ptr<IReader> m_reader;
-
- /// The pitch reader in between.
- std::shared_ptr<PitchReader> m_pitch;
-
- /// The resample reader in between.
- std::shared_ptr<ResampleReader> m_resampler;
-
- /// The channel mapper reader in between.
- std::shared_ptr<ChannelMapperReader> m_mapper;
-
- /// Whether to keep the source if end of it is reached.
- bool m_keep;
-
- /// The user set pitch of the source.
- float m_user_pitch;
-
- /// The user set volume of the source.
- float m_user_volume;
-
- /// The user set panning for non-3D sources
- float m_user_pan;
-
- /// The calculated final volume of the source.
- float m_volume;
-
- /// The previous calculated final volume of the source.
- float m_old_volume;
-
- /// The loop count of the source.
- int m_loopcount;
-
- /// Location in 3D Space.
- Vector3 m_location;
-
- /// Velocity in 3D Space.
- Vector3 m_velocity;
-
- /// Orientation in 3D Space.
- Quaternion m_orientation;
-
- /// Whether the position to the listener is relative or absolute
- bool m_relative;
-
- /// Maximum volume.
- float m_volume_max;
-
- /// Minimum volume.
- float m_volume_min;
-
- /// Maximum distance.
- float m_distance_max;
-
- /// Reference distance;
- float m_distance_reference;
-
- /// Attenuation
- float m_attenuation;
-
- /// Cone outer angle.
- float m_cone_angle_outer;
-
- /// Cone inner angle.
- float m_cone_angle_inner;
-
- /// Cone outer volume.
- float m_cone_volume_outer;
-
- /// Rendering flags
- int m_flags;
-
- /// The stop callback.
- stopCallback m_stop;
-
- /// Stop callback data.
- void* m_stop_data;
-
- /// Current status of the handle
- Status m_status;
-
- /// Own device.
- SoftwareDevice* m_device;
-
- /**
- * This method is for internal use only.
- * @param keep Whether the sound should be marked stopped or paused.
- * @return Whether the action succeeded.
- */
- bool pause(bool keep);
-
- public:
- /**
- * Creates a new software handle.
- * \param device The device this handle is from.
- * \param reader The reader to play.
- * \param pitch The pitch reader.
- * \param resampler The resampling reader.
- * \param mapper The channel mapping reader.
- * \param keep Whether to keep the handle when the sound ends.
- */
- SoftwareHandle(SoftwareDevice* device, std::shared_ptr<IReader> reader, std::shared_ptr<PitchReader> pitch, std::shared_ptr<ResampleReader> resampler, std::shared_ptr<ChannelMapperReader> mapper, bool keep);
-
- /**
- * Updates the handle's playback parameters.
- */
- void update();
-
- /**
- * Sets the audio output specification of the readers.
- * \param specs The output specification.
- */
- void setSpecs(Specs specs);
-
- virtual ~SoftwareHandle() {}
- virtual bool pause();
- virtual bool resume();
- virtual bool stop();
- virtual bool getKeep();
- virtual bool setKeep(bool keep);
- virtual bool seek(float position);
- virtual float getPosition();
- virtual Status getStatus();
- virtual float getVolume();
- virtual bool setVolume(float volume);
- virtual float getPitch();
- virtual bool setPitch(float pitch);
- virtual int getLoopCount();
- virtual bool setLoopCount(int count);
- virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
-
- virtual Vector3 getLocation();
- virtual bool setLocation(const Vector3& location);
- virtual Vector3 getVelocity();
- virtual bool setVelocity(const Vector3& velocity);
- virtual Quaternion getOrientation();
- virtual bool setOrientation(const Quaternion& orientation);
- virtual bool isRelative();
- virtual bool setRelative(bool relative);
- virtual float getVolumeMaximum();
- virtual bool setVolumeMaximum(float volume);
- virtual float getVolumeMinimum();
- virtual bool setVolumeMinimum(float volume);
- virtual float getDistanceMaximum();
- virtual bool setDistanceMaximum(float distance);
- virtual float getDistanceReference();
- virtual bool setDistanceReference(float distance);
- virtual float getAttenuation();
- virtual bool setAttenuation(float factor);
- virtual float getConeAngleOuter();
- virtual bool setConeAngleOuter(float angle);
- virtual float getConeAngleInner();
- virtual bool setConeAngleInner(float angle);
- virtual float getConeVolumeOuter();
- virtual bool setConeVolumeOuter(float volume);
- };
-
- /**
- * The specification of the device.
- */
- DeviceSpecs m_specs;
-
- /**
- * The mixer.
- */
- std::shared_ptr<Mixer> m_mixer;
-
- /**
- * Whether to do high or low quality resampling.
- */
- bool m_quality;
-
- /**
- * Initializes member variables.
- */
- void create();
-
- /**
- * Uninitializes member variables.
- */
- void destroy();
-
- /**
- * Mixes the next samples into the buffer.
- * \param buffer The target buffer.
- * \param length The length in samples to be filled.
- */
- void mix(data_t* buffer, int length);
-
- /**
- * This function tells the device, to start or pause playback.
- * \param playing True if device should playback.
- */
- virtual void playing(bool playing)=0;
-
- /**
- * Sets the audio output specification of the device.
- * \param specs The output specification.
- */
- void setSpecs(Specs specs);
-
- /**
- * Empty default constructor. To setup the device call the function create()
- * and to uninitialize call destroy().
- */
- SoftwareDevice();
-
-private:
- /**
- * The reading buffer.
- */
- Buffer m_buffer;
-
- /**
- * The list of sounds that are currently playing.
- */
- std::list<std::shared_ptr<SoftwareHandle> > m_playingSounds;
-
- /**
- * The list of sounds that are currently paused.
- */
- std::list<std::shared_ptr<SoftwareHandle> > m_pausedSounds;
-
- /**
- * Whether there is currently playback.
- */
- bool m_playback;
-
- /**
- * The mutex for locking.
- */
- std::recursive_mutex m_mutex;
-
- /**
- * The overall volume of the device.
- */
- float m_volume;
-
- /// Listener location.
- Vector3 m_location;
-
- /// Listener velocity.
- Vector3 m_velocity;
-
- /// Listener orientation.
- Quaternion m_orientation;
-
- /// Speed of Sound.
- float m_speed_of_sound;
-
- /// Doppler factor.
- float m_doppler_factor;
-
- /// Distance model.
- DistanceModel m_distance_model;
-
- /// Rendering flags
- int m_flags;
-
- /// Synchronizer.
- DefaultSynchronizer m_synchronizer;
-
- // delete copy constructor and operator=
- SoftwareDevice(const SoftwareDevice&) = delete;
- SoftwareDevice& operator=(const SoftwareDevice&) = delete;
-
-public:
-
- /**
- * Sets the panning of a specific handle.
- * \param handle The handle to set the panning from.
- * \param pan The new panning value, should be in the range [-2, 2].
- */
- static void setPanning(IHandle* handle, float pan);
-
- /**
- * Sets the resampling quality.
- * \param quality Low (false) or high (true) quality.
- */
- void setQuality(bool quality);
-
- virtual DeviceSpecs getSpecs() const;
- virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false);
- virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false);
- virtual void stopAll();
- virtual void lock();
- virtual void unlock();
- virtual float getVolume() const;
- virtual void setVolume(float volume);
- virtual ISynchronizer* getSynchronizer();
-
- virtual Vector3 getListenerLocation() const;
- virtual void setListenerLocation(const Vector3& location);
- virtual Vector3 getListenerVelocity() const;
- virtual void setListenerVelocity(const Vector3& velocity);
- virtual Quaternion getListenerOrientation() const;
- virtual void setListenerOrientation(const Quaternion& orientation);
- virtual float getSpeedOfSound() const;
- virtual void setSpeedOfSound(float speed);
- virtual float getDopplerFactor() const;
- virtual void setDopplerFactor(float factor);
- virtual DistanceModel getDistanceModel() const;
- virtual void setDistanceModel(DistanceModel model);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/File.h b/extern/audaspace/include/file/File.h
deleted file mode 100644
index 24745a757e8..00000000000
--- a/extern/audaspace/include/file/File.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * 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 File.h
- * @ingroup file
- * The File class.
- */
-
-#include "ISound.h"
-
-#include <string>
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class Buffer;
-
-/**
- * The File sound tries to read a sound file via all available file inputs
- * that have been registered in the FileManager class.
- */
-class AUD_API File : public ISound
-{
-private:
- /**
- * The filename of the sound source file.
- */
- std::string m_filename;
-
- /**
- * The buffer to read from.
- */
- std::shared_ptr<Buffer> m_buffer;
-
- // delete copy constructor and operator=
- File(const File&) = delete;
- File& operator=(const File&) = delete;
-
-public:
- /**
- * Creates a new sound.
- * The file is read from the file system using the given path.
- * \param filename The sound file path.
- */
- File(std::string filename);
-
- /**
- * Creates a new sound.
- * The file is read from memory using the supplied buffer.
- * \param buffer The buffer to read from.
- * \param size The size of the buffer.
- */
- File(const data_t* buffer, int size);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/FileManager.h b/extern/audaspace/include/file/FileManager.h
deleted file mode 100644
index 03943ea8ae0..00000000000
--- a/extern/audaspace/include/file/FileManager.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * 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 FileManager.h
- * @ingroup file
- * The FileManager class.
- */
-
-#include "respec/Specification.h"
-#include "IWriter.h"
-
-#include <list>
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class IFileInput;
-class IFileOutput;
-class IReader;
-class Buffer;
-
-/**
- * The FileManager manages all file input and output plugins.
- */
-class AUD_API FileManager
-{
-private:
- static std::list<std::shared_ptr<IFileInput>>& inputs();
- static std::list<std::shared_ptr<IFileOutput>>& outputs();
-
- // delete copy constructor and operator=
- FileManager(const FileManager&) = delete;
- FileManager& operator=(const FileManager&) = delete;
- FileManager() = delete;
-
-public:
- /**
- * Registers a file input used to create an IReader to read from a file.
- * @param input The IFileInput to register.
- */
- static void registerInput(std::shared_ptr<IFileInput> input);
-
- /**
- * Registers a file output used to create an IWriter to write to a file.
- * @param output The IFileOutput to register.
- */
- static void registerOutput(std::shared_ptr<IFileOutput> output);
-
- /**
- * Creates a file reader for the given filename if a registed IFileInput is able to read it.
- * @param filename The path to the file.
- * @return The reader created.
- * @exception Exception If no file input can read the file an exception is thrown.
- */
- static std::shared_ptr<IReader> createReader(std::string filename);
-
- /**
- * Creates a file reader for the given buffer if a registed IFileInput is able to read it.
- * @param buffer The buffer to read the file from.
- * @return The reader created.
- * @exception Exception If no file input can read the file an exception is thrown.
- */
- static std::shared_ptr<IReader> createReader(std::shared_ptr<Buffer> buffer);
-
- /**
- * Creates a file writer that writes a sound to the given file path.
- * Existing files will be overwritten.
- * @param filename The file path to write to.
- * @param specs The output specification.
- * @param format The container format for the file.
- * @param codec The codec used inside the container.
- * @param bitrate The bitrate to write with.
- * @return A writer that creates the file.
- * @exception Exception If no file output can write the file with the given specification an exception is thrown.
- */
- static std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/FileWriter.h b/extern/audaspace/include/file/FileWriter.h
deleted file mode 100644
index dac842f2a8f..00000000000
--- a/extern/audaspace/include/file/FileWriter.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * 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 FileWriter.h
- * @ingroup file
- * The FileWriter class.
- */
-
-#include "respec/Specification.h"
-#include "file/IWriter.h"
-
-#include <string>
-#include <vector>
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class IReader;
-
-/**
- * The FileWriter class is able to create IWriter classes as well as write readers to them.
- */
-class AUD_API FileWriter
-{
-private:
- // hide default constructor, copy constructor and operator=
- FileWriter() = delete;
- FileWriter(const FileWriter&) = delete;
- FileWriter& operator=(const FileWriter&) = delete;
-
-public:
- /**
- * Creates a new IWriter.
- * \param filename The file to write to.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \return The writer to write data to.
- */
- static std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
-
- /**
- * Writes a reader to a writer.
- * \param reader The reader to read from.
- * \param writer The writer to write to.
- * \param length How many samples should be transferred.
- * \param buffersize How many samples should be transferred at once.
- */
- static void writeReader(std::shared_ptr<IReader> reader, std::shared_ptr<IWriter> writer, unsigned int length, unsigned int buffersize);
-
- /**
- * Writes a reader to several writers.
- * \param reader The reader to read from.
- * \param writers The writers to write to.
- * \param length How many samples should be transferred.
- * \param buffersize How many samples should be transferred at once.
- */
- static void writeReader(std::shared_ptr<IReader> reader, std::vector<std::shared_ptr<IWriter> >& writers, unsigned int length, unsigned int buffersize);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/IFileInput.h b/extern/audaspace/include/file/IFileInput.h
deleted file mode 100644
index bb016a88602..00000000000
--- a/extern/audaspace/include/file/IFileInput.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * 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 IFileInput.h
- * @ingroup file
- * The IFileInput interface.
- */
-
-#include "Audaspace.h"
-
-#include <memory>
-#include <string>
-
-AUD_NAMESPACE_BEGIN
-
-class IReader;
-class Buffer;
-
-/**
- * @interface IFileInput
- * The IFileInput interface represents a file input plugin that can create file
- * input readers from filenames or buffers.
- */
-class AUD_API IFileInput
-{
-public:
- /**
- * Creates a reader for a file to be read.
- * \param filename Path to the file to be read.
- * \return The reader that reads the file.
- * \exception Exception Thrown if the file specified cannot be read.
- */
- virtual std::shared_ptr<IReader> createReader(std::string filename)=0;
-
- /**
- * Creates a reader for a file to be read from memory.
- * \param buffer The in-memory file buffer.
- * \return The reader that reads the file.
- * \exception Exception Thrown if the file specified cannot be read.
- */
- virtual std::shared_ptr<IReader> createReader(std::shared_ptr<Buffer> buffer)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/IFileOutput.h b/extern/audaspace/include/file/IFileOutput.h
deleted file mode 100644
index 5a6efacfe94..00000000000
--- a/extern/audaspace/include/file/IFileOutput.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * 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 IFileOutput.h
- * @ingroup file
- * The IFileOutput interface.
- */
-
-#include "file/IWriter.h"
-#include "respec/Specification.h"
-
-#include <memory>
-#include <string>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * @interface IFileOutput
- * The IFileOutput interface represents a file output plugin that can write files.
- */
-class AUD_API IFileOutput
-{
-public:
- /**
- * Creates a new file writer.
- * \param filename The path to the file to be written.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \exception Exception Thrown if the file specified cannot be written.
- */
- virtual std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/IWriter.h b/extern/audaspace/include/file/IWriter.h
deleted file mode 100644
index 96decdda391..00000000000
--- a/extern/audaspace/include/file/IWriter.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * 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 IWriter.h
- * @ingroup file
- * Defines the IWriter interface as well as Container and Codec types.
- */
-
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-/// Container formats for writers.
-enum Container
-{
- CONTAINER_INVALID = 0,
- CONTAINER_AC3,
- CONTAINER_FLAC,
- CONTAINER_MATROSKA,
- CONTAINER_MP2,
- CONTAINER_MP3,
- CONTAINER_OGG,
- CONTAINER_WAV
-};
-
-/// Audio codecs for writers.
-enum Codec
-{
- CODEC_INVALID = 0,
- CODEC_AAC,
- CODEC_AC3,
- CODEC_FLAC,
- CODEC_MP2,
- CODEC_MP3,
- CODEC_PCM,
- CODEC_VORBIS,
- CODEC_OPUS
-};
-
-/**
- * @interface IWriter
- * This class represents a sound sink where audio data can be written to.
- */
-class AUD_API IWriter
-{
-public:
- /**
- * Destroys the writer.
- */
- virtual ~IWriter() {}
-
- /**
- * Returns how many samples have been written so far.
- * \return The writing position as sample count. May be negative if unknown.
- */
- virtual int getPosition() const=0;
-
- /**
- * Returns the specification of the audio data being written into the sink.
- * \return The DeviceSpecs structure.
- * \note Regardless of the format the input still has to be float!
- */
- virtual DeviceSpecs getSpecs() const=0;
-
- /**
- * Request to write the next length samples out into the sink.
- * \param length The count of samples to write.
- * \param buffer The pointer to the buffer containing the data.
- */
- virtual void write(unsigned int length, sample_t* buffer)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ADSR.h b/extern/audaspace/include/fx/ADSR.h
deleted file mode 100644
index c453f2477e1..00000000000
--- a/extern/audaspace/include/fx/ADSR.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * 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 ADSR.h
- * @ingroup fx
- * The ADSR class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * The ADSR effect implements the Attack-Delay-Sustain-Release behaviour of a sound.
- */
-class AUD_API ADSR : public Effect
-{
-private:
- /**
- * Attack time.
- */
- float m_attack;
-
- /**
- * Decay time.
- */
- float m_decay;
-
- /**
- * Sustain level.
- */
- float m_sustain;
-
- /**
- * Release time.
- */
- float m_release;
-
- // delete copy constructor and operator=
- ADSR(const ADSR&) = delete;
- ADSR& operator=(const ADSR&) = delete;
-
-public:
- /**
- * Creates a new ADSR object.
- * @param sound The sound to apply this effect to.
- * @param attack The attack time in seconds.
- * @param decay The decay time in seconds.
- * @param sustain The sustain level as linear volume.
- * @param release The release time in seconds.
- */
- ADSR(std::shared_ptr<ISound> sound, float attack, float decay, float sustain, float release);
-
- /**
- * Returns the attack time.
- * @return The attack time in seconds.
- */
- float getAttack() const;
-
- /**
- * Sets the attack time.
- * @param attack The attack time in seconds.
- */
- void setAttack(float attack);
-
- /**
- * Returns the decay time.
- * @return The decay time in seconds.
- */
- float getDecay() const;
-
- /**
- * Sets the decay time.
- * @param decay The decay time in seconds.
- */
- void setDecay(float decay);
-
- /**
- * Returns the sustain level.
- * @return The sustain level in linear volume.
- */
- float getSustain() const;
-
- /**
- * Sets the sustain level.
- * @param sustain The sustain level in linear volume.
- */
- void setSustain(float sustain);
-
- /**
- * Returns the release time.
- * @return The release time in seconds.
- */
- float getRelease() const;
-
- /**
- * Sets the release time.
- * @param release The release time in seconds.
- */
- void setRelease(float release);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ADSRReader.h b/extern/audaspace/include/fx/ADSRReader.h
deleted file mode 100644
index a9ec076a1c5..00000000000
--- a/extern/audaspace/include/fx/ADSRReader.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * 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 ADSRReader.h
- * @ingroup fx
- * The ADSRReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is an ADSR filters.
- */
-class AUD_API ADSRReader : public EffectReader
-{
-private:
- enum ADSRState
- {
- ADSR_STATE_INVALID = 0, /// Invalid ADSR state or finished.
- ADSR_STATE_ATTACK = 1, /// Initial attack state.
- ADSR_STATE_DECAY = 2, /// Decay state.
- ADSR_STATE_SUSTAIN = 3, /// Sustain state.
- ADSR_STATE_RELEASE = 4 /// Release state.
- };
-
- /**
- * Attack time.
- */
- float m_attack;
-
- /**
- * Decay time.
- */
- float m_decay;
-
- /**
- * Sustain level.
- */
- float m_sustain;
-
- /**
- * Release time.
- */
- float m_release;
-
- /**
- * Current state.
- */
- ADSRState m_state;
-
- /**
- * Current level.
- */
- float m_level;
-
- // delete copy constructor and operator=
- ADSRReader(const ADSRReader&) = delete;
- ADSRReader& operator=(const ADSRReader&) = delete;
-
- void AUD_LOCAL nextState(ADSRState state);
-
-public:
- /**
- * Creates a new ADSR reader.
- * \param reader The reader to read from.
- * \param attack The attack time in seconds.
- * \param decay The decay time in seconds.
- * \param sustain The sustain level, should be in range [0 - 1].
- * \param release The release time in seconds.
- */
- ADSRReader(std::shared_ptr<IReader> reader, float attack, float decay, float sustain, float release);
-
- virtual ~ADSRReader();
-
- virtual void read(int& length, bool& eos, sample_t* buffer);
-
- /**
- * Triggers the release.
- */
- void release();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Accumulator.h b/extern/audaspace/include/fx/Accumulator.h
deleted file mode 100644
index d0c635d663c..00000000000
--- a/extern/audaspace/include/fx/Accumulator.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * 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 Accumulator.h
- * @ingroup fx
- * The Accumulator class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-class CallbackIIRFilterReader;
-
-/**
- * This sound creates an accumulator reader.
- *
- * The accumulator adds the difference at the input to the last output in case
- * it's positive. In additive mode it additionaly adds the difference always.
- * So in case the difference is positive, it's added twice.
- */
-class AUD_API Accumulator : public Effect
-{
-private:
- /**
- * Whether the accumulator is additive.
- */
- const bool m_additive;
-
- // delete copy constructor and operator=
- Accumulator(const Accumulator&) = delete;
- Accumulator& operator=(const Accumulator&) = delete;
-
-public:
- /**
- * Creates a new accumulator sound.
- * \param sound The input sound.
- * \param additive Whether the accumulator is additive.
- */
- Accumulator(std::shared_ptr<ISound> sound, bool additive = false);
-
- virtual std::shared_ptr<IReader> createReader();
-
- /**
- * The accumulatorFilterAdditive function implements the doFilterIIR callback
- * for the additive accumulator filter.
- * @param reader The CallbackIIRFilterReader that executes the callback.
- * @param useless A user defined pointer that is not needed for this filter.
- * @return The filtered sample.
- */
- static sample_t AUD_LOCAL accumulatorFilterAdditive(CallbackIIRFilterReader* reader, void* useless);
-
- /**
- * The accumulatorFilter function implements the doFilterIIR callback
- * for the non-additive accumulator filter.
- * @param reader The CallbackIIRFilterReader that executes the callback.
- * @param useless A user defined pointer that is not needed for this filter.
- * @return The filtered sample.
- */
- static sample_t AUD_LOCAL accumulatorFilter(CallbackIIRFilterReader* reader, void* useless);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/BaseIIRFilterReader.h b/extern/audaspace/include/fx/BaseIIRFilterReader.h
deleted file mode 100644
index 193b98578de..00000000000
--- a/extern/audaspace/include/fx/BaseIIRFilterReader.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * 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 BaseIIRFilterReader.h
- * @ingroup fx
- * The BaseIIRFilterReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is a base class for infinite impulse response filters.
- */
-class AUD_API BaseIIRFilterReader : public EffectReader
-{
-private:
- /**
- * Specs.
- */
- Specs m_specs;
-
- /**
- * Length of input samples needed.
- */
- int m_xlen;
-
- /**
- * Length of output samples needed.
- */
- int m_ylen;
-
- /**
- * The last in samples array.
- */
- sample_t* m_x;
-
- /**
- * The last out samples array.
- */
- sample_t* m_y;
-
- /**
- * Position of the current input sample in the input array.
- */
- int m_xpos;
-
- /**
- * Position of the current output sample in the output array.
- */
- int m_ypos;
-
- /**
- * Current channel.
- */
- int m_channel;
-
- // delete copy constructor and operator=
- BaseIIRFilterReader(const BaseIIRFilterReader&) = delete;
- BaseIIRFilterReader& operator=(const BaseIIRFilterReader&) = delete;
-
-protected:
- /**
- * Creates a new base IIR filter reader.
- * \param reader The reader to read from.
- * \param in The count of past input samples needed.
- * \param out The count of past output samples needed.
- */
- BaseIIRFilterReader(std::shared_ptr<IReader> reader, int in, int out);
-
- /**
- * Sets the length for the required input and output samples of the IIR filter.
- * @param in The amount of past input samples needed, including the current one.
- * @param out The amount of past output samples needed.
- */
- void setLengths(int in, int out);
-
-public:
- /**
- * Retrieves the last input samples.
- * \param pos The position, valid are 0 (current) or negative values.
- * \return The sample value.
- */
- inline sample_t x(int pos)
- {
- return m_x[(m_xpos + pos + m_xlen) % m_xlen * m_specs.channels + m_channel];
- }
-
- /**
- * Retrieves the last output samples.
- * \param pos The position, valid are negative values.
- * \return The sample value.
- */
- inline sample_t y(int pos)
- {
- return m_y[(m_ypos + pos + m_ylen) % m_ylen * m_specs.channels + m_channel];
- }
-
- virtual ~BaseIIRFilterReader();
-
- virtual void read(int& length, bool& eos, sample_t* buffer);
-
- /**
- * Runs the filtering function.
- * \return The current output sample value.
- */
- virtual sample_t filter()=0;
-
- /**
- * Notifies the filter about a sample rate change.
- * \param rate The new sample rate.
- */
- virtual void sampleRateChanged(SampleRate rate);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/BinauralReader.h b/extern/audaspace/include/fx/BinauralReader.h
deleted file mode 100644
index f5667a093f6..00000000000
--- a/extern/audaspace/include/fx/BinauralReader.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 BinauralReader.h
-* @ingroup fx
-* The BinauralReader class.
-*/
-
-#include "IReader.h"
-#include "ISound.h"
-#include "Convolver.h"
-#include "HRTF.h"
-#include "Source.h"
-#include "util/FFTPlan.h"
-#include "util/ThreadPool.h"
-
-#include <memory>
-#include <vector>
-#include <future>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a reader for a sound that can sound different depending on its realtive position with the listener.
-*/
-class AUD_API BinauralReader : public IReader
-{
-private:
- /**
- * The current position.
- */
- int m_position;
-
- /**
- * The reader of the input sound.
- */
- std::shared_ptr<IReader> m_reader;
-
- /**
- * The HRTF set.
- */
- std::shared_ptr<HRTF> m_hrtfs;
-
- /**
- * A Source object that will be used to change the source position of the sound.
- */
- std::shared_ptr<Source> m_source;
-
- /**
- * The intended azimuth.
- */
- float m_Azimuth;
-
- /**
- * The intended elevation.
- */
- float m_Elevation;
-
- /**
- * The real azimuth being used.
- */
- float m_RealAzimuth;
-
- /**
- * The real elevation being used.
- */
- float m_RealElevation;
-
- /**
- * The FFT size, given by the FFTPlan.
- */
- int m_N;
-
- /**
- * The length of the impulse response fragments, m_N/2 will be used.
- */
- int m_M;
-
- /**
- * The max length of the input slices, m_N/2 will be used.
- */
- int m_L;
-
- /**
- * The array of convolvers that will be used, one per channel.
- */
- std::vector<std::unique_ptr<Convolver>> m_convolvers;
-
- /**
- * True if a transition is happening.
- */
- bool m_transition;
-
- /**
- * The position of the current transition (decreasing)
- */
- int m_transPos;
-
- /**
- * The output buffer in which the convolved data will be written and from which the reader will read.
- */
- sample_t* m_outBuffer;
-
- /**
- * The input buffer that will hold the data to be convolved.
- */
- sample_t* m_inBuffer;
-
- /**
- * Current position in which the m_outBuffer is being read.
- */
- int m_outBufferPos;
-
- /**
- * Length of rhe m_outBuffer.
- */
- int m_outBufLen;
-
- /**
- * Effective length of rhe m_outBuffer.
- */
- int m_eOutBufLen;
-
- /**
- * Flag indicating whether the end of the sound has been reached or not.
- */
- bool m_eosReader;
-
- /**
- * Flag indicating whether the end of the extra data generated in the convolution has been reached or not.
- */
- bool m_eosTail;
-
- /**
- * A vector of buffers (one per channel) on which the audio signal will be separated per channel so it can be convolved.
- */
- std::vector<sample_t*> m_vecOut;
-
- /**
- * A shared ptr to a thread pool.
- */
- std::shared_ptr<ThreadPool> m_threadPool;
-
- /**
- * Length of the input data to be used by the channel threads.
- */
- int m_lastLengthIn;
-
- /**
- * A vector of futures to sync tasks.
- */
- std::vector<std::future<int>> m_futures;
-
- // delete copy constructor and operator=
- BinauralReader(const BinauralReader&) = delete;
- BinauralReader& operator=(const BinauralReader&) = delete;
-
-public:
- /**
- * Creates a new convolver reader.
- * \param reader A reader of the input sound to be assigned to this reader. It must have one channel.
- * \param hrtfs A shared pointer to an HRTF object that will be used to get a particular impulse response depending on the source.
- * \param source A shared pointer to a Source object that will be used to change the source position of the sound.
- * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
- * \param plan A shared pointer to and FFT plan that will be used for convolution.
- * \exception Exception thrown if the specs of the HRTFs and the sound don't match or if the provided HRTF object is empty.
- */
- BinauralReader(std::shared_ptr<IReader> reader, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
- virtual ~BinauralReader();
-
- 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);
-
-private:
- /**
- * Joins several buffers (one per channel) into the m_outBuffer.
- * \param start The starting position from which the m_outBuffer will be written.
- * \param len The amout of samples that will be joined.
- * \param nConvolvers The number of convolvers that have been used. Only use 2 or 4 as possible values.
- If the value is 4 the result will be interpolated.
- */
- void joinByChannel(int start, int len, int nConvolvers);
-
- /**
- * Loads the m_outBuffer with data.
- * \param nConvolvers The number of convolver objects that will be used. Only 2 or 4 should be used.
- */
- void loadBuffer(int nConvolvers);
-
- /**
- * The function that the threads will run. It will process a subset of channels.
- * \param id An id number that will determine which subset of channels will be processed.
- * \param input A flag that will indicate if thare is input data.
- * -If true there is new input data.
- * -If false there isn't new input data.
- * \return The number of samples obtained.
- */
- int threadFunction(int id, bool input);
-
- bool checkSource();
-};
-
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/BinauralSound.h b/extern/audaspace/include/fx/BinauralSound.h
deleted file mode 100644
index 733e111dc2b..00000000000
--- a/extern/audaspace/include/fx/BinauralSound.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 BinauralSound.h
-* @ingroup fx
-* The BinauralSound class.
-*/
-
-#include "ISound.h"
-#include "HRTF.h"
-#include "Source.h"
-#include "util/ThreadPool.h"
-#include "util/FFTPlan.h"
-
-#include <memory>
-#include <vector>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a sound that can sound different depending on its realtive position with the listener.
-*/
-class AUD_API BinauralSound : public ISound
-{
-private:
- /**
- * A pointer to the imput sound.
- */
- std::shared_ptr<ISound> m_sound;
-
- /**
- * A pointer to an HRTF object with a collection of impulse responses.
- */
- std::shared_ptr<HRTF> m_hrtfs;
-
- /**
- * A pointer to a Source object which represents the source of the sound.
- */
- std::shared_ptr<Source> m_source;
-
- /**
- * A shared ptr to a thread pool.
- */
- std::shared_ptr<ThreadPool> m_threadPool;
-
- /**
- * A shared ponter to an FFT plan.
- */
- std::shared_ptr<FFTPlan> m_plan;
-
- // delete copy constructor and operator=
- BinauralSound(const BinauralSound&) = delete;
- BinauralSound& operator=(const BinauralSound&) = delete;
-
-public:
- /**
- * Creates a new ConvolverSound.
- * \param sound The sound that will be convolved. It must have only one channel.
- * \param hrtfs The HRTF set that will be used.
- * \param source A shared pointer to a Source object that contains the source of the sound.
- * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
- * \param plan A shared pointer to a FFTPlan object that will be used for convolution.
- * \warning The same FFTPlan object must be used to construct both this and the HRTF object provided.
- */
- BinauralSound(std::shared_ptr<ISound> sound, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
-
- /**
- * Creates a new BinauralSound. A default FFT plan will be created.
- * \param sound The sound that will be convolved. Must have only one channel.
- * \param hrtfs The HRTF set that will be used.
- * \param source A shared pointer to a Source object that contains the source of the sound.
- * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
- * \warning To use this constructor no FFTPlan object must have been provided to the hrtfs.
- */
- BinauralSound(std::shared_ptr<ISound> sound, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool);
-
- virtual std::shared_ptr<IReader> createReader();
-
- /**
- * Retrieves the HRTF set being used.
- * \return A shared pointer to the current HRTF object being used.
- */
- std::shared_ptr<HRTF> getHRTFs();
-
- /**
- * Changes the set of HRTFs used for convolution, it'll only affect newly created readers.
- * \param hrtfs A shared pointer to the new HRTF object.
- */
- void setHRTFs(std::shared_ptr<HRTF> hrtfs);
-
- /**
- * Retrieves the Source object being used.
- * \return A shared pointer to the current Source object being used.
- */
- std::shared_ptr<Source> getSource();
-
- /**
- * Changes the Source object used to change the source position of the sound.
- * \param source A shared pointer to the new Source object.
- */
- void setSource(std::shared_ptr<Source> source);
-};
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Butterworth.h b/extern/audaspace/include/fx/Butterworth.h
deleted file mode 100644
index db2ad743863..00000000000
--- a/extern/audaspace/include/fx/Butterworth.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * 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 Butterworth.h
- * @ingroup fx
- * The Butterworth class.
- */
-
-#include "fx/DynamicIIRFilter.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a butterworth lowpass filter reader.
- */
-class AUD_API Butterworth : public DynamicIIRFilter
-{
-private:
- // delete copy constructor and operator=
- Butterworth(const Butterworth&) = delete;
- Butterworth& operator=(const Butterworth&) = delete;
-
-public:
- /**
- * Creates a new butterworth sound.
- * \param sound The input sound.
- * \param frequency The cutoff frequency.
- */
- Butterworth(std::shared_ptr<ISound> sound, float frequency);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ButterworthCalculator.h b/extern/audaspace/include/fx/ButterworthCalculator.h
deleted file mode 100644
index f4d4894c8b8..00000000000
--- a/extern/audaspace/include/fx/ButterworthCalculator.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * 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 ButterworthCalculator.h
- * @ingroup fx
- * The ButterworthCalculator class.
- */
-
-#include "fx/IDynamicIIRFilterCalculator.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * The ButterworthCalculator class calculates fourth order Butterworth low pass
- * filter coefficients for a dynamic DynamicIIRFilter.
- */
-class AUD_LOCAL ButterworthCalculator : public IDynamicIIRFilterCalculator
-{
-private:
- /**
- * The attack value in seconds.
- */
- const float m_frequency;
-
- // delete copy constructor and operator=
- ButterworthCalculator(const ButterworthCalculator&) = delete;
- ButterworthCalculator& operator=(const ButterworthCalculator&) = delete;
-
-public:
- /**
- * Creates a ButterworthCalculator object.
- * @param frequency The cutoff frequency.
- */
- ButterworthCalculator(float frequency);
-
- virtual void recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/CallbackIIRFilterReader.h b/extern/audaspace/include/fx/CallbackIIRFilterReader.h
deleted file mode 100644
index f1dfab70d7f..00000000000
--- a/extern/audaspace/include/fx/CallbackIIRFilterReader.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * 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 CallbackIIRFilterReader.h
- * @ingroup fx
- * The CallbackIIRFilterReader class.
- */
-
-#include "fx/BaseIIRFilterReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-class CallbackIIRFilterReader;
-
-/**
- * The doFilterIIR callback is executed when a new sample of a callback filter
- * should be calculated. For sample access the CallbackIIRFilterReader is
- * provided. Furthermore a user defined pointer is also handed to the callback.
- */
-typedef sample_t (*doFilterIIR)(CallbackIIRFilterReader*, void*);
-
-/**
- * The endFilterIIR callback is called when the callback filter is not needed
- * anymore. The goal of this function should be to clean up the data behind the
- * user supplied pointer which is handed to the callback.
- */
-typedef void (*endFilterIIR)(void*);
-
-/**
- * This class provides an interface for infinite impulse response filters via a
- * callback filter function.
- */
-class AUD_API CallbackIIRFilterReader : public BaseIIRFilterReader
-{
-private:
- /**
- * Filter function.
- */
- const doFilterIIR m_filter;
-
- /**
- * End filter function.
- */
- const endFilterIIR m_endFilter;
-
- /**
- * Data pointer.
- */
- void* m_data;
-
- // delete copy constructor and operator=
- CallbackIIRFilterReader(const CallbackIIRFilterReader&) = delete;
- CallbackIIRFilterReader& operator=(const CallbackIIRFilterReader&) = delete;
-
-public:
- /**
- * Creates a new callback IIR filter reader.
- * \param reader The reader to read from.
- * \param in The count of past input samples needed.
- * \param out The count of past output samples needed.
- * \param doFilter The filter callback.
- * \param endFilter The finishing callback.
- * \param data Data pointer for the callbacks.
- */
- CallbackIIRFilterReader(std::shared_ptr<IReader> reader, int in, int out, doFilterIIR doFilter, endFilterIIR endFilter = 0, void* data = nullptr);
-
- virtual ~CallbackIIRFilterReader();
-
- virtual sample_t filter();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Convolver.h b/extern/audaspace/include/fx/Convolver.h
deleted file mode 100644
index 5ce134839f6..00000000000
--- a/extern/audaspace/include/fx/Convolver.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 Convolver.h
-* @ingroup fx
-* The Convolver class.
-*/
-
-#include "FFTConvolver.h"
-#include "util/ThreadPool.h"
-#include "util/FFTPlan.h"
-
-#include <memory>
-#include <vector>
-#include <mutex>
-#include <future>
-#include <atomic>
-#include <deque>
-
-AUD_NAMESPACE_BEGIN
-/**
-* This class allows to convolve a sound with a very large impulse response.
-*/
-class AUD_API Convolver
-{
-private:
- /**
- * The FFT size, must be at least M+L-1.
- */
- int m_N;
-
- /**
- * The length of the impulse response parts.
- */
- int m_M;
-
- /**
- * The max length of the input slices.
- */
- int m_L;
-
- /**
- * The impulse response divided in parts.
- */
- std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> m_irBuffers;
-
- /**
- * Accumulation buffers for the threads.
- */
- std::vector<fftwf_complex*> m_threadAccBuffers;
-
- /**
- * A vector of FFTConvolvers used to calculate the partial convolutions.
- */
- std::vector<std::unique_ptr<FFTConvolver>> m_fftConvolvers;
-
- /**
- * The actual number of threads being used.
- */
- int m_numThreads;
-
- /**
- * A pool of threads that will be used for convolution.
- */
- std::shared_ptr<ThreadPool> m_threadPool;
-
- /**
- * A vector of futures used for thread sync
- */
- std::vector<std::future<bool>> m_futures;
-
- /**
- * A mutex for the sum of thread accumulators.
- */
- std::mutex m_sumMutex;
-
- /**
- * A flag to control thread execution when a reset is scheduled.
- */
- std::atomic_bool m_resetFlag;
-
- /**
- * Global accumulation buffer.
- */
- fftwf_complex* m_accBuffer;
-
- /**
- * Delay line.
- */
- std::deque<fftwf_complex*> m_delayLine;
-
- /**
- * The complete length of the impulse response.
- */
- int m_irLength;
-
- /**
- * Counter for the tail;
- */
- int m_tailCounter;
-
- /**
- * Flag end of sound;
- */
- bool m_eos;
-
- // delete copy constructor and operator=
- Convolver(const Convolver&) = delete;
- Convolver& operator=(const Convolver&) = delete;
-
-public:
-
- /**
- * Creates a new FFTConvolver.
- * \param ir A shared pointer to a vector with the data of the various impulse response parts in the frequency domain (see ImpulseResponse class for an easy way to obtain it).
- * \param irLength The length of the full impulse response.
- * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
- * \param plan A shared pointer to a FFT plan that will be used for convolution.
- */
- Convolver(std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> ir, int irLength, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
-
- virtual ~Convolver();
-
- /**
- * Convolves the data that is provided with the inpulse response.
- * Given a plan of size N, the amount of samples convolved by one call to this method will be N/2.
- * \param[in] inBuffer A buffer with the input data to be convolved, nullptr if the source sound has ended (the convolved sound is larger than the source sound).
- * \param[in] outBuffer A buffer in which the convolved data will be written. Its size must be at least N/2.
- * \param[in,out] length The number of samples you wish to obtain. If an inBuffer is provided this argument must match its length.
- * When this method returns, the value of length represents the number of samples written into the outBuffer.
- * \param[out] eos True if the end of the sound is reached, false otherwise.
- */
- void getNext(sample_t* inBuffer, sample_t* outBuffer, int& length, bool& eos);
-
- /**
- * Resets all the internally stored data so the convolution of a new sound can be started.
- */
- void reset();
-
- /**
- * Retrieves the current impulse response being used.
- * \return The current impulse response.
- */
- std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> getImpulseResponse();
-
- /**
- * Changes the impulse response and resets the convolver.
- * \param ir A shared pointer to a vector with the data of the various impulse response parts in the frequency domain (see ImpulseResponse class for an easy way to obtain it).
- */
- void setImpulseResponse(std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> ir);
-
-private:
-
- /**
- * This function will be enqueued into the thread pool, and will process the input signal with a subset of the impulse response parts.
- * \param id The id of the thread, starting with 0.
- */
- bool threadFunction(int id);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ConvolverReader.h b/extern/audaspace/include/fx/ConvolverReader.h
deleted file mode 100644
index 2ce917daec5..00000000000
--- a/extern/audaspace/include/fx/ConvolverReader.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 ConvolverReader.h
-* @ingroup fx
-* The ConvolverReader class.
-*/
-
-#include "IReader.h"
-#include "ISound.h"
-#include "Convolver.h"
-#include "ImpulseResponse.h"
-#include "util/FFTPlan.h"
-#include "util/ThreadPool.h"
-
-#include <memory>
-#include <vector>
-#include <future>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a reader for a sound that can be modified depending on a given impulse response.
-*/
-class AUD_API ConvolverReader : public IReader
-{
-private:
- /**
- * The current position.
- */
- int m_position;
-
- /**
- * The reader of the input sound.
- */
- std::shared_ptr<IReader> m_reader;
-
- /**
- * The impulse response in the frequency domain.
- */
- std::shared_ptr<ImpulseResponse> m_ir;
-
- /**
- * The FFT size, given by the FFTPlan.
- */
- int m_N;
-
- /**
- * The length of the impulse response fragments, m_N/2 will be used.
- */
- int m_M;
-
- /**
- * The max length of the input slices, m_N/2 will be used.
- */
- int m_L;
-
- /**
- * The array of convolvers that will be used, one per channel.
- */
- std::vector<std::unique_ptr<Convolver>> m_convolvers;
-
- /**
- * The output buffer in which the convolved data will be written and from which the reader will read.
- */
- sample_t* m_outBuffer;
-
- /**
- * A vector of buffers (one per channel) on which the audio signal will be separated per channel so it can be convolved.
- */
- std::vector<sample_t*> m_vecInOut;
-
- /**
- * Current position in which the m_outBuffer is being read.
- */
- int m_outBufferPos;
-
- /**
- * Effective length of the m_outBuffer.
- */
- int m_eOutBufLen;
-
- /**
- * Real length of the m_outBuffer.
- */
- int m_outBufLen;
-
- /**
- * Flag indicating whether the end of the sound has been reached or not.
- */
- bool m_eosReader;
-
- /**
- * Flag indicating whether the end of the extra data generated in the convolution has been reached or not.
- */
- bool m_eosTail;
-
- /**
- * The number of channels of the sound to be convolved.
- */
- int m_inChannels;
-
- /**
- * The number of channels of the impulse response.
- */
- int m_irChannels;
-
- /**
- * The number of threads used for channels.
- */
- int m_nChannelThreads;
-
- /**
- * Length of the input data to be used by the channel threads.
- */
- int m_lastLengthIn;
-
- /**
- * A shared ptr to a thread pool.
- */
- std::shared_ptr<ThreadPool> m_threadPool;
-
- /**
- * A vector of futures to sync tasks.
- */
- std::vector<std::future<int>> m_futures;
-
- // delete copy constructor and operator=
- ConvolverReader(const ConvolverReader&) = delete;
- ConvolverReader& operator=(const ConvolverReader&) = delete;
-
-public:
- /**
- * Creates a new convolver reader.
- * \param reader A reader of the input sound to be assigned to this reader.
- * \param ir A shared pointer to an impulseResponse object that will be used to convolve the sound.
- * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
- * \param plan A shared pointer to and FFT plan that will be used for convolution.
- * \exception Exception thrown if impulse response doesn't match the specs (number fo channels and rate) of the input reader.
- */
- ConvolverReader(std::shared_ptr<IReader> reader, std::shared_ptr<ImpulseResponse> ir, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
- virtual ~ConvolverReader();
-
- 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);
-
-private:
- /**
- * Divides a sound buffer in several buffers, one per channel.
- * \param buffer The buffer that will be divided.
- * \param len The length of the buffer.
- */
- void divideByChannel(const sample_t* buffer, int len);
-
- /**
- * Joins several buffers (one per channel) into the m_outBuffer.
- * \param start The starting position from which the m_outBuffer will be written.
- * \param len The amout of samples that will be joined.
- */
- void joinByChannel(int start, int len);
-
- /**
- * Loads the m_outBuffer with data.
- */
- void loadBuffer();
-
- /**
- * The function that the threads will run. It will process a subset of channels.
- * \param id An id number that will determine which subset of channels will be processed.
- * \param input A flag that will indicate if thare is input data.
- * -If true there is new input data.
- * -If false there isn't new input data.
- * \return The number of samples obtained.
- */
- int threadFunction(int id, bool input);
-};
-
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/ConvolverSound.h b/extern/audaspace/include/fx/ConvolverSound.h
deleted file mode 100644
index 957e3b8af1c..00000000000
--- a/extern/audaspace/include/fx/ConvolverSound.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 ConvolverSound.h
-* @ingroup fx
-* The ConvolverSound class.
-*/
-
-#include "ISound.h"
-#include "ImpulseResponse.h"
-#include "util/ThreadPool.h"
-#include "util/FFTPlan.h"
-
-#include <memory>
-#include <vector>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a sound that can be modified depending on a given impulse response.
-*/
-class AUD_API ConvolverSound : public ISound
-{
-private:
- /**
- * A pointer to the imput sound.
- */
- std::shared_ptr<ISound> m_sound;
-
- /**
- * A pointer to the impulse response.
- */
- std::shared_ptr<ImpulseResponse> m_impulseResponse;
-
- /**
- * A shared ptr to a thread pool.
- */
- std::shared_ptr<ThreadPool> m_threadPool;
-
- /**
- * A shared ponter to an FFT plan.
- */
- std::shared_ptr<FFTPlan> m_plan;
-
- // delete copy constructor and operator=
- ConvolverSound(const ConvolverSound&) = delete;
- ConvolverSound& operator=(const ConvolverSound&) = delete;
-
-public:
- /**
- * Creates a new ConvolverSound.
- * \param sound The sound that will be convolved.
- * \param impulseResponse The impulse response sound.
- * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
- * \param plan A shared pointer to a FFTPlan object that will be used for convolution.
- * \warning The same FFTPlan object must be used to construct both this and the ImpulseResponse object provided.
- */
- ConvolverSound(std::shared_ptr<ISound> sound, std::shared_ptr<ImpulseResponse> impulseResponse, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
-
- /**
- * Creates a new ConvolverSound. A default FFT plan will be created.
- * \param sound The sound that will be convolved.
- * \param impulseResponse The impulse response sound.
- * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
- * \warning To use this constructor no FFTPlan object must have been provided to the inpulseResponse.
- */
- ConvolverSound(std::shared_ptr<ISound> sound, std::shared_ptr<ImpulseResponse> impulseResponse, std::shared_ptr<ThreadPool> threadPool);
-
- virtual std::shared_ptr<IReader> createReader();
-
- /**
- * Retrieves the impulse response sound being used.
- * \return A shared pointer to the current impulse response being used.
- */
- std::shared_ptr<ImpulseResponse> getImpulseResponse();
-
- /**
- * Changes the inpulse response used for convolution, it'll only affect newly created readers.
- * \param impulseResponse A shared pointer to the new impulse response sound.
- */
- void setImpulseResponse(std::shared_ptr<ImpulseResponse> impulseResponse);
-};
-
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Delay.h b/extern/audaspace/include/fx/Delay.h
deleted file mode 100644
index d6ab93ca351..00000000000
--- a/extern/audaspace/include/fx/Delay.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * 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 Delay.h
- * @ingroup fx
- * The Delay class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound plays another sound delayed.
- */
-class AUD_API Delay : public Effect
-{
-private:
- /**
- * The delay in samples.
- */
- const float m_delay;
-
- // delete copy constructor and operator=
- Delay(const Delay&) = delete;
- Delay& operator=(const Delay&) = delete;
-
-public:
- /**
- * Creates a new delay sound.
- * \param sound The input sound.
- * \param delay The desired delay in seconds.
- */
- Delay(std::shared_ptr<ISound> sound, float delay = 0);
-
- /**
- * Returns the delay in seconds.
- */
- float getDelay() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DelayReader.h b/extern/audaspace/include/fx/DelayReader.h
deleted file mode 100644
index fe37e56d83e..00000000000
--- a/extern/audaspace/include/fx/DelayReader.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * 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 DelayReader.h
- * @ingroup fx
- * The DelayReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class reads another reader and delays it.
- */
-class AUD_API DelayReader : public EffectReader
-{
-private:
- /**
- * The delay level.
- */
- const int m_delay;
-
- /**
- * The remaining delay for playback.
- */
- int m_remdelay;
-
- // delete copy constructor and operator=
- DelayReader(const DelayReader&) = delete;
- DelayReader& operator=(const DelayReader&) = delete;
-
-public:
- /**
- * Creates a new delay reader.
- * \param reader The reader to read from.
- * \param delay The delay in seconds.
- */
- DelayReader(std::shared_ptr<IReader> reader, float delay);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DynamicIIRFilter.h b/extern/audaspace/include/fx/DynamicIIRFilter.h
deleted file mode 100644
index 5528e7c7b9b..00000000000
--- a/extern/audaspace/include/fx/DynamicIIRFilter.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * 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 DynamicIIRFilter.h
- * @ingroup fx
- * The DynamicIIRFilter class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-class IDynamicIIRFilterCalculator;
-
-/**
- * This sound creates a IIR filter reader.
- *
- * This means that on sample rate change the filter recalculates its
- * coefficients.
- */
-class AUD_API DynamicIIRFilter : public Effect
-{
-protected:
- /// The IDynamicIIRFilterCalculator that calculates the dynamic filter coefficients.
- std::shared_ptr<IDynamicIIRFilterCalculator> m_calculator;
-
-public:
- /**
- * Creates a new Dynmic IIR filter sound.
- * \param sound The input sound.
- * \param calculator The calculator which recalculates the dynamic filter coefficients.
- */
- DynamicIIRFilter(std::shared_ptr<ISound> sound, std::shared_ptr<IDynamicIIRFilterCalculator> calculator);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DynamicIIRFilterReader.h b/extern/audaspace/include/fx/DynamicIIRFilterReader.h
deleted file mode 100644
index 9e2267243ce..00000000000
--- a/extern/audaspace/include/fx/DynamicIIRFilterReader.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * 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 DynamicIIRFilterReader.h
- * @ingroup fx
- * The DynamicIIRFilterReader class.
- */
-
-#include "fx/IIRFilterReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-class IDynamicIIRFilterCalculator;
-
-/**
- * This class is for dynamic infinite impulse response filters with simple
- * coefficients that change depending on the sample rate.
- */
-class AUD_API DynamicIIRFilterReader : public IIRFilterReader
-{
-private:
- /**
- * The sound for dynamically recalculating filter coefficients.
- */
- std::shared_ptr<IDynamicIIRFilterCalculator> m_calculator;
-
-public:
- /**
- * Creates a new DynamicIIRFilterReader.
- * @param reader The reader the filter is applied on.
- * @param calculator The IDynamicIIRFilterCalculator that recalculates the filter coefficients.
- */
- DynamicIIRFilterReader(std::shared_ptr<IReader> reader,
- std::shared_ptr<IDynamicIIRFilterCalculator> calculator);
-
- /**
- * The function sampleRateChanged is called whenever the sample rate of the
- * underlying reader changes and thus updates the filter coefficients.
- * @param rate The new sample rate.
- */
- virtual void sampleRateChanged(SampleRate rate);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DynamicMusic.h b/extern/audaspace/include/fx/DynamicMusic.h
deleted file mode 100644
index 5d59f77401a..00000000000
--- a/extern/audaspace/include/fx/DynamicMusic.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 DynamicMusic.h
-* @ingroup fx
-* The DynamicMusic class.
-*/
-
-#include "devices/IHandle.h"
-#include "devices/IDevice.h"
-#include "ISound.h"
-
-#include <memory>
-#include <vector>
-#include <thread>
-#include <atomic>
-#include <condition_variable>
-#include <mutex>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class allows to play music depending on a current "scene", scene changes are managed by the class.
-* The default scene is silent and has id 0.
-*/
-class AUD_API DynamicMusic
-{
-private:
- /**
- * Matrix of pointers which will store the sounds of the scenes and the transitions between them.
- */
- std::vector<std::vector<std::shared_ptr<ISound>>> m_scenes;
-
- /**
- * Id of the current scene.
- */
- std::atomic_int m_id;
-
- /**
- * Length of the crossfade transition in seconds, used when no custom transition has been set.
- */
- float m_fadeTime;
-
- /**
- * Handle to the playback of the current scene.
- */
- std::shared_ptr<IHandle> m_currentHandle;
-
- /**
- * Handle used during transitions.
- */
- std::shared_ptr<IHandle> m_transitionHandle;
-
- /**
- * Device used for playback.
- */
- std::shared_ptr<IDevice> m_device;
-
- /**
- * Flag that is true when a transition is happening.
- */
- std::atomic_bool m_transitioning;
-
- /**
- * Flag that is true when the music is paused.
- */
- std::atomic_bool m_stopThread;
-
- /**
- * Id of the sound that will play with the next transition.
- */
- std::atomic_int m_soundTarget;
-
- /**
- * Volume of the scenes.
- */
- float m_volume;
-
- /**
- * A thread that manages the crossfade transition.
- */
- std::thread m_fadeThread;
-
- // delete copy constructor and operator=
- DynamicMusic(const DynamicMusic&) = delete;
- DynamicMusic& operator=(const DynamicMusic&) = delete;
-
-public:
- /**
- * Creates a new dynamic music manager with the default silent scene (id: 0).
- * \param device The device that will be used to play sounds.
- */
- DynamicMusic(std::shared_ptr<IDevice> device);
-
- virtual ~DynamicMusic();
-
- /**
- * Adds a new scene to the manager.
- * \param sound The sound that will play when the scene is selected with the changeScene().
- * \return The identifier of the new scene.
- */
- int addScene(std::shared_ptr<ISound> sound);
-
- /**
- * Changes to another scene.
- * \param id The id of the scene which should start playing the changeScene method.
- * \return
- * - true if the change has been scheduled succesfully.
- * - false if there already is a transition in course or the scene selected doesnt exist.
- */
- bool changeScene(int id);
-
- /**
- * Retrieves the scene currently selected.
- * \return The identifier of the current scene.
- */
- int getScene();
-
- /**
- * Adds a new transition between scenes
- * \param init The id of the initial scene that will allow the transition to play.
- * \param end The id if the target scene for the transition.
- * \param sound The sound that will play when the scene changes from init to end.
- * \return false if the init or end scenes don't exist.
- */
- bool addTransition(int init, int end, std::shared_ptr<ISound> sound);
-
- /**
- * Sets the length of the crossfade transition (default 1 second).
- * \param seconds The time in seconds.
- */
- void setFadeTime(float seconds);
-
- /**
- * Gets the length of the crossfade transition (default 1 second).
- * \return The length of the cressfade transition in seconds.
- */
- float getFadeTime();
-
- /**
- * Resumes a paused sound.
- * \return
- * - true if the sound has been resumed.
- * - false if the sound isn't paused or the handle is invalid.
- */
- bool resume();
-
- /**
- * Pauses the current played back sound.
- * \return
- * - true if the sound has been paused.
- * - false if the sound isn't playing back or the handle is invalid.
- */
- bool pause();
-
- /**
- * Seeks in the current played back sound.
- * \param position The new position from where to play back, in seconds.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- * \warning Whether the seek works or not depends on the sound source.
- */
- bool seek(float position);
-
- /**
- * Retrieves the current playback position of a sound.
- * \return The playback position in seconds, or 0.0 if the handle is
- * invalid.
- */
- float getPosition();
-
- /**
- * Retrieves the volume of the scenes.
- * \return The volume.
- */
- float getVolume();
-
- /**
- * Sets the volume for the scenes.
- * \param volume The volume.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- bool setVolume(float volume);
-
- /**
- * Returns the status of the current played back sound.
- * \return
- * - STATUS_INVALID if the sound has stopped or the handle is
- *. invalid
- * - STATUS_PLAYING if the sound is currently played back.
- * - STATUS_PAUSED if the sound is currently paused.
- * - STATUS_STOPPED if the sound finished playing and is still
- * kept in the device.
- * \see Status
- */
- Status getStatus();
-
- /**
- * Stops any played back or paused sound and sets the dynamic music player to default silent state (scene 0)
- * \return
- * - true if the sound has been stopped.
- * - false if the handle is invalid.
- */
- bool stop();
-
- private:
- //Callbacks used to schedule transitions after a sound ends.
- static void transitionCallback(void* player);
- static void sceneCallback(void* player);
- //These functions can fade sounds in and out if used with a thread.
- void crossfadeThread();
- void fadeInThread();
- void fadeOutThread();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Effect.h b/extern/audaspace/include/fx/Effect.h
deleted file mode 100644
index 471e37b5ecf..00000000000
--- a/extern/audaspace/include/fx/Effect.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * 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 Effect.h
- * @ingroup fx
- * The Effect class.
- */
-
-#include "ISound.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound is a base class for all effect factories that take one other
- * sound as input.
- */
-class AUD_API Effect : public ISound
-{
-private:
- // delete copy constructor and operator=
- Effect(const Effect&) = delete;
- Effect& operator=(const Effect&) = delete;
-
-protected:
- /**
- * If there is no reader it is created out of this sound.
- */
- std::shared_ptr<ISound> m_sound;
-
- /**
- * Returns the reader created out of the sound.
- * This method can be used for the createReader function of the implementing
- * classes.
- * \return The reader created out of the sound.
- */
- inline std::shared_ptr<IReader> getReader() const
- {
- return m_sound->createReader();
- }
-
-public:
- /**
- * Creates a new sound.
- * \param sound The input sound.
- */
- Effect(std::shared_ptr<ISound> sound);
-
- /**
- * Destroys the sound.
- */
- virtual ~Effect();
-
- /**
- * Returns the saved sound.
- * \return The sound or nullptr if there has no sound been saved.
- */
- std::shared_ptr<ISound> getSound() const;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/EffectReader.h b/extern/audaspace/include/fx/EffectReader.h
deleted file mode 100644
index 85eff6a8ab9..00000000000
--- a/extern/audaspace/include/fx/EffectReader.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * 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 EffectReader.h
- * @ingroup fx
- * The EffectReader class.
- */
-
-#include "IReader.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This reader is a base class for all effect readers that take one other reader
- * as input.
- */
-class AUD_API EffectReader : public IReader
-{
-private:
- // delete copy constructor and operator=
- EffectReader(const EffectReader&) = delete;
- EffectReader& operator=(const EffectReader&) = delete;
-
-protected:
- /**
- * The reader to read from.
- */
- std::shared_ptr<IReader> m_reader;
-
-public:
- /**
- * Creates a new effect reader.
- * \param reader The reader to read from.
- */
- EffectReader(std::shared_ptr<IReader> reader);
-
- /**
- * Destroys the reader.
- */
- virtual ~EffectReader();
-
- 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/extern/audaspace/include/fx/Envelope.h b/extern/audaspace/include/fx/Envelope.h
deleted file mode 100644
index 3d44e897b3a..00000000000
--- a/extern/audaspace/include/fx/Envelope.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * 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 Envelope.h
- * @ingroup fx
- * The Envelope class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-class CallbackIIRFilterReader;
-struct EnvelopeParameters;
-
-/**
- * This sound creates an envelope follower reader.
- */
-class AUD_API Envelope : public Effect
-{
-private:
- /**
- * The attack value in seconds.
- */
- const float m_attack;
-
- /**
- * The release value in seconds.
- */
- const float m_release;
-
- /**
- * The threshold value.
- */
- const float m_threshold;
-
- /**
- * The attack/release threshold value.
- */
- const float m_arthreshold;
-
- // delete copy constructor and operator=
- Envelope(const Envelope&) = delete;
- Envelope& operator=(const Envelope&) = delete;
-
-public:
- /**
- * Creates a new envelope sound.
- * \param sound The input sound.
- * \param attack The attack value in seconds.
- * \param release The release value in seconds.
- * \param threshold The threshold value.
- * \param arthreshold The attack/release threshold value.
- */
- Envelope(std::shared_ptr<ISound> sound, float attack, float release,
- float threshold, float arthreshold);
-
- virtual std::shared_ptr<IReader> createReader();
-
- /**
- * The envelopeFilter function implements the doFilterIIR callback
- * for the callback IIR filter.
- * @param reader The CallbackIIRFilterReader that executes the callback.
- * @param param The envelope parameters.
- * @return The filtered sample.
- */
- static sample_t AUD_LOCAL envelopeFilter(CallbackIIRFilterReader* reader, EnvelopeParameters* param);
-
- /**
- * The endEnvelopeFilter function implements the endFilterIIR callback
- * for the callback IIR filter.
- * @param param The envelope parameters.
- */
- static void AUD_LOCAL endEnvelopeFilter(EnvelopeParameters* param);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/FFTConvolver.h b/extern/audaspace/include/fx/FFTConvolver.h
deleted file mode 100644
index 62ce1cbf5ad..00000000000
--- a/extern/audaspace/include/fx/FFTConvolver.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 FFTConvolver.h
-* @ingroup fx
-* The FFTConvolver class.
-*/
-
-#include "IReader.h"
-#include "ISound.h"
-#include "util/FFTPlan.h"
-
-#include <memory>
-#include <vector>
-
-AUD_NAMESPACE_BEGIN
-/**
-* This class allows to easily convolve a sound using the Fourier transform.
-*/
-class AUD_API FFTConvolver
-{
-private:
- /**
- * A shared pointer to an FFT plan.
- */
- std::shared_ptr<FFTPlan> m_plan;
-
- /**
- * The FFT size, must be at least M+L-1.
- */
- int m_N;
-
- /**
- * The length of the impulse response.
- */
- int m_M;
-
- /**
- * The max length of the input slices.
- */
- int m_L;
-
- /**
- * The real length of the internal buffer in fftwf_complex elements.
- */
- int m_realBufLen;
-
- /**
- * The internal buffer for the FFTS.
- */
- std::complex<sample_t>* m_inBuffer;
-
- /**
- * A shift buffer for the FDL method
- */
- sample_t* m_shiftBuffer;
-
- /**
- * A buffer to store the extra data obtained after each partial convolution.
- */
- float* m_tail;
-
- /**
- * The provided impulse response.
- */
- std::shared_ptr<std::vector<std::complex<sample_t>>> m_irBuffer;
-
- /**
- * If the tail is being read, this marks the current position.
- */
- int m_tailPos;
-
- // delete copy constructor and operator=
- FFTConvolver(const FFTConvolver&) = delete;
- FFTConvolver& operator=(const FFTConvolver&) = delete;
-
-public:
- /**
- * Creates a new FFTConvolver.
- * \param ir A shared pointer to a vector with the impulse response data in the frequency domain (see ImpulseResponse class for an easy way to obtain it).
- * \param plan A shared pointer to and FFT plan.
- */
- FFTConvolver(std::shared_ptr<std::vector<std::complex<sample_t>>> ir, std::shared_ptr<FFTPlan> plan);
- virtual ~FFTConvolver();
-
- /**
- * Convolves the data that is provided with the inpulse response.
- * \param[in] inBuffer A buffer with the input data to be convolved.
- * \param[in] outBuffer A pointer to the buffer in which the convolution result will be written.
- * \param[in,out] length The number of samples to be convolved (the length of both the inBuffer and the outBuffer).
- * The convolution output should be larger than the input, but since this class uses the overlap
- * add method, the extra length will be saved internally.
- * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail, setting this variable to 0 since no data would be
- * written in the outBuffer.
- */
- void getNext(const sample_t* inBuffer, sample_t* outBuffer, int& length);
-
- /**
- * Convolves the data that is provided with the inpulse response.
- * \param[in] inBuffer A buffer with the input data to be convolved.
- * \param[in] outBuffer A pointer to the buffer in which the convolution result will be written.
- * \param[in,out] length The number of samples to be convolved (the length of both the inBuffer and the outBuffer).
- * The convolution output should be larger than the input, but since this class uses the overlap
- * add method, the extra length will be saved internally.
- * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail, setting this variable to 0 since no data would be
- * written in the outBuffer.
- * \param[in] transformedData A pointer to a buffer in which the Fourier transform of the input will be written.
- */
- void getNext(const sample_t* inBuffer, sample_t* outBuffer, int& length, fftwf_complex* transformedData);
-
- /**
- * Convolves the data that is provided with the inpulse response.
- * \param[in] inBuffer A buffer with the input data to be convolved. Its length must be N/2 + 1
- * \param[in] outBuffer A pointer to the buffer in which the convolution result will be written.
- * \param[in,out] length The number of samples to be convolved and the length of the outBuffer.
- * The convolution output should be larger than the input, but since this class uses the overlap
- * add method, the extra length will be saved internally.
- * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail and set the value of length to 0 since no data would be
- * written in the outBuffer.
- */
- void getNext(const fftwf_complex* inBuffer, sample_t* outBuffer, int& length);
-
- /**
- * Gets the internally stored extra data which is result of the convolution.
- * \param[in,out] length The count of samples that should be read. Shall
- * contain the real count of samples after reading, in case
- * there were only fewer samples available.
- * A smaller value also indicates the end of the data.
- * \param[out] eos End of stream, whether the end is reached or not.
- * \param[in] buffer The pointer to the buffer to read into.
- */
- void getTail(int& length, bool& eos, sample_t* buffer);
-
- /**
- * Resets the internally stored data so a new convolution can be started.
- */
- void clear();
-
- /**
- * Calculates the Inverse Fast Fourier Transform of the input array.
- * \param[in] inBuffer A buffer with the input data to be transformed. Its length must be N/2 + 1
- * \param[in] outBuffer A pointer to the buffer in which the transform result will be written.
- * \param[in,out] length The number of samples to be transformed and the length of the outBuffer.
- * It must be equal or lower than N, but tipically N/2 should be used (N=size of the FFTPlan) or the call will fail and the value
- * of length will be setted to 0, since no data would be written in the outBuffer.
- */
- void IFFT_FDL(const fftwf_complex* inBuffer, sample_t* outBuffer, int& length);
-
- /**
- * Multiplicates a frequency domain input by the impulse response and accumulates the result to a buffer.
- * \param[in] inBuffer A buffer of complex numbers, samples in the frequency domain, that will be multiplied by the impulse response. Its length must be N/2 + 1
- * \param[in] accBuffer A pointer to the buffer into which the result of the multiplication will be summed. Its length must be N/2 + 1
- */
- void getNextFDL(const std::complex<sample_t>* inBuffer, std::complex<sample_t>* accBuffer);
-
- /**
- * Transforms an input array of real data to the frequency domain and multiplies it by the impulse response. The result is accumulated to a buffer.
- * \param[in] inBuffer A buffer of real numbers, samples in the time domain, that will be multiplied by the impulse response.
- * \param[in] accBuffer A pointer to the buffer into which the result of the multiplication will be summed. Its length must be N/2 + 1.
- * \param[in,out] length The number of samples to be transformed and the length of the inBuffer.
- * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail and the value
- * of length will be setted to 0, since no data would be written in the outBuffer.
- * \param[in] transformedData A pointer to a buffer in which the Fourier transform of the input will be written.
- */
- void getNextFDL(const sample_t* inBuffer, std::complex<sample_t>* accBuffer, int& length, fftwf_complex* transformedData);
-
- /**
- * Changes the impulse response and resets the FFTConvolver.
- * \param ir A shared pointer to a vector with the data of the impulse response in the frequency domain.
- */
- void setImpulseResponse(std::shared_ptr<std::vector<std::complex<sample_t>>> ir);
-
- /**
- * Retrieves the current impulse response being used.
- * \return The current impulse response.
- */
- std::shared_ptr<std::vector<std::complex<sample_t>>> getImpulseResponse();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Fader.h b/extern/audaspace/include/fx/Fader.h
deleted file mode 100644
index 63280aec292..00000000000
--- a/extern/audaspace/include/fx/Fader.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * 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 Fader.h
- * @ingroup fx
- * The Fader class.
- */
-
-#include "fx/Effect.h"
-#include "fx/FaderReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound fades another sound.
- * If the fading type is FADE_IN, everything before the fading start will be
- * silenced, for FADE_OUT that's true for everything after fading ends.
- */
-class AUD_API Fader : public Effect
-{
-private:
- /**
- * The fading type.
- */
- const FadeType m_type;
-
- /**
- * The fading start.
- */
- const float m_start;
-
- /**
- * The fading length.
- */
- const float m_length;
-
- // delete copy constructor and operator=
- Fader(const Fader&) = delete;
- Fader& operator=(const Fader&) = delete;
-
-public:
- /**
- * Creates a new fader sound.
- * \param sound The input sound.
- * \param type The fading type.
- * \param start The time where fading should start in seconds.
- * \param length How long fading should last in seconds.
- */
- Fader(std::shared_ptr<ISound> sound,
- FadeType type = FADE_IN,
- float start = 0.0f, float length = 1.0f);
-
- /**
- * Returns the fading type.
- */
- FadeType getType() const;
-
- /**
- * Returns the fading start.
- */
- float getStart() const;
-
- /**
- * Returns the fading length.
- */
- float getLength() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/FaderReader.h b/extern/audaspace/include/fx/FaderReader.h
deleted file mode 100644
index 99ea3d28938..00000000000
--- a/extern/audaspace/include/fx/FaderReader.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * 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 FaderReader.h
- * @ingroup fx
- * Defines the FaderReader class as well as the two fading types.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/// Fading types.
-enum FadeType
-{
- FADE_IN,
- FADE_OUT
-};
-
-/**
- * This class fades another reader.
- * If the fading type is FADE_IN, everything before the fading start will be
- * silenced, for FADE_OUT that's true for everything after fading ends.
- */
-class AUD_API FaderReader : public EffectReader
-{
-private:
- /**
- * The fading type.
- */
- const FadeType m_type;
-
- /**
- * The fading start.
- */
- const float m_start;
-
- /**
- * The fading length.
- */
- const float m_length;
-
- // delete copy constructor and operator=
- FaderReader(const FaderReader&) = delete;
- FaderReader& operator=(const FaderReader&) = delete;
-
-public:
- /**
- * Creates a new fader reader.
- * \param reader The reader that this effect is applied on.
- * \param type The fading type.
- * \param start The time where fading should start in seconds.
- * \param length How long fading should last in seconds.
- */
- FaderReader(std::shared_ptr<IReader> reader, FadeType type,
- float start,float length);
-
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/HRTF.h b/extern/audaspace/include/fx/HRTF.h
deleted file mode 100644
index 750d5f18991..00000000000
--- a/extern/audaspace/include/fx/HRTF.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 HRTF.h
-* @ingroup fx
-* The HRTF class.
-*/
-
-#include "util/StreamBuffer.h"
-#include "util/FFTPlan.h"
-#include "ImpulseResponse.h"
-
-#include <memory>
-#include <vector>
-#include <unordered_map>
-#include <utility>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a complete set of HRTFs.
-*/
-class AUD_API HRTF
-{
-private:
- /**
- * An unordered map of unordered maps containing the ImpulseResponse objects of the HRTFs.
- */
- std::unordered_map<float, std::unordered_map<float, std::shared_ptr<ImpulseResponse>>> m_hrtfs;
-
- /**
- * The FFTPlan used to create the ImpulseResponses.
- */
- std::shared_ptr<FFTPlan> m_plan;
-
- /**
- * The specifications of the HRTFs.
- */
- Specs m_specs;
-
- /**
- * True if the HRTF object is empty.
- */
- bool m_empty;
-
- // delete copy constructor and operator=
- HRTF(const HRTF&) = delete;
- HRTF& operator=(const HRTF&) = delete;
-
-public:
- /**
- * Creates a new empty HRTF object that will instance it own FFTPlan with default size.
- */
- HRTF();
-
- /**
- * Creates a new empty HRTF object.
- * \param plan A shared pointer to a FFT plan used to transform the impulse responses added.
- */
- HRTF(std::shared_ptr<FFTPlan> plan);
-
- /**
- * Adds a new HRTF to the class.
- * \param impulseResponse A shared pointer to an StreamBuffer with the HRTF.
- * \param azimuth The azimuth angle of the HRTF. Interval [0,360).
- * \param elevation The elevation angle of the HRTF.
- * \return True if the impulse response was added successfully, false otherwise (the specs weren't correct).
- */
- bool addImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse, float azimuth, float elevation);
-
- /**
- * Retrieves a pair of HRTFs for a certain azimuth and elevation. If no exact match is found, the closest ones will be chosen (the elevation has priority over the azimuth).
- * \param[in,out] azimuth The desired azimuth angle. If no exact match is found, the value of azimuth will represent the actual azimuth elevation of the chosen HRTF. Interval [0,360)
- * \param[in,out] elevation The desired elevation angle. If no exact match is found, the value of elevation will represent the actual elevation angle of the chosen HRTF.
- * \return A pair of shared pointers to ImpulseResponse objects containing the HRTFs for the left (first element) and right (second element) ears.
- */
- std::pair<std::shared_ptr<ImpulseResponse>, std::shared_ptr<ImpulseResponse>> getImpulseResponse(float &azimuth, float &elevation);
-
- /**
- * Retrieves the specs shared by all the HRTFs.
- * \return The shared specs of all the HRTFs.
- */
- Specs getSpecs();
-
- /**
- * Retrieves the state of the HRTF object.
- * \return True if it is empty, false otherwise.
- */
- bool isEmpty();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/HRTFLoader.h b/extern/audaspace/include/fx/HRTFLoader.h
deleted file mode 100644
index 893184ae909..00000000000
--- a/extern/audaspace/include/fx/HRTFLoader.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 HRTFLoader.h
-* @ingroup fx
-* The HRTFLoader class.
-*/
-
-#include "Audaspace.h"
-#include "fx/HRTF.h"
-#include "util/FFTPlan.h"
-
-#include <string>
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This loader provides a method to load all the HRTFs in one directory, provided they follow the following naming scheme:
-* Example: L-10e210a.wav
-* The first character refers to the ear from which the HRTF was recorded: 'L' for a left ear and 'R' for a right ear.
-* Next is the elevation angle followed by the 'e' character. [-90, 90]
-* Then is the azimuth angle followed by the 'a' character. [0, 360)
-* For a sound source situated at the left of the listener the azimuth angle regarding the left ear is 90 while the angle regarding the right ear is 270.
-* KEMAR HRTFs use this naming scheme.
-*/
-class AUD_API HRTFLoader
-{
-private:
- // delete normal constructor, copy constructor and operator=
- HRTFLoader(const HRTFLoader&) = delete;
- HRTFLoader& operator=(const HRTFLoader&) = delete;
- HRTFLoader() = delete;
-
-public:
- /**
- * Loads all the left ear HRTFs in the directory.Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
- * \param plan The plan that will be used to create the HRTF object.
- * \param fileExtension The extension of the HRTF files.
- * \param path The path to the folder containing the HRTFs.
- * \return A shared pointer to a loaded HRTF object.
- */
- static std::shared_ptr<HRTF> loadLeftHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path = "");
-
- /**
- * Loads all the right ear HRTFs in the directory. Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
- * \param plan The plan that will be used to create the HRTF object.
- * \param fileExtension The extension of the HRTF files.
- * \param path The path to the folder containing the HRTFs.
- * \return A shared pointer to a loaded HRTF object.
- */
- static std::shared_ptr<HRTF> loadRightHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path = "");
-
- /**
- * Loads all the left ear HRTFs in the directory.Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
- * \param fileExtension The extension of the HRTF files.
- * \param path The path to the folder containing the HRTFs.
- * \return A shared pointer to a loaded HRTF object.
- */
- static std::shared_ptr<HRTF> loadLeftHRTFs(const std::string& fileExtension, const std::string& path = "");
-
- /**
- * Loads all the right ear HRTFs in the directory. Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
- * \param fileExtension The extension of the HRTF files.
- * \param path The path to the folder containing the HRTFs.
- * \return A shared pointer to a loaded HRTF object.
- */
- static std::shared_ptr<HRTF> loadRightHRTFs(const std::string& fileExtension, const std::string& path = "");
-
-
-private:
-
- /**
- * Loads all the HRTFs in the directory and subdirectories.
- * \param hrtfs An HRTF object in which to load the HRTFs.
- * \param ear 'L' to load left ear HRTFs, 'R' to load right ear HRTFs.
- * \param fileExtension The extension of the HRTF files.
- * \param path The path to the folder containing the HRTFs.
- */
- static void loadHRTFs(std::shared_ptr<HRTF>hrtfs, char ear, const std::string& fileExtension, const std::string& path = "");
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Highpass.h b/extern/audaspace/include/fx/Highpass.h
deleted file mode 100644
index 6bfb6d7885d..00000000000
--- a/extern/audaspace/include/fx/Highpass.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * 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 Highpass.h
- * @ingroup fx
- * The Highpass class.
- */
-
-#include "fx/DynamicIIRFilter.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a highpass filter reader.
- */
-class AUD_API Highpass : public DynamicIIRFilter
-{
-private:
- // delete copy constructor and operator=
- Highpass(const Highpass&) = delete;
- Highpass& operator=(const Highpass&) = delete;
-
-public:
- /**
- * Creates a new highpass sound.
- * \param sound The input sound.
- * \param frequency The cutoff frequency.
- * \param Q The Q factor.
- */
- Highpass(std::shared_ptr<ISound> sound, float frequency, float Q = 1.0f);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/HighpassCalculator.h b/extern/audaspace/include/fx/HighpassCalculator.h
deleted file mode 100644
index 9306a3d20e5..00000000000
--- a/extern/audaspace/include/fx/HighpassCalculator.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * 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 HighpassCalculator.h
- * @ingroup fx
- * The HighpassCalculator class.
- */
-
-#include "fx/IDynamicIIRFilterCalculator.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * The HighpassCalculator class calculates high pass filter coefficients for a
- * dynamic DynamicIIRFilter.
- */
-class AUD_LOCAL HighpassCalculator : public IDynamicIIRFilterCalculator
-{
-private:
- /**
- * The cutoff frequency.
- */
- const float m_frequency;
-
- /**
- * The Q factor.
- */
- const float m_Q;
-
- // delete copy constructor and operator=
- HighpassCalculator(const HighpassCalculator&) = delete;
- HighpassCalculator& operator=(const HighpassCalculator&) = delete;
-
-public:
- /**
- * Creates a HighpassCalculator object.
- * @param frequency The cutoff frequency.
- * @param Q The Q factor of the filter. If unsure, use 1.0 as default.
- */
- HighpassCalculator(float frequency, float Q);
-
- virtual void recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h b/extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h
deleted file mode 100644
index 6c890b313b4..00000000000
--- a/extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * 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 IDynamicIIRFilterCalculator.h
- * @ingroup fx
- * The IDynamicIIRFilterCalculator interface.
- */
-
-#include "respec/Specification.h"
-
-#include <vector>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * @interface IDynamicIIRFilterCalculator
- * This interface calculates dynamic filter coefficients which depend on the
- * sampling rate for DynamicIIRFilterReaders.
- */
-class AUD_API IDynamicIIRFilterCalculator
-{
-public:
- virtual ~IDynamicIIRFilterCalculator() {}
-
- /**
- * Recalculates the filter coefficients.
- * \param rate The sample rate of the audio data.
- * \param[out] b The input filter coefficients.
- * \param[out] a The output filter coefficients.
- */
- virtual void recalculateCoefficients(SampleRate rate, std::vector<float>& b, std::vector<float>& a)=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/IIRFilter.h b/extern/audaspace/include/fx/IIRFilter.h
deleted file mode 100644
index 74099a30dc5..00000000000
--- a/extern/audaspace/include/fx/IIRFilter.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * 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 IIRFilter.h
- * @ingroup fx
- * The IIRFilter class.
- */
-
-#include "fx/Effect.h"
-
-#include <vector>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a IIR filter reader.
- */
-class AUD_API IIRFilter : public Effect
-{
-private:
- /**
- * Output filter coefficients.
- */
- std::vector<float> m_a;
-
- /**
- * Input filter coefficients.
- */
- std::vector<float> m_b;
-
- // delete copy constructor and operator=
- IIRFilter(const IIRFilter&) = delete;
- IIRFilter& operator=(const IIRFilter&) = delete;
-
-public:
- /**
- * Creates a new IIR filter sound.
- * \param sound The input sound.
- * \param b The input filter coefficients.
- * \param a The output filter coefficients.
- */
- IIRFilter(std::shared_ptr<ISound> sound, const std::vector<float>& b, const std::vector<float>& a);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/IIRFilterReader.h b/extern/audaspace/include/fx/IIRFilterReader.h
deleted file mode 100644
index 34518ce69c6..00000000000
--- a/extern/audaspace/include/fx/IIRFilterReader.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * 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 IIRFilterReader.h
- * @ingroup fx
- * The IIRFilterReader class.
- */
-
-#include "fx/BaseIIRFilterReader.h"
-
-#include <vector>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is for infinite impulse response filters with simple coefficients.
- */
-class AUD_API IIRFilterReader : public BaseIIRFilterReader
-{
-private:
- /**
- * Output filter coefficients.
- */
- std::vector<float> m_a;
-
- /**
- * Input filter coefficients.
- */
- std::vector<float> m_b;
-
- // delete copy constructor and operator=
- IIRFilterReader(const IIRFilterReader&) = delete;
- IIRFilterReader& operator=(const IIRFilterReader&) = delete;
-
-public:
- /**
- * Creates a new IIR filter reader.
- * \param reader The reader to read from.
- * \param b The input filter coefficients.
- * \param a The output filter coefficients.
- */
- IIRFilterReader(std::shared_ptr<IReader> reader, const std::vector<float>& b, const std::vector<float>& a);
-
- virtual sample_t filter();
-
- /**
- * Sets new filter coefficients.
- * @param b The input filter coefficients.
- * @param a The output filter coefficients.
- */
- void setCoefficients(const std::vector<float>& b, const std::vector<float>& a);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ImpulseResponse.h b/extern/audaspace/include/fx/ImpulseResponse.h
deleted file mode 100644
index 3cdb807ff99..00000000000
--- a/extern/audaspace/include/fx/ImpulseResponse.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 ImpulseResponse.h
-* @ingroup fx
-* The ImpulseResponse class.
-*/
-
-#include "util/StreamBuffer.h"
-#include "util/FFTPlan.h"
-#include "IReader.h"
-
-#include <memory>
-#include <vector>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents an impulse response that can be used in convolution.
-* When this class is instanced, the impulse response is divided in channels and those channels are divided in parts of N/2 samples (N being the size of the FFT plan used).
-* The main objetive of this class is to allow the reutilization of an impulse response in various sounds without having to process it more than one time.
-* \warning The size of the FFTPlan used to process the impulse response must be the same as the one used in the convolver classes.
-*/
-class AUD_API ImpulseResponse
-{
-private:
- /**
- * A tri-dimensional array (channels, parts, values) The impulse response is divided in channels and those channels are divided
- * in parts of N/2 samples. Those parts are transformed to the frequency domain transform which generates uni-dimensional
- * arrays of fftwtf_complex data (complex numbers).
- */
- std::vector<std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>>> m_processedIR;
-
- /**
- * The specification of the samples.
- */
- Specs m_specs;
-
- /**
- * The length of the impulse response.
- */
- int m_length;
-
- // delete copy constructor and operator=
- ImpulseResponse(const ImpulseResponse&) = delete;
- ImpulseResponse& operator=(const ImpulseResponse&) = delete;
-
-public:
- /**
- * Creates a new ImpulseResponse object.
- * The impulse response will be split and transformed to the frequency domain.
- * \param impulseResponse The impulse response sound.
- * \param plan A shared pointer to a FFT plan used to transform the impulse response.
- */
- ImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse, std::shared_ptr<FFTPlan> plan);
-
- /**
- * Creates a new ImpulseResponse object. This overload instances its own FFTPlan with default size.
- * The impulse response will be split and transformed to the frequency domain.
- * \param impulseResponse The impulse response sound.
- */
- ImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse);
-
- /**
- * Returns the specification of the impulse response.
- * \return The specification of the impulse response.
- */
- Specs getSpecs();
-
- /**
- * Retrieves the length of the impulse response.
- * \return The length of the impulse response.
- */
- int getLength();
-
- /**
- * Retrieves one channel of the impulse response.
- * \param n The desired channel number (from 0 to channels-1).
- * \return The desired channel of the impulse response.
- */
- std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> getChannel(int n);
-
-private:
- /**
- * Processes the impulse response sound for its use in the convovler classes.
- * \param A shared pointer to a reader of the desired sound.
- * \param plan A shared pointer to a FFT plan used to transform the impulse response.
- */
- void processImpulseResponse(std::shared_ptr<IReader> reader, std::shared_ptr<FFTPlan> plan);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Limiter.h b/extern/audaspace/include/fx/Limiter.h
deleted file mode 100644
index 0b5451b4eed..00000000000
--- a/extern/audaspace/include/fx/Limiter.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * 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 Limiter.h
- * @ingroup fx
- * The Limiter class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound limits another sound in start and end time.
- */
-class AUD_API Limiter : public Effect
-{
-private:
- /**
- * The start time.
- */
- const float m_start;
-
- /**
- * The end time.
- */
- const float m_end;
-
- // delete copy constructor and operator=
- Limiter(const Limiter&) = delete;
- Limiter& operator=(const Limiter&) = delete;
-
-public:
- /**
- * Creates a new limiter sound.
- * \param sound The input sound.
- * \param start The desired start time.
- * \param end The desired end time, a negative value signals that it should
- * play to the end.
- */
- Limiter(std::shared_ptr<ISound> sound,
- float start = 0, float end = -1);
-
- /**
- * Returns the start time.
- */
- float getStart() const;
-
- /**
- * Returns the end time.
- */
- float getEnd() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/LimiterReader.h b/extern/audaspace/include/fx/LimiterReader.h
deleted file mode 100644
index 49a07b5c29e..00000000000
--- a/extern/audaspace/include/fx/LimiterReader.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * 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 LimiterReader.h
- * @ingroup fx
- * The LimiterReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This reader limits another reader in start and end times.
- */
-class AUD_API LimiterReader : public EffectReader
-{
-private:
- /**
- * The start sample: inclusive.
- */
- const float m_start;
-
- /**
- * The end sample: exlusive.
- */
- const float m_end;
-
- // delete copy constructor and operator=
- LimiterReader(const LimiterReader&) = delete;
- LimiterReader& operator=(const LimiterReader&) = delete;
-
-public:
- /**
- * Creates a new limiter reader.
- * \param reader The reader to read from.
- * \param start The desired start time (inclusive).
- * \param end The desired end time (sample exklusive), a negative value
- * signals that it should play to the end.
- */
- LimiterReader(std::shared_ptr<IReader> reader, float start = 0, float end = -1);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Loop.h b/extern/audaspace/include/fx/Loop.h
deleted file mode 100644
index c8ba7609f23..00000000000
--- a/extern/audaspace/include/fx/Loop.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * 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 Loop.h
- * @ingroup fx
- * The Loop class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound loops another sound.
- * \note The reader has to be seekable.
- */
-class AUD_API Loop : public Effect
-{
-private:
- /**
- * The loop count.
- */
- const int m_loop;
-
- // delete copy constructor and operator=
- Loop(const Loop&) = delete;
- Loop& operator=(const Loop&) = delete;
-
-public:
- /**
- * Creates a new loop sound.
- * \param sound The input sound.
- * \param loop The desired loop count, negative values result in endless
- * looping.
- */
- Loop(std::shared_ptr<ISound> sound, int loop = -1);
-
- /**
- * Returns the loop count.
- */
- int getLoop() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/LoopReader.h b/extern/audaspace/include/fx/LoopReader.h
deleted file mode 100644
index 72bb92c8b8f..00000000000
--- a/extern/audaspace/include/fx/LoopReader.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * 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 LoopReader.h
- * @ingroup fx
- * The LoopReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class reads another reader and loops it.
- * \note The other reader must be seekable.
- */
-class AUD_API LoopReader : public EffectReader
-{
-private:
- /**
- * The loop count.
- */
- const int m_count;
-
- /**
- * The left loop count.
- */
- int m_left;
-
- // delete copy constructor and operator=
- LoopReader(const LoopReader&) = delete;
- LoopReader& operator=(const LoopReader&) = delete;
-
-public:
- /**
- * Creates a new loop reader.
- * \param reader The reader to read from.
- * \param loop The desired loop count, negative values result in endless
- * looping.
- */
- LoopReader(std::shared_ptr<IReader> reader, int loop);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Lowpass.h b/extern/audaspace/include/fx/Lowpass.h
deleted file mode 100644
index c14e5e8e0e2..00000000000
--- a/extern/audaspace/include/fx/Lowpass.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * 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 Lowpass.h
- * @ingroup fx
- * The Lowpass class.
- */
-
-#include "fx/DynamicIIRFilter.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a lowpass filter reader.
- */
-class AUD_API Lowpass : public DynamicIIRFilter
-{
-private:
- // delete copy constructor and operator=
- Lowpass(const Lowpass&) = delete;
- Lowpass& operator=(const Lowpass&) = delete;
-
-public:
- /**
- * Creates a new lowpass sound.
- * \param sound The input sound.
- * \param frequency The cutoff frequency.
- * \param Q The Q factor.
- */
- Lowpass(std::shared_ptr<ISound> sound, float frequency, float Q = 1.0f);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/LowpassCalculator.h b/extern/audaspace/include/fx/LowpassCalculator.h
deleted file mode 100644
index 477adfb5b5b..00000000000
--- a/extern/audaspace/include/fx/LowpassCalculator.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * 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 LowpassCalculator.h
- * @ingroup fx
- * The LowpassCalculator class.
- */
-
-#include "fx/IDynamicIIRFilterCalculator.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * The LowpassCalculator class calculates low pass filter coefficients for a
- * dynamic DynamicIIRFilter.
- */
-class AUD_LOCAL LowpassCalculator : public IDynamicIIRFilterCalculator
-{
-private:
- /**
- * The cutoff frequency.
- */
- const float m_frequency;
-
- /**
- * The Q factor.
- */
- const float m_Q;
-
- // delete copy constructor and operator=
- LowpassCalculator(const LowpassCalculator&) = delete;
- LowpassCalculator& operator=(const LowpassCalculator&) = delete;
-
-public:
- /**
- * Creates a LowpassCalculator object.
- * @param frequency The cutoff frequency.
- * @param Q The Q factor of the filter. If unsure, use 1.0 as default.
- */
- LowpassCalculator(float frequency, float Q);
-
- virtual void recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/MutableReader.h b/extern/audaspace/include/fx/MutableReader.h
deleted file mode 100644
index 217dd2aa5d4..00000000000
--- a/extern/audaspace/include/fx/MutableReader.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 MutableReader.h
-* @ingroup fx
-* The MutableReader class.
-*/
-
-#include "IReader.h"
-#include "ISound.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a reader for a sound that can change with each playback. The change will occur when trying to seek backwards
-* If the sound doesn't support that, it will be restarted.
-* \warning Notice that if a SoundList object is assigned to several MutableReaders, sequential playback won't work correctly.
-* To prevent this the SoundList must be copied.
-*/
-class AUD_API MutableReader : public IReader
-{
-private:
- /**
- * The current reader.
- */
- std::shared_ptr<IReader> m_reader;
-
- /**
- * A sound from which to get the reader.
- */
- std::shared_ptr<ISound> m_sound;
-
-
- // delete copy constructor and operator=
- MutableReader(const MutableReader&) = delete;
- MutableReader& operator=(const MutableReader&) = delete;
-
-public:
- /**
- * Creates a new mutable reader.
- * \param sound A of sound you want to assign to this reader.
- */
- MutableReader(std::shared_ptr<ISound> sound);
-
- 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/extern/audaspace/include/fx/MutableSound.h b/extern/audaspace/include/fx/MutableSound.h
deleted file mode 100644
index 9b5aa95cf18..00000000000
--- a/extern/audaspace/include/fx/MutableSound.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 MutableSound.h
-* @ingroup fx
-* The MutableSound class.
-*/
-
-#include "ISound.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* Ths class allows to create MutableReaders for any sound.
-*/
-class AUD_API MutableSound : public ISound
-{
-private:
- /**
- * A pointer to a sound.
- */
- std::shared_ptr<ISound> m_sound;
-
- // delete copy constructor and operator=
- MutableSound(const MutableSound&) = delete;
- MutableSound& operator=(const MutableSound&) = delete;
-
-public:
- /**
- * Creates a new MutableSound.
- * \param sound The sound in which the MutabeReaders created with the createReader() method will be based.
- * If shared pointer to a SoundList object is used in several mutable sounds the sequential
- * playback will not work properly. A copy of the SoundList object must be made in this case.
- */
- MutableSound(std::shared_ptr<ISound> sound);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Pitch.h b/extern/audaspace/include/fx/Pitch.h
deleted file mode 100644
index 570366be549..00000000000
--- a/extern/audaspace/include/fx/Pitch.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * 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 Pitch.h
- * @ingroup fx
- * The Pitch class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound changes the pitch of another sound.
- */
-class AUD_API Pitch : public Effect
-{
-private:
- /**
- * The pitch.
- */
- const float m_pitch;
-
- // delete copy constructor and operator=
- Pitch(const Pitch&) = delete;
- Pitch& operator=(const Pitch&) = delete;
-
-public:
- /**
- * Creates a new pitch sound.
- * \param sound The input sound.
- * \param pitch The desired pitch.
- */
- Pitch(std::shared_ptr<ISound> sound, float pitch);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/PitchReader.h b/extern/audaspace/include/fx/PitchReader.h
deleted file mode 100644
index c82f71b61bf..00000000000
--- a/extern/audaspace/include/fx/PitchReader.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * 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 PitchReader.h
- * @ingroup fx
- * The PitchReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class reads another reader and changes it's pitch.
- */
-class AUD_API PitchReader : public EffectReader
-{
-private:
- /**
- * The pitch level.
- */
- float m_pitch;
-
- // delete copy constructor and operator=
- PitchReader(const PitchReader&) = delete;
- PitchReader& operator=(const PitchReader&) = delete;
-
-public:
- /**
- * Creates a new pitch reader.
- * \param reader The reader to read from.
- * \param pitch The pitch value.
- */
- PitchReader(std::shared_ptr<IReader> reader, float pitch);
-
- virtual Specs getSpecs() const;
-
- /**
- * Retrieves the pitch.
- * \return The current pitch value.
- */
- float getPitch() const;
-
- /**
- * Sets the pitch.
- * \param pitch The new pitch value.
- */
- void setPitch(float pitch);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/PlaybackCategory.h b/extern/audaspace/include/fx/PlaybackCategory.h
deleted file mode 100644
index 7721623359f..00000000000
--- a/extern/audaspace/include/fx/PlaybackCategory.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 PlaybackCategory.h
-* @ingroup fx
-* The PlaybackCategory class.
-*/
-
-#include "devices/IHandle.h"
-#include "devices/IDevice.h"
-#include "VolumeStorage.h"
-
-#include <unordered_map>
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a category of related sounds which are currently playing and allows to control them easily.
-*/
-class AUD_API PlaybackCategory
-{
-private:
- /**
- * Next handle ID to be assigned.
- */
- unsigned int m_currentID;
-
- /**
- * Vector of handles that belong to the category.
- */
- std::unordered_map<unsigned int, std::shared_ptr<IHandle>> m_handles;
-
- /**
- * Device that will play the sounds.
- */
- std::shared_ptr<IDevice> m_device;
-
- /**
- * Status of the category.
- */
- Status m_status;
-
- /**
- * Volume of all the sounds of the category.
- */
- std::shared_ptr<VolumeStorage> m_volumeStorage;
-
- // delete copy constructor and operator=
- PlaybackCategory(const PlaybackCategory&) = delete;
- PlaybackCategory& operator=(const PlaybackCategory&) = delete;
-
-public:
- /**
- * Creates a new PlaybackCategory.
- * \param device A shared pointer to the device which will be used for playback.
- */
- PlaybackCategory(std::shared_ptr<IDevice> device);
- ~PlaybackCategory();
-
- /**
- * Plays a new sound in the category.
- * \param sound The sound to be played.
- * \return A handle for the playback. If the playback failed, nullptr will be returned.
- */
- std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound);
-
- /**
- * Resumes all the paused sounds of the category.
- */
- void resume();
-
- /**
- * Pauses all current played back sounds of the category.
- */
- void pause();
-
- /**
- * Retrieves the volume of the category.
- * \return The volume.
- */
- float getVolume();
-
- /**
- * Sets the volume for the category.
- * \param volume The volume.
- */
- void setVolume(float volume);
-
- /**
- * Stops all the playing back or paused sounds.
- */
- void stop();
-
- /**
- * Retrieves the shared volume of the category.
- * \return A shared pointer to the VolumeStorage object that represents the shared volume of the category.
- */
- std::shared_ptr<VolumeStorage> getSharedVolume();
-
- /**
- * Cleans the category erasing all the invalid handles.
- * Only needed if individual sounds are stopped with their handles.
- */
- void cleanHandles();
-
-private:
- static void cleanHandleCallback(void* data);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/PlaybackManager.h b/extern/audaspace/include/fx/PlaybackManager.h
deleted file mode 100644
index f660568b8db..00000000000
--- a/extern/audaspace/include/fx/PlaybackManager.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 PlaybackManager.h
-* @ingroup fx
-* The PlaybackManager class.
-*/
-
-#include "PlaybackCategory.h"
-#include "devices/IDevice.h"
-#include "ISound.h"
-
-#include <unordered_map>
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class allows to control groups of playing sounds easily.
-* The sounds are part of categories.
-*/
-class AUD_API PlaybackManager
-{
-private:
- /**
- * Unordered map of categories, each category has different name.
- */
- std::unordered_map<unsigned int, std::shared_ptr<PlaybackCategory>> m_categories;
-
- /**
- * Device used for playback.
- */
- std::shared_ptr<IDevice> m_device;
-
- /**
- * The current key used for new categories.
- */
- unsigned int m_currentKey;
-
- // delete copy constructor and operator=
- PlaybackManager(const PlaybackManager&) = delete;
- PlaybackManager& operator=(const PlaybackManager&) = delete;
-
-public:
- /**
- * Creates a new PlaybackManager.
- * \param device A shared pointer to the device which will be used for playback.
- */
- PlaybackManager(std::shared_ptr<IDevice> device);
-
- /**
- * Adds an existent category to the manager and returns a key to access it.
- * \param category The category to be added.
- * \return The category key.
- */
- unsigned int addCategory(std::shared_ptr<PlaybackCategory> category);
-
- /**
- * Adds an existent category to the manager and returns a key to access it.
- * \param volume The volume of the new category.
- * \return The category key.
- */
- unsigned int addCategory(float volume);
-
- /**
- * Plays a sound and adds it to a new or existent category.
- * \param sound The sound to be played and added to a category.
- * \param catKey Key of the category.
- * \return The handle of the playback; nullptr if the sound couldn't be played.
- */
- std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, unsigned int catKey);
-
- /**
- * Resumes all the paused sounds of a category.
- * \param catKey Key of the category.
- * \return
- * - true if succesful.
- * - false if the category doesn't exist.
- */
- bool resume(unsigned int catKey);
-
- /**
- * Pauses all current playing sounds of a category.
- * \param catKey Key of the category.
- * \return
- * - true if succesful.
- * - false if the category doesn't exist.
- */
- bool pause(unsigned int catKey);
-
- /**
- * Retrieves the volume of a category.
- * \param catKey Key of the category.
- * \return The volume value of the category. If the category doesn't exist it returns a negative number.
- */
- float getVolume(unsigned int catKey);
-
- /**
- * Sets the volume for a category.
- * \param volume The volume.
- * \param catKey Key of the category.
- * \return
- * - true if succesful.
- * - false if the category doesn't exist.
- */
- bool setVolume(float volume, unsigned int catKey);
-
- /**
- * Stops and erases a category of sounds.
- * \param catKey Key of the category.
- * \return
- * - true if succesful.
- * - false if the category doesn't exist.
- */
- bool stop(unsigned int catKey);
-
- /**
- * Removes all the invalid handles of all the categories.
- * Only needed if individual sounds are stopped with their handles.
- */
- void clean();
-
- /**
- * Removes all the invalid handles of a category.
- * Only needed if individual sounds are stopped with their handles.
- * \param catKey Key of the category.
- * \return
- * - true if succesful.
- * - false if the category doesn't exist.
- */
- bool clean(unsigned int catKey);
-
- /**
- * Retrieves the device of the PlaybackManager.
- * \return A shared pointer to the device used by the playback manager.
- */
- std::shared_ptr<IDevice> getDevice();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Reverse.h b/extern/audaspace/include/fx/Reverse.h
deleted file mode 100644
index 32227da977a..00000000000
--- a/extern/audaspace/include/fx/Reverse.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * 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 Reverse.h
- * @ingroup fx
- * The Reverse class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound reads another sound reverted.
- * \note Readers from the underlying sound must be seekable.
- */
-class AUD_API Reverse : public Effect
-{
-private:
- // delete copy constructor and operator=
- Reverse(const Reverse&) = delete;
- Reverse& operator=(const Reverse&) = delete;
-
-public:
- /**
- * Creates a new reverse sound.
- * \param sound The input sound.
- */
- Reverse(std::shared_ptr<ISound> sound);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ReverseReader.h b/extern/audaspace/include/fx/ReverseReader.h
deleted file mode 100644
index a02608e1378..00000000000
--- a/extern/audaspace/include/fx/ReverseReader.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * 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 ReverseReader.h
- * @ingroup fx
- * The ReverseReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class reads another reader from back to front.
- * \note The underlying reader must be seekable.
- */
-class AUD_API ReverseReader : public EffectReader
-{
-private:
- /**
- * The sample count.
- */
- const int m_length;
-
- /**
- * The current position.
- */
- int m_position;
-
- // delete copy constructor and operator=
- ReverseReader(const ReverseReader&) = delete;
- ReverseReader& operator=(const ReverseReader&) = delete;
-
-public:
- /**
- * Creates a new reverse reader.
- * \param reader The reader to read from.
- * \exception Exception Thrown if the reader specified has an
- * undeterminable/infinite length or is not seekable.
- */
- ReverseReader(std::shared_ptr<IReader> reader);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/SoundList.h b/extern/audaspace/include/fx/SoundList.h
deleted file mode 100644
index ce3cb386969..00000000000
--- a/extern/audaspace/include/fx/SoundList.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 SoundList.h
-* @ingroup fx
-* The SoundList class.
-*/
-
-#include "ISound.h"
-
-#include <vector>
-#include <memory>
-#include <mutex>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class allows to have a list of sound that will play sequentially or randomly with each playback.
-*/
-class AUD_API SoundList : public ISound
-{
-private:
- /**
- * The list of sounds that will play.
- */
- std::vector<std::shared_ptr<ISound>> m_list;
-
- /**
- * Flag for random playback
- */
- bool m_random = false;
-
- /**
- * Current sound index. -1 if no reader has been created.
- */
- int m_index = -1;
-
- /**
- * Mutex to prevent multithreading crashes.
- */
- std::recursive_mutex m_mutex;
-
- // delete copy constructor and operator=
- SoundList(const SoundList&) = delete;
- SoundList& operator=(const SoundList&) = delete;
-
-public:
- /**
- * Creates a new, empty sound list.
- * Sounds must be added to the list using the addSound() method.
- * \param random False if the sounds int he list must be played sequentially. True if random.
- */
- SoundList(bool random = false);
-
- /**
- * Creates a new sound list and initializes it.
- * \param list A vector with sounds to initialize the list.
- * \param random False if the sounds int he list must be played sequentially. True if random.
- */
- SoundList(std::vector<std::shared_ptr<ISound>>& list, bool random = false);
-
- virtual std::shared_ptr<IReader> createReader();
-
- /**
- * Adds a sound to the list.
- * The added sounds can be played sequentially or randomly dependig
- * on the m_random flag
- * \param sound A shared_ptr to the sound.
- */
- void addSound(std::shared_ptr<ISound> sound);
-
- /**
- * Sets the playback mode of the sound list.
- * There are two posible modes, random and sequential.
- * \param random True to activate the random mode, false to activate sequential mode.
- */
- void setRandomMode(bool random);
-
- /**
- * Returns the playback mode of the sound list.
- * The two posible modes are random and sequential.
- * \return True if the random mode is activated, false otherwise.
- */
- bool getRandomMode();
-
- /**
- * Returns the amount of sounds in the list.
- * \return The amount of sounds in the list.
- */
- int getSize();
-
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Source.h b/extern/audaspace/include/fx/Source.h
deleted file mode 100644
index 84448aa669d..00000000000
--- a/extern/audaspace/include/fx/Source.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 Source.h
-* @ingroup fx
-* The Source class.
-*/
-
-#include "Audaspace.h"
-
-#include <atomic>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class stores the azimuth and elevation angles of a sound and allows to change them dynamically.
-* The azimuth angle goes clockwise. For a sound source situated at the right of the listener the azimuth angle is 90.
-*/
-class AUD_API Source
-{
-private:
- /**
- * Azimuth value.
- */
- std::atomic<float> m_azimuth;
-
- /**
- * Elevation value.
- */
- std::atomic<float> m_elevation;
-
- /**
- * Distance value. Between 0 and 1.
- */
- std::atomic<float> m_distance;
-
- // delete copy constructor and operator=
- Source(const Source&) = delete;
- Source& operator=(const Source&) = delete;
-
-public:
- /**
- * Creates a Source instance with an initial value.
- * \param azimuth The value of the azimuth.
- * \param elevation The value of the elevation.
- * \param distance The distance from the listener. Max distance is 1, min distance is 0.
- */
- Source(float azimuth, float elevation, float distance = 0.0);
-
- /**
- * Retrieves the current azimuth value.
- * \return The current azimuth.
- */
- float getAzimuth();
-
- /**
- * Retrieves the current elevation value.
- * \return The current elevation.
- */
- float getElevation();
-
- /**
- * Retrieves the current distance value.
- * \return The current distance.
- */
- float getDistance();
-
- /**
- * Retrieves the current volume value based on the distance.
- * \return The current volume based on the Distance.
- */
- float getVolume();
-
- /**
- * Changes the azimuth value.
- * \param azimuth The new value for the azimuth.
- */
- void setAzimuth(float azimuth);
-
- /**
- * Changes the elevation value.
- * \param elevation The new value for the elevation.
- */
- void setElevation(float elevation);
-
- /**
- * Changes the distance value.
- * \param distance The new value for the distance. Max distance is 1, min distance is 0.
- */
- void setDistance(float distance);
-};
-
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Sum.h b/extern/audaspace/include/fx/Sum.h
deleted file mode 100644
index b590aa7fcd1..00000000000
--- a/extern/audaspace/include/fx/Sum.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * 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 Sum.h
- * @ingroup fx
- * The Sum class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a sum reader.
- */
-class AUD_API Sum : public Effect
-{
-private:
- // delete copy constructor and operator=
- Sum(const Sum&) = delete;
- Sum& operator=(const Sum&) = delete;
-
-public:
- /**
- * Creates a new sum sound.
- * \param sound The input sound.
- */
- Sum(std::shared_ptr<ISound> sound);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Threshold.h b/extern/audaspace/include/fx/Threshold.h
deleted file mode 100644
index 10baef1714d..00000000000
--- a/extern/audaspace/include/fx/Threshold.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * 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 Threshold.h
- * @ingroup fx
- * The Threshold class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-class CallbackIIRFilterReader;
-
-/**
- * This sound Transforms any signal to a square signal by thresholding.
- */
-class AUD_API Threshold : public Effect
-{
-private:
- /**
- * The threshold.
- */
- const float m_threshold;
-
- // delete copy constructor and operator=
- Threshold(const Threshold&) = delete;
- Threshold& operator=(const Threshold&) = delete;
-
-public:
- /**
- * Creates a new threshold sound.
- * \param sound The input sound.
- * \param threshold The threshold.
- */
- Threshold(std::shared_ptr<ISound> sound, float threshold = 0.0f);
-
- /**
- * Returns the threshold.
- */
- float getThreshold() const;
-
- virtual std::shared_ptr<IReader> createReader();
-
- /**
- * The thresholdFilter function implements the doFilterIIR callback
- * for the callback IIR filter.
- * @param reader The CallbackIIRFilterReader that executes the callback.
- * @param threshold The threshold value.
- * @return The filtered sample.
- */
- static sample_t AUD_LOCAL thresholdFilter(CallbackIIRFilterReader* reader, float* threshold);
-
- /**
- * The endThresholdFilter function implements the endFilterIIR callback
- * for the callback IIR filter.
- * @param threshold The threshold value.
- */
- static void AUD_LOCAL endThresholdFilter(float* threshold);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Volume.h b/extern/audaspace/include/fx/Volume.h
deleted file mode 100644
index 0e56e8efd9b..00000000000
--- a/extern/audaspace/include/fx/Volume.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * 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 Volume.h
- * @ingroup fx
- * The Volume class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound changes the volume of another sound.
- * The set volume should be a value between 0.0 and 1.0, higher values at your
- * own risk!
- */
-class AUD_API Volume : public Effect
-{
-private:
- /**
- * The volume.
- */
- const float m_volume;
-
- // delete copy constructor and operator=
- Volume(const Volume&) = delete;
- Volume& operator=(const Volume&) = delete;
-
-public:
- /**
- * Creates a new volume sound.
- * \param sound The input sound.
- * \param volume The desired volume.
- */
- Volume(std::shared_ptr<ISound> sound, float volume);
-
- /**
- * Returns the volume.
- * \return The current volume.
- */
- float getVolume() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/VolumeReader.h b/extern/audaspace/include/fx/VolumeReader.h
deleted file mode 100644
index 13b6845e931..00000000000
--- a/extern/audaspace/include/fx/VolumeReader.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 VolumeReader.h
-* @ingroup fx
-* The VolumeReader class.
-*/
-
-#include "IReader.h"
-#include "ISound.h"
-#include "VolumeStorage.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class represents a reader for a sound that has its own shared volume
-*/
-class AUD_API VolumeReader : public IReader
-{
-private:
- /**
- * The current reader.
- */
- std::shared_ptr<IReader> m_reader;
-
- /**
- * A sound from which to get the reader.
- */
- std::shared_ptr<VolumeStorage> m_volumeStorage;
-
-
- // delete copy constructor and operator=
- VolumeReader(const VolumeReader&) = delete;
- VolumeReader& operator=(const VolumeReader&) = delete;
-
-public:
- /**
- * Creates a new volume reader.
- * \param reader A reader of the sound to be assigned to this reader.
- * \param volumeStorage A shared pointer to a VolumeStorage object.
- */
- VolumeReader(std::shared_ptr<IReader> reader, std::shared_ptr<VolumeStorage> volumeStorage);
-
- 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 \ No newline at end of file
diff --git a/extern/audaspace/include/fx/VolumeSound.h b/extern/audaspace/include/fx/VolumeSound.h
deleted file mode 100644
index 0aeffd53e87..00000000000
--- a/extern/audaspace/include/fx/VolumeSound.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 VolumeSound.h
-* @ingroup fx
-* The VolumeSound class.
-*/
-
-#include "ISound.h"
-#include "VolumeStorage.h"
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class allows to create a sound with its own volume.
-*/
-class AUD_API VolumeSound : public ISound
-{
-private:
- /**
- * A pointer to a sound.
- */
- std::shared_ptr<ISound> m_sound;
-
- /**
- * A pointer to the shared volume being used.
- */
- std::shared_ptr<VolumeStorage> m_volumeStorage;
-
- // delete copy constructor and operator=
- VolumeSound(const VolumeSound&) = delete;
- VolumeSound& operator=(const VolumeSound&) = delete;
-
-public:
- /**
- * Creates a new VolumeSound.
- * \param sound The sound in which shall have its own volume.
- * \param volumeStorage A shared pointer to a VolumeStorage object. It allows to change the volume of various sound in one go.
- */
- VolumeSound(std::shared_ptr<ISound> sound, std::shared_ptr<VolumeStorage> volumeStorage);
-
- virtual std::shared_ptr<IReader> createReader();
-
- /**
- * Retrieves the shared volume of this sound.
- * \return A shared pointer to the VolumeStorage object that this sound is using.
- */
- std::shared_ptr<VolumeStorage> getSharedVolume();
-
- /**
- * Changes the shared volume of this sound, it'll only affect newly created readers.
- * \param volumeStorage A shared pointer to the new VolumeStorage object.
- */
- void setSharedVolume(std::shared_ptr<VolumeStorage> volumeStorage);
-};
-
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/VolumeStorage.h b/extern/audaspace/include/fx/VolumeStorage.h
deleted file mode 100644
index 5088a5e2ba9..00000000000
--- a/extern/audaspace/include/fx/VolumeStorage.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 VolumeStorage.h
-* @ingroup fx
-* The VolumeStorage class.
-*/
-
-#include "Audaspace.h"
-
-#include <atomic>
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* This class stores a volume value and allows to change if for a number of sounds in one go.
-*/
-class AUD_API VolumeStorage
-{
-private:
- /**
- * Volume value.
- */
- std::atomic<float> m_volume;
-
- // delete copy constructor and operator=
- VolumeStorage(const VolumeStorage&) = delete;
- VolumeStorage& operator=(const VolumeStorage&) = delete;
-
-public:
- /**
- * Creates a new VolumeStorage instance with volume 1
- */
- VolumeStorage();
-
- /**
- * Creates a VolumeStorage instance with an initial value.
- * \param volume The value of the volume.
- */
- VolumeStorage(float volume);
-
- /**
- * Retrieves the current volume value.
- * \return The current volume.
- */
- float getVolume();
-
- /**
- * Changes the volume value.
- * \param volume The new value for the volume.
- */
- void setVolume(float volume);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/Sawtooth.h b/extern/audaspace/include/generator/Sawtooth.h
deleted file mode 100644
index 68f56ae83fd..00000000000
--- a/extern/audaspace/include/generator/Sawtooth.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * 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 Sawtooth.h
- * @ingroup generator
- * The Sawtooth class.
- */
-
-#include "ISound.h"
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a reader that plays a sawtooth tone.
- */
-class AUD_API Sawtooth : public ISound
-{
-private:
- /**
- * The frequence of the sawtooth wave.
- */
- const float m_frequency;
-
- /**
- * The target sample rate for output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- Sawtooth(const Sawtooth&) = delete;
- Sawtooth& operator=(const Sawtooth&) = delete;
-
-public:
- /**
- * Creates a new sawtooth sound.
- * \param frequency The desired frequency.
- * \param sampleRate The target sample rate for playback.
- */
- Sawtooth(float frequency, SampleRate sampleRate = RATE_48000);
-
- /**
- * Returns the frequency of the sawtooth wave.
- */
- float getFrequency() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SawtoothReader.h b/extern/audaspace/include/generator/SawtoothReader.h
deleted file mode 100644
index b4045eb8820..00000000000
--- a/extern/audaspace/include/generator/SawtoothReader.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * 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 SawtoothReader.h
- * @ingroup generator
- * The SawtoothReader class.
- */
-
-#include "IReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is used for sawtooth tone playback.
- * The output format is in the 16 bit format and stereo, the sample rate can be
- * specified.
- * As the two channels both play the same the output could also be mono, but
- * in most cases this will result in having to resample for output, so stereo
- * sound is created directly.
- */
-class AUD_API SawtoothReader : public IReader
-{
-private:
- /**
- * The frequency of the sine wave.
- */
- float m_frequency;
-
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The value of the current sample.
- */
- float m_sample;
-
- /**
- * The sample rate for the output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- SawtoothReader(const SawtoothReader&) = delete;
- SawtoothReader& operator=(const SawtoothReader&) = delete;
-
-public:
- /**
- * Creates a new reader.
- * \param frequency The frequency of the sine wave.
- * \param sampleRate The output sample rate.
- */
- SawtoothReader(float frequency, SampleRate sampleRate);
-
- /**
- * Sets the frequency of the wave.
- * @param frequency The new frequency in Hertz.
- */
- void setFrequency(float frequency);
-
- 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/extern/audaspace/include/generator/Silence.h b/extern/audaspace/include/generator/Silence.h
deleted file mode 100644
index a35b83d37fc..00000000000
--- a/extern/audaspace/include/generator/Silence.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * 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 Silence.h
- * @ingroup generator
- * The Silence class.
- */
-
-#include "ISound.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a reader that plays silence.
- */
-class AUD_API Silence : public ISound
-{
-private:
- // delete copy constructor and operator=
- Silence(const Silence&) = delete;
- Silence& operator=(const Silence&) = delete;
-
-public:
- /**
- * Creates a new silence sound.
- */
- Silence();
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SilenceReader.h b/extern/audaspace/include/generator/SilenceReader.h
deleted file mode 100644
index ecc0ce86da9..00000000000
--- a/extern/audaspace/include/generator/SilenceReader.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * 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 SilenceReader.h
- * @ingroup generator
- * The SilenceReader class.
- */
-
-#include "IReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is used for silence playback.
- * The signal generated is 44.1kHz mono.
- */
-class AUD_API SilenceReader : public IReader
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- // delete copy constructor and operator=
- SilenceReader(const SilenceReader&) = delete;
- SilenceReader& operator=(const SilenceReader&) = delete;
-
-public:
- /**
- * Creates a new reader.
- */
- SilenceReader();
-
- 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/extern/audaspace/include/generator/Sine.h b/extern/audaspace/include/generator/Sine.h
deleted file mode 100644
index ee78fc7d06b..00000000000
--- a/extern/audaspace/include/generator/Sine.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * 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 Sine.h
- * @ingroup generator
- * The Sine class.
- */
-
-#include "ISound.h"
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a reader that plays a sine tone.
- */
-class AUD_API Sine : public ISound
-{
-private:
- /**
- * The frequence of the sine wave.
- */
- const float m_frequency;
-
- /**
- * The target sample rate for output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- Sine(const Sine&) = delete;
- Sine& operator=(const Sine&) = delete;
-
-public:
- /**
- * Creates a new sine sound.
- * \param frequency The desired frequency.
- * \param sampleRate The target sample rate for playback.
- */
- Sine(float frequency,
- SampleRate sampleRate = RATE_48000);
-
- /**
- * Returns the frequency of the sine wave.
- */
- float getFrequency() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SineReader.h b/extern/audaspace/include/generator/SineReader.h
deleted file mode 100644
index 49cd571bc65..00000000000
--- a/extern/audaspace/include/generator/SineReader.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * 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 SineReader.h
- * @ingroup generator
- * The SineReader class.
- */
-
-#include "IReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is used for sine tone playback.
- * The sample rate can be specified, the signal is mono.
- */
-class AUD_API SineReader : public IReader
-{
-private:
- /**
- * The frequency of the sine wave.
- */
- float m_frequency;
-
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The sample rate for the output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- SineReader(const SineReader&) = delete;
- SineReader& operator=(const SineReader&) = delete;
-
-public:
- /**
- * Creates a new reader.
- * \param frequency The frequency of the sine wave.
- * \param sampleRate The output sample rate.
- */
- SineReader(float frequency, SampleRate sampleRate);
-
- /**
- * Sets the frequency of the wave.
- * @param frequency The new frequency in Hertz.
- */
- void setFrequency(float frequency);
-
- 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/extern/audaspace/include/generator/Square.h b/extern/audaspace/include/generator/Square.h
deleted file mode 100644
index 0ba27677a81..00000000000
--- a/extern/audaspace/include/generator/Square.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * 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 Square.h
- * @ingroup generator
- * The Square class.
- */
-
-#include "ISound.h"
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a reader that plays a square tone.
- */
-class AUD_API Square : public ISound
-{
-private:
- /**
- * The frequence of the square wave.
- */
- const float m_frequency;
-
- /**
- * The target sample rate for output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- Square(const Square&) = delete;
- Square& operator=(const Square&) = delete;
-
-public:
- /**
- * Creates a new square sound.
- * \param frequency The desired frequency.
- * \param sampleRate The target sample rate for playback.
- */
- Square(float frequency,
- SampleRate sampleRate = RATE_48000);
-
- /**
- * Returns the frequency of the square wave.
- */
- float getFrequency() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SquareReader.h b/extern/audaspace/include/generator/SquareReader.h
deleted file mode 100644
index 53fc574c767..00000000000
--- a/extern/audaspace/include/generator/SquareReader.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * 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 SquareReader.h
- * @ingroup generator
- * The SquareReader class.
- */
-
-#include "IReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is used for square tone playback.
- * The output format is in the 16 bit format and stereo, the sample rate can be
- * specified.
- * As the two channels both play the same the output could also be mono, but
- * in most cases this will result in having to resample for output, so stereo
- * sound is created directly.
- */
-class AUD_API SquareReader : public IReader
-{
-private:
- /**
- * The frequency of the sine wave.
- */
- float m_frequency;
-
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The value of the current sample.
- */
- float m_sample;
-
- /**
- * The sample rate for the output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- SquareReader(const SquareReader&) = delete;
- SquareReader& operator=(const SquareReader&) = delete;
-
-public:
- /**
- * Creates a new reader.
- * \param frequency The frequency of the sine wave.
- * \param sampleRate The output sample rate.
- */
- SquareReader(float frequency, SampleRate sampleRate);
-
- /**
- * Sets the frequency of the wave.
- * @param frequency The new frequency in Hertz.
- */
- void setFrequency(float frequency);
-
- 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/extern/audaspace/include/generator/Triangle.h b/extern/audaspace/include/generator/Triangle.h
deleted file mode 100644
index 4f607fc23b5..00000000000
--- a/extern/audaspace/include/generator/Triangle.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * 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 Triangle.h
- * @ingroup generator
- * The Triangle class.
- */
-
-#include "ISound.h"
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a reader that plays a triangle tone.
- */
-class AUD_API Triangle : public ISound
-{
-private:
- /**
- * The frequence of the triangle wave.
- */
- const float m_frequency;
-
- /**
- * The target sample rate for output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- Triangle(const Triangle&) = delete;
- Triangle& operator=(const Triangle&) = delete;
-
-public:
- /**
- * Creates a new triangle sound.
- * \param frequency The desired frequency.
- * \param sampleRate The target sample rate for playback.
- */
- Triangle(float frequency,
- SampleRate sampleRate = RATE_48000);
-
- /**
- * Returns the frequency of the triangle wave.
- */
- float getFrequency() const;
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/TriangleReader.h b/extern/audaspace/include/generator/TriangleReader.h
deleted file mode 100644
index 15079404b75..00000000000
--- a/extern/audaspace/include/generator/TriangleReader.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * 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 TriangleReader.h
- * @ingroup generator
- * The TriangleReader class.
- */
-
-#include "IReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is used for sawtooth tone playback.
- * The output format is in the 16 bit format and stereo, the sample rate can be
- * specified.
- * As the two channels both play the same the output could also be mono, but
- * in most cases this will result in having to resample for output, so stereo
- * sound is created directly.
- */
-class AUD_API TriangleReader : public IReader
-{
-private:
- /**
- * The frequency of the sine wave.
- */
- float m_frequency;
-
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The value of the current sample.
- */
- float m_sample;
-
- /**
- * The sample rate for the output.
- */
- const SampleRate m_sampleRate;
-
- // delete copy constructor and operator=
- TriangleReader(const TriangleReader&) = delete;
- TriangleReader& operator=(const TriangleReader&) = delete;
-
-public:
- /**
- * Creates a new reader.
- * \param frequency The frequency of the sine wave.
- * \param sampleRate The output sample rate.
- */
- TriangleReader(float frequency, SampleRate sampleRate);
-
- /**
- * Sets the frequency of the wave.
- * @param frequency The new frequency in Hertz.
- */
- void setFrequency(float frequency);
-
- 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/extern/audaspace/include/plugin/PluginManager.h b/extern/audaspace/include/plugin/PluginManager.h
deleted file mode 100644
index af2f469c4ea..00000000000
--- a/extern/audaspace/include/plugin/PluginManager.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * 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 PluginManager.h
- * @ingroup plugin
- * The PluginManager class.
- */
-
-#include "Audaspace.h"
-
-#include <unordered_map>
-#include <string>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This manager provides utilities for plugin loading.
- */
-class AUD_API PluginManager
-{
-private:
- static std::unordered_map<std::string, void*> m_plugins;
-
- // delete copy constructor and operator=
- PluginManager(const PluginManager&) = delete;
- PluginManager& operator=(const PluginManager&) = delete;
- PluginManager() = delete;
-
-public:
- /**
- * Opens a shared library.
- * @param path The path to the file.
- * @return A handle to the library or nullptr if opening failed.
- */
- static void* openLibrary(const std::string& path);
-
- /**
- * Looks up a symbol from an opened library.
- * @param handle The handle to the opened library.
- * @param name The name of the symbol to look up.
- * @return The symbol or nullptr if the symbol was not found.
- */
- static void* lookupLibrary(void* handle, const std::string& name);
-
- /**
- * Closes an opened shared library.
- * @param handle The handle to the library to be closed.
- */
- static void closeLibrary(void* handle);
-
- /**
- * Loads a plugin from a file.
- * @param path The path to the file.
- * @return Whether the file could successfully be loaded.
- */
- static bool loadPlugin(const std::string& path);
-
- /**
- * Loads all plugins found in a folder.
- * @param path The path to the folder containing the plugins.
- */
- static void loadPlugins(const std::string& path = "");
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ChannelMapper.h b/extern/audaspace/include/respec/ChannelMapper.h
deleted file mode 100644
index 5481a42c433..00000000000
--- a/extern/audaspace/include/respec/ChannelMapper.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * 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 ChannelMapper.h
- * @ingroup respec
- * The ChannelMapper class.
- */
-
-#include "respec/SpecsChanger.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a reader that maps a sound source's channels to a
- * specific output channel count.
- */
-class AUD_API ChannelMapper : public SpecsChanger
-{
-private:
- // delete copy constructor and operator=
- ChannelMapper(const ChannelMapper&) = delete;
- ChannelMapper& operator=(const ChannelMapper&) = delete;
-
-public:
- /**
- * Creates a new sound.
- * \param sound The input sound.
- * \param specs The target specifications.
- */
- ChannelMapper(std::shared_ptr<ISound> sound, DeviceSpecs specs);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ChannelMapperReader.h b/extern/audaspace/include/respec/ChannelMapperReader.h
deleted file mode 100644
index 00739ee995f..00000000000
--- a/extern/audaspace/include/respec/ChannelMapperReader.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * 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 ChannelMapperReader.h
- * @ingroup respec
- * The ChannelMapperReader class.
- */
-
-#include "fx/EffectReader.h"
-#include "util/Buffer.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class maps a sound source's channels to a specific output channel count.
- * \note The input sample format must be float.
- */
-class AUD_API ChannelMapperReader : public EffectReader
-{
-private:
- /**
- * The sound reading buffer.
- */
- Buffer m_buffer;
-
- /**
- * The output specification.
- */
- Channels m_target_channels;
-
- /**
- * The channel count of the reader.
- */
- Channels m_source_channels;
-
- /**
- * The mapping specification.
- */
- float* m_mapping;
-
- /**
- * The size of the mapping.
- */
- int m_map_size;
-
- /**
- * The mono source angle.
- */
- float m_mono_angle;
-
- static const Channel MONO_MAP[];
- static const Channel STEREO_MAP[];
- static const Channel STEREO_LFE_MAP[];
- static const Channel SURROUND4_MAP[];
- static const Channel SURROUND5_MAP[];
- static const Channel SURROUND51_MAP[];
- static const Channel SURROUND61_MAP[];
- static const Channel SURROUND71_MAP[];
- static const Channel* CHANNEL_MAPS[];
-
- static const float MONO_ANGLES[];
- static const float STEREO_ANGLES[];
- static const float STEREO_LFE_ANGLES[];
- static const float SURROUND4_ANGLES[];
- static const float SURROUND5_ANGLES[];
- static const float SURROUND51_ANGLES[];
- static const float SURROUND61_ANGLES[];
- static const float SURROUND71_ANGLES[];
- static const float* CHANNEL_ANGLES[];
-
- // delete copy constructor and operator=
- ChannelMapperReader(const ChannelMapperReader&) = delete;
- ChannelMapperReader& operator=(const ChannelMapperReader&) = delete;
-
- /**
- * Calculates the mapping matrix.
- */
- void AUD_LOCAL calculateMapping();
-
- /**
- * Calculates the distance between two angles.
- */
- float AUD_LOCAL angleDistance(float alpha, float beta);
-
-public:
- /**
- * Creates a channel mapper reader.
- * \param reader The reader to map.
- * \param channels The target channel count this reader should map to.
- */
- ChannelMapperReader(std::shared_ptr<IReader> reader, Channels channels);
-
- /**
- * Destroys the reader.
- */
- ~ChannelMapperReader();
-
- /**
- * Returns the channel configuration of the source reader.
- * @return The channel configuration of the reader.
- */
- Channels getSourceChannels() const;
-
- /**
- * Returns the target channel configuration.
- * Equals getSpecs().channels.
- * @return The target channel configuration.
- */
- Channels getChannels() const;
-
- /**
- * Sets the requested channel output count.
- * \param channels The channel output count.
- */
- void setChannels(Channels channels);
-
- /**
- * Returns the mapping of the source channel to the target channel.
- * @param source The number of the source channel. Should be in the range [0, source channels).
- * @param target The number of the target channel. Should be in the range [0, target channels).
- * @return The mapping value which should be between 0.0 and 1.0. If source or target are out of range, NaN is returned.
- */
- float getMapping(int source, int target);
-
- /**
- * Sets the angle for mono sources.
- * \param angle The angle for mono sources.
- */
- void setMonoAngle(float angle);
-
- virtual Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/Converter.h b/extern/audaspace/include/respec/Converter.h
deleted file mode 100644
index 35664b28025..00000000000
--- a/extern/audaspace/include/respec/Converter.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * 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 Converter.h
- * @ingroup respec
- * The Converter class.
- */
-
-#include "respec/SpecsChanger.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a converter reader that is able to convert from one
- * audio format to another.
- */
-class AUD_API Converter : public SpecsChanger
-{
-private:
- // delete copy constructor and operator=
- Converter(const Converter&) = delete;
- Converter& operator=(const Converter&) = delete;
-
-public:
- /**
- * Creates a new sound.
- * \param sound The input sound.
- * \param specs The target specifications.
- */
- Converter(std::shared_ptr<ISound> sound, DeviceSpecs specs);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ConverterFunctions.h b/extern/audaspace/include/respec/ConverterFunctions.h
deleted file mode 100644
index 3cc4a713cc9..00000000000
--- a/extern/audaspace/include/respec/ConverterFunctions.h
+++ /dev/null
@@ -1,377 +0,0 @@
-/*******************************************************************************
- * 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 ConverterFunctions.h
- * @ingroup respec
- * Defines several conversion functions between different sample formats.
- */
-
-#include "Audaspace.h"
-
-#include <cstring>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * The function template for functions converting from one sample format
- * to another, having the same parameter order as std::memcpy.
- */
-typedef void (*convert_f)(data_t* target, data_t* source, int length);
-
-/**
- * The copy conversion function simply calls std::memcpy.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-template <class T>
-void convert_copy(data_t* target, data_t* source, int length)
-{
- std::memcpy(target, source, length*sizeof(T));
-}
-
-/**
- * @brief Converts from FORMAT_U8 to FORMAT_S16.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_u8_s16(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_U8 to FORMAT_S24 big endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_u8_s24_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_U8 to FORMAT_S24 little endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_u8_s24_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_U8 to FORMAT_S32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_u8_s32(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_U8 to FORMAT_FLOAT32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_u8_float(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_U8 to FORMAT_FLOAT64.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_u8_double(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S16 to FORMAT_U8.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s16_u8(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S16 to FORMAT_S24 big endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s16_s24_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S16 to FORMAT_S24 little endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s16_s24_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S16 to FORMAT_S32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s16_s32(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S16 to FORMAT_FLOAT32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s16_float(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S16 to FORMAT_FLOAT64.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s16_double(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 big endian to FORMAT_U8.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_u8_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 little endian to FORMAT_U8.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_u8_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 big endian to FORMAT_S16.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_s16_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 little endian to FORMAT_S16.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_s16_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 to FORMAT_S24 simply using std::memcpy.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_s24(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 big endian to FORMAT_S32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_s32_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 little endian to FORMAT_S32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_s32_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 big endian to FORMAT_FLOAT32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_float_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 little endian to FORMAT_FLOAT32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_float_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 big endian to FORMAT_FLOAT64.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_double_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S24 little endian to FORMAT_FLOAT64.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s24_double_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S32 to FORMAT_U8.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s32_u8(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S32 to FORMAT_S16.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s32_s16(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S32 to FORMAT_S24 big endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s32_s24_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S32 to FORMAT_S24 little endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s32_s24_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S32 to FORMAT_FLOAT32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s32_float(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_S32 to FORMAT_FLOAT64.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_s32_double(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT32 to FORMAT_U8.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_float_u8(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT32 to FORMAT_S16.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_float_s16(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT32 to FORMAT_S24 big endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_float_s24_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT32 to FORMAT_S24 little endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_float_s24_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT32 to FORMAT_S32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_float_s32(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT32 to FORMAT_FLOAT64.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_float_double(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT64 to FORMAT_U8.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_double_u8(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT64 to FORMAT_S16.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_double_s16(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT64 to FORMAT_S24 big endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_double_s24_be(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT64 to FORMAT_S24 little endian.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_double_s24_le(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT64 to FORMAT_S32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_double_s32(data_t* target, data_t* source, int length);
-
-/**
- * @brief Converts from FORMAT_FLOAT64 to FORMAT_FLOAT32.
- * @param target The target buffer.
- * @param source The source buffer.
- * @param length The amount of samples to be converted.
- */
-void AUD_API convert_double_float(data_t* target, data_t* source, int length);
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ConverterReader.h b/extern/audaspace/include/respec/ConverterReader.h
deleted file mode 100644
index c5ff6ded9ad..00000000000
--- a/extern/audaspace/include/respec/ConverterReader.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * 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 ConverterReader.h
- * @ingroup respec
- * The ConverterReader class.
- */
-
-#include "fx/EffectReader.h"
-#include "respec/ConverterFunctions.h"
-#include "util/Buffer.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class converts a sound source from one to another format.
- */
-class AUD_API ConverterReader : public EffectReader
-{
-private:
- /**
- * The sound output buffer.
- */
- Buffer m_buffer;
-
- /**
- * The target specification.
- */
- SampleFormat m_format;
-
- /**
- * Converter function.
- */
- convert_f m_convert;
-
- // delete copy constructor and operator=
- ConverterReader(const ConverterReader&) = delete;
- ConverterReader& operator=(const ConverterReader&) = delete;
-
-public:
- /**
- * Creates a converter reader.
- * \param reader The reader to convert.
- * \param specs The target specification.
- */
- ConverterReader(std::shared_ptr<IReader> reader, DeviceSpecs specs);
-
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/JOSResample.h b/extern/audaspace/include/respec/JOSResample.h
deleted file mode 100644
index b1f4d757c3c..00000000000
--- a/extern/audaspace/include/respec/JOSResample.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * 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 JOSResample.h
- * @ingroup respec
- * The JOSResample class.
- */
-
-#include "respec/SpecsChanger.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a resampling reader that does Julius O. Smith's resampling algorithm.
- */
-class AUD_API JOSResample : public SpecsChanger
-{
-private:
- // delete copy constructor and operator=
- JOSResample(const JOSResample&) = delete;
- JOSResample& operator=(const JOSResample&) = delete;
-
-public:
- /**
- * Creates a new sound.
- * \param sound The input sound.
- * \param specs The target specifications.
- */
- JOSResample(std::shared_ptr<ISound> sound, DeviceSpecs specs);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/JOSResampleReader.h b/extern/audaspace/include/respec/JOSResampleReader.h
deleted file mode 100644
index e9dd3b4220b..00000000000
--- a/extern/audaspace/include/respec/JOSResampleReader.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * 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 JOSResampleReader.h
- * @ingroup respec
- * The JOSResampleReader class.
- */
-
-#include "respec/ResampleReader.h"
-#include "util/Buffer.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This resampling reader uses Julius O. Smith's resampling algorithm.
- */
-class AUD_API JOSResampleReader : public ResampleReader
-{
-private:
- typedef void (JOSResampleReader::*resample_f)(double target_factor, int length, sample_t* buffer);
-
- /**
- * The half filter length.
- */
- static const int m_len;
-
- /**
- * The sample step size for the filter.
- */
- static const int m_L;
-
- /**
- * The filter coefficients.
- */
- static const float m_coeff[];
-
- /**
- * The reader channels.
- */
- Channels m_channels;
-
- /**
- * The sample position in the cache.
- */
- unsigned int m_n;
-
- /**
- * The subsample position in the cache.
- */
- double m_P;
-
- /**
- * The input data buffer.
- */
- Buffer m_buffer;
-
- /**
- * Double buffer for the sums.
- */
- Buffer m_sums;
-
- /**
- * How many samples in the cache are valid.
- */
- int m_cache_valid;
-
- /**
- * Resample function.
- */
- resample_f m_resample;
-
- /**
- * Last resampling factor.
- */
- double m_last_factor;
-
- // delete copy constructor and operator=
- JOSResampleReader(const JOSResampleReader&) = delete;
- JOSResampleReader& operator=(const JOSResampleReader&) = delete;
-
- /**
- * Resets the resampler to its initial state.
- */
- void AUD_LOCAL reset();
-
- /**
- * Updates the buffer to be as small as possible for the coming reading.
- * \param size The size of samples to be read.
- * \param factor The next resampling factor.
- * \param samplesize The size of a sample.
- */
- void AUD_LOCAL updateBuffer(int size, double factor, int samplesize);
-
- void AUD_LOCAL resample(double target_factor, int length, sample_t* buffer);
- void AUD_LOCAL resample_mono(double target_factor, int length, sample_t* buffer);
- void AUD_LOCAL resample_stereo(double target_factor, int length, sample_t* buffer);
-
-public:
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param rate The target sampling rate.
- */
- JOSResampleReader(std::shared_ptr<IReader> reader, SampleRate rate);
-
- 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/extern/audaspace/include/respec/LinearResample.h b/extern/audaspace/include/respec/LinearResample.h
deleted file mode 100644
index 207cf2a6548..00000000000
--- a/extern/audaspace/include/respec/LinearResample.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * 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 LinearResample.h
- * @ingroup respec
- * The LinearResample class.
- */
-
-#include "respec/SpecsChanger.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound creates a resampling reader that does simple linear resampling.
- */
-class AUD_API LinearResample : public SpecsChanger
-{
-private:
- // delete copy constructor and operator=
- LinearResample(const LinearResample&) = delete;
- LinearResample& operator=(const LinearResample&) = delete;
-
-public:
- /**
- * Creates a new sound.
- * \param sound The input sound.
- * \param specs The target specifications.
- */
- LinearResample(std::shared_ptr<ISound> sound, DeviceSpecs specs);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/LinearResampleReader.h b/extern/audaspace/include/respec/LinearResampleReader.h
deleted file mode 100644
index aaf95672e55..00000000000
--- a/extern/audaspace/include/respec/LinearResampleReader.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * 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 LinearResampleReader.h
- * @ingroup respec
- * The LinearResampleReader class.
- */
-
-#include "respec/ResampleReader.h"
-#include "util/Buffer.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This resampling reader does simple first-order hold resampling.
- */
-class AUD_API LinearResampleReader : public ResampleReader
-{
-private:
- /**
- * The reader channels.
- */
- Channels m_channels;
-
- /**
- * The position in the cache.
- */
- float m_cache_pos;
-
- /**
- * The sound output buffer.
- */
- Buffer m_buffer;
-
- /**
- * The input caching buffer.
- */
- Buffer m_cache;
-
- /**
- * Whether the cache contains valid data.
- */
- bool m_cache_ok;
-
- // delete copy constructor and operator=
- LinearResampleReader(const LinearResampleReader&) = delete;
- LinearResampleReader& operator=(const LinearResampleReader&) = delete;
-
-public:
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param rate The target sampling rate.
- */
- LinearResampleReader(std::shared_ptr<IReader> reader, SampleRate rate);
-
- 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/extern/audaspace/include/respec/Mixer.h b/extern/audaspace/include/respec/Mixer.h
deleted file mode 100644
index 600467826cd..00000000000
--- a/extern/audaspace/include/respec/Mixer.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * 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 Mixer.h
- * @ingroup respec
- * The Mixer class.
- */
-
-#include "respec/Specification.h"
-#include "respec/ConverterFunctions.h"
-#include "util/Buffer.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class IReader;
-
-/**
- * This abstract class is able to mix audiosignals with same channel count
- * and sample rate and convert it to a specific output format.
- */
-class AUD_API Mixer
-{
-private:
- // delete copy constructor and operator=
- Mixer(const Mixer&) = delete;
- Mixer& operator=(const Mixer&) = delete;
-
-protected:
- /**
- * The output specification.
- */
- DeviceSpecs m_specs;
-
- /**
- * The length of the mixing buffer.
- */
- int m_length;
-
- /**
- * The mixing buffer.
- */
- Buffer m_buffer;
-
- /**
- * Converter function.
- */
- convert_f m_convert;
-
-public:
- /**
- * Creates the mixer.
- */
- Mixer(DeviceSpecs specs);
-
- /**
- * Destroys the mixer.
- */
- virtual ~Mixer() {}
-
- /**
- * Returns the target specification for superposing.
- * \return The target specification.
- */
- DeviceSpecs getSpecs() const;
-
- /**
- * Sets the target specification for superposing.
- * \param specs The target specification.
- */
- void setSpecs(Specs specs);
-
- /**
- * Mixes a buffer.
- * \param buffer The buffer to superpose.
- * \param start The start sample of the buffer.
- * \param length The length of the buffer in samples.
- * \param volume The mixing volume. Must be a value between 0.0 and 1.0.
- */
- void mix(sample_t* buffer, int start, int length, float volume);
-
- /**
- * Mixes a buffer with linear volume interpolation.
- * \param buffer The buffer to superpose.
- * \param start The start sample of the buffer.
- * \param length The length of the buffer in samples.
- * \param volume_to The target mixing volume. Must be a value between 0.0 and 1.0.
- * \param volume_from The start mixing volume. Must be a value between 0.0 and 1.0.
- */
- void mix(sample_t* buffer, int start, int length, float volume_to, float volume_from);
-
- /**
- * Writes the mixing buffer into an output buffer.
- * \param buffer The target buffer for superposing.
- * \param volume The mixing volume. Must be a value between 0.0 and 1.0.
- */
- void read(data_t* buffer, float volume);
-
- /**
- * Clears the mixing buffer.
- * \param length The length of the buffer in samples.
- */
- void clear(int length);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ResampleReader.h b/extern/audaspace/include/respec/ResampleReader.h
deleted file mode 100644
index b38a8d5eb18..00000000000
--- a/extern/audaspace/include/respec/ResampleReader.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * 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 ResampleReader.h
- * @ingroup respec
- * The ResampleReader class.
- */
-
-#include "fx/EffectReader.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This is the base class for all resampling readers.
- */
-class AUD_API ResampleReader : public EffectReader
-{
-protected:
- /**
- * The target sampling rate.
- */
- SampleRate m_rate;
-
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param rate The target sampling rate.
- */
- ResampleReader(std::shared_ptr<IReader> reader, SampleRate rate);
-
-public:
- /**
- * Sets the sample rate.
- * \param rate The target sampling rate.
- */
- virtual void setRate(SampleRate rate);
-
- /**
- * Retrieves the sample rate.
- * \return The target sampling rate.
- */
- virtual SampleRate getRate();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/Specification.h b/extern/audaspace/include/respec/Specification.h
deleted file mode 100644
index efcbb4cabce..00000000000
--- a/extern/audaspace/include/respec/Specification.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*******************************************************************************
- * 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 Specification.h
- * @ingroup respec
- * Defines all important macros and basic data structures for stream format descriptions.
- */
-
-#include "Audaspace.h"
-
-/// The size of a format in bytes.
-#define AUD_FORMAT_SIZE(format) (format & 0x0F)
-/// The size of a sample in the specified device format in bytes.
-#define AUD_DEVICE_SAMPLE_SIZE(specs) (specs.channels * (specs.format & 0x0F))
-/// The size of a sample in the specified format in bytes.
-#define AUD_SAMPLE_SIZE(specs) (specs.channels * sizeof(sample_t))
-
-/// Compares two audio data specifications.
-#define AUD_COMPARE_SPECS(s1, s2) ((s1.rate == s2.rate) && (s1.channels == s2.channels))
-
-/// Returns the bit for a channel mask.
-#define AUD_CHANNEL_BIT(channel) (0x01 << channel)
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * The format of a sample.
- * The last 4 bit save the byte count of the format.
- */
-enum SampleFormat
-{
- FORMAT_INVALID = 0x00, /// Invalid sample format.
- FORMAT_U8 = 0x01, /// 1 byte unsigned byte.
- FORMAT_S16 = 0x12, /// 2 byte signed integer.
- FORMAT_S24 = 0x13, /// 3 byte signed integer.
- FORMAT_S32 = 0x14, /// 4 byte signed integer.
- FORMAT_FLOAT32 = 0x24, /// 4 byte float.
- FORMAT_FLOAT64 = 0x28 /// 8 byte float.
-};
-
-/// The channel count.
-enum Channels
-{
- CHANNELS_INVALID = 0, /// Invalid channel count.
- CHANNELS_MONO = 1, /// Mono.
- CHANNELS_STEREO = 2, /// Stereo.
- CHANNELS_STEREO_LFE = 3, /// Stereo with LFE channel.
- CHANNELS_SURROUND4 = 4, /// 4 channel surround sound.
- CHANNELS_SURROUND5 = 5, /// 5 channel surround sound.
- CHANNELS_SURROUND51 = 6, /// 5.1 surround sound.
- CHANNELS_SURROUND61 = 7, /// 6.1 surround sound.
- CHANNELS_SURROUND71 = 8 /// 7.1 surround sound.
-};
-
-/// The channel names.
-enum Channel
-{
- CHANNEL_FRONT_LEFT = 0,
- CHANNEL_FRONT_RIGHT,
- CHANNEL_FRONT_CENTER,
- CHANNEL_LFE,
- CHANNEL_REAR_LEFT,
- CHANNEL_REAR_RIGHT,
- CHANNEL_REAR_CENTER,
- CHANNEL_SIDE_LEFT,
- CHANNEL_SIDE_RIGHT,
- CHANNEL_MAX
-};
-
-/**
- * The sample rate tells how many samples are played back within one second.
- * Some exotic formats may use other sample rates than provided here.
- */
-enum DefaultSampleRate
-{
- RATE_INVALID = 0, /// Invalid sample rate.
- RATE_8000 = 8000, /// 8000 Hz.
- RATE_16000 = 16000, /// 16000 Hz.
- RATE_11025 = 11025, /// 11025 Hz.
- RATE_22050 = 22050, /// 22050 Hz.
- RATE_32000 = 32000, /// 32000 Hz.
- RATE_44100 = 44100, /// 44100 Hz.
- RATE_48000 = 48000, /// 48000 Hz.
- RATE_88200 = 88200, /// 88200 Hz.
- RATE_96000 = 96000, /// 96000 Hz.
- RATE_192000 = 192000 /// 192000 Hz.
-};
-
-/// Sample rate type.
-typedef double SampleRate;
-
-/// Specification of a sound source.
-struct Specs
-{
- /// Sample rate in Hz.
- SampleRate rate;
-
- /// Channel count.
- Channels channels;
-};
-
-/// Specification of a sound device.
-struct DeviceSpecs
-{
- /// Sample format.
- SampleFormat format;
-
- union
- {
- struct
- {
- /// Sample rate in Hz.
- SampleRate rate;
-
- /// Channel count.
- Channels channels;
- };
- Specs specs;
- };
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/SpecsChanger.h b/extern/audaspace/include/respec/SpecsChanger.h
deleted file mode 100644
index 2eb9f369497..00000000000
--- a/extern/audaspace/include/respec/SpecsChanger.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * 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 SpecsChanger.h
- * @ingroup respec
- * The SpecsChanger class.
- */
-
-#include "ISound.h"
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound is a base class for all mixer factories.
- */
-class AUD_API SpecsChanger : public ISound
-{
-protected:
- /**
- * The target specification for resampling.
- */
- const DeviceSpecs m_specs;
-
- /**
- * If there is no reader it is created out of this sound.
- */
- std::shared_ptr<ISound> m_sound;
-
- /**
- * Returns the reader created out of the sound.
- * This method can be used for the createReader function of the implementing
- * classes.
- * \return The reader to mix.
- */
- std::shared_ptr<IReader> getReader() const;
-
-public:
- /**
- * Creates a new sound.
- * \param sound The sound to create the readers to mix out of.
- * \param specs The target specification.
- */
- SpecsChanger(std::shared_ptr<ISound> sound, DeviceSpecs specs);
-
- /**
- * Returns the target specification for resampling.
- */
- DeviceSpecs getSpecs() const;
-
- /**
- * Returns the saved sound.
- * \return The sound.
- */
- std::shared_ptr<ISound> getSound() const;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/AnimateableProperty.h b/extern/audaspace/include/sequence/AnimateableProperty.h
deleted file mode 100644
index 2c3fcf23f8b..00000000000
--- a/extern/audaspace/include/sequence/AnimateableProperty.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * 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 AnimateableProperty.h
- * @ingroup sequence
- * Defines the AnimateableProperty class as well as existing property types.
- */
-
-#include "util/Buffer.h"
-#include "util/ILockable.h"
-
-#include <mutex>
-#include <list>
-
-AUD_NAMESPACE_BEGIN
-
-/// Possible animatable properties for Sequencer Factories and Entries.
-enum AnimateablePropertyType
-{
- AP_VOLUME,
- AP_PANNING,
- AP_PITCH,
- AP_LOCATION,
- AP_ORIENTATION
-};
-
-/**
- * This class saves animation data for float properties.
- */
-class AUD_API AnimateableProperty : private Buffer
-{
-private:
- struct Unknown {
- int start;
- int end;
-
- Unknown(int start, int end) :
- start(start), end(end) {}
- };
-
- /// The count of floats for a single property.
- const int m_count;
-
- /// Whether the property is animated or not.
- bool m_isAnimated;
-
- /// The mutex for locking.
- std::recursive_mutex m_mutex;
-
- /// The list of unknown buffer areas.
- std::list<Unknown> m_unknown;
-
- // delete copy constructor and operator=
- AnimateableProperty(const AnimateableProperty&) = delete;
- AnimateableProperty& operator=(const AnimateableProperty&) = delete;
-
- void AUD_LOCAL updateUnknownCache(int start, int end);
-
-public:
- /**
- * Creates a new animateable property.
- * \param count The count of floats for a single property.
- */
- AnimateableProperty(int count = 1);
-
- /**
- * Creates a new animateable property.
- * \param count The count of floats for a single property.
- * \param value The value that the property should get initialized with.
- * All count floats will be initialized to the same value.
- */
- AnimateableProperty(int count, float value);
-
- /**
- * Destroys the animateable property.
- */
- ~AnimateableProperty();
-
- /**
- * Returns the count of floats for a single property.
- * \return The count of floats stored per frame.
- */
- int getCount() const;
-
- /**
- * Writes the properties value and marks it non-animated.
- * \param data The new value.
- */
- void write(const float* data);
-
- /**
- * Writes the properties value and marks it animated.
- * \param data The new value.
- * \param position The position in the animation in frames.
- * \param count The count of frames to write.
- */
- void write(const float* data, int position, int count);
-
- /**
- * Reads the properties value.
- * \param position The position in the animation in frames.
- * \param[out] out Where to write the value to.
- */
- void read(float position, float* out);
-
- /**
- * Returns whether the property is animated.
- * \return Whether the property is animated.
- */
- bool isAnimated() const;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/Double.h b/extern/audaspace/include/sequence/Double.h
deleted file mode 100644
index dc40ae29e0d..00000000000
--- a/extern/audaspace/include/sequence/Double.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * 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 Double.h
- * @ingroup sequence
- * The Double class.
- */
-
-#include "ISound.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound plays two other factories behind each other.
- */
-class AUD_API Double : public ISound
-{
-private:
- /**
- * First played sound.
- */
- std::shared_ptr<ISound> m_sound1;
-
- /**
- * Second played sound.
- */
- std::shared_ptr<ISound> m_sound2;
-
- // delete copy constructor and operator=
- Double(const Double&) = delete;
- Double& operator=(const Double&) = delete;
-
-public:
- /**
- * Creates a new double sound.
- * \param sound1 The first input sound.
- * \param sound2 The second input sound.
- */
- Double(std::shared_ptr<ISound> sound1, std::shared_ptr<ISound> sound2);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/DoubleReader.h b/extern/audaspace/include/sequence/DoubleReader.h
deleted file mode 100644
index 012dcc8e832..00000000000
--- a/extern/audaspace/include/sequence/DoubleReader.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * 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 DoubleReader.h
- * @ingroup sequence
- * The DoubleReader class.
- */
-
-#include "IReader.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This reader plays two readers sequently.
- */
-class AUD_API DoubleReader : public IReader
-{
-private:
- /**
- * The first reader.
- */
- std::shared_ptr<IReader> m_reader1;
-
- /**
- * The second reader.
- */
- std::shared_ptr<IReader> m_reader2;
-
- /**
- * Whether we've reached the end of the first reader.
- */
- bool m_finished1;
-
- // delete copy constructor and operator=
- DoubleReader(const DoubleReader&) = delete;
- DoubleReader& operator=(const DoubleReader&) = delete;
-
-public:
- /**
- * Creates a new double reader.
- * \param reader1 The first reader to read from.
- * \param reader2 The second reader to read from.
- */
- DoubleReader(std::shared_ptr<IReader> reader1, std::shared_ptr<IReader> reader2);
-
- /**
- * Destroys the reader.
- */
- virtual ~DoubleReader();
-
- 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/extern/audaspace/include/sequence/PingPong.h b/extern/audaspace/include/sequence/PingPong.h
deleted file mode 100644
index 8b1bf792095..00000000000
--- a/extern/audaspace/include/sequence/PingPong.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * 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 PingPong.h
- * @ingroup sequence
- * The PingPong class.
- */
-
-#include "fx/Effect.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound plays another sound first normal, then reversed.
- * \note Readers from the underlying sound must be reversable with seeking.
- */
-class AUD_API PingPong : public Effect
-{
-private:
- // delete copy constructor and operator=
- PingPong(const PingPong&) = delete;
- PingPong& operator=(const PingPong&) = delete;
-
-public:
- /**
- * Creates a new ping pong sound.
- * \param sound The input sound.
- */
- PingPong(std::shared_ptr<ISound> sound);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/Sequence.h b/extern/audaspace/include/sequence/Sequence.h
deleted file mode 100644
index 7005171e2c8..00000000000
--- a/extern/audaspace/include/sequence/Sequence.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * 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 Sequence.h
- * @ingroup sequence
- * The Sequence class.
- */
-
-#include "ISound.h"
-#include "respec/Specification.h"
-#include "devices/I3DDevice.h"
-#include "sequence/AnimateableProperty.h"
-
-#include <list>
-
-AUD_NAMESPACE_BEGIN
-
-class SequenceEntry;
-class SequenceData;
-
-/**
- * This sound represents sequenced entries to play a sound scene.
- */
-class AUD_API Sequence : public ISound
-{
- friend class SequenceReader;
-private:
- /// The sequence.
- std::shared_ptr<SequenceData> m_sequence;
-
- // delete copy constructor and operator=
- Sequence(const Sequence&) = delete;
- Sequence& operator=(const Sequence&) = delete;
-
-public:
- /**
- * Creates a new sound scene.
- * \param specs The output audio data specification.
- * \param fps The FPS of the scene.
- * \param muted Whether the whole scene is muted.
- */
- Sequence(Specs specs, float fps, bool muted);
-
- /**
- * Retrieves the audio output specification.
- * \return The specification.
- */
- Specs getSpecs();
-
- /**
- * Sets the audio output specification.
- * \param specs The new specification.
- */
- void setSpecs(Specs specs);
-
- /**
- * Retrieves the scene's FPS.
- * \return The scene's FPS.
- */
- float getFPS() const;
-
- /**
- * Sets the scene's FPS.
- * \param fps The new FPS.
- */
- void setFPS(float fps);
-
- /**
- * Sets the muting state of the scene.
- * \param muted Whether the scene is muted.
- */
- void mute(bool muted);
-
- /**
- * Retrieves the muting state of the scene.
- * \return Whether the scene is muted.
- */
- bool isMuted() const;
-
- /**
- * Retrieves the speed of sound.
- * This value is needed for doppler effect calculation.
- * \return The speed of sound.
- */
- float getSpeedOfSound() const;
-
- /**
- * Sets the speed of sound.
- * This value is needed for doppler effect calculation.
- * \param speed The new speed of sound.
- */
- void setSpeedOfSound(float speed);
-
- /**
- * Retrieves the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \return The doppler factor.
- */
- float getDopplerFactor() const;
-
- /**
- * Sets the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \param factor The new doppler factor.
- */
- void setDopplerFactor(float factor);
-
- /**
- * Retrieves the distance model.
- * \return The distance model.
- */
- DistanceModel getDistanceModel() const;
-
- /**
- * Sets the distance model.
- * \param model distance model.
- */
- void setDistanceModel(DistanceModel model);
-
- /**
- * Retrieves one of the animated properties of the sound.
- * \param type Which animated property to retrieve.
- * \return A pointer to the animated property, valid as long as the
- * sound is.
- */
- AnimateableProperty* getAnimProperty(AnimateablePropertyType type);
-
- /**
- * Adds a new entry to the scene.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \return The entry added.
- */
- std::shared_ptr<SequenceEntry> add(std::shared_ptr<ISound> sound, float begin, float end, float skip);
-
- /**
- * Removes an entry from the scene.
- * \param entry The entry to remove.
- */
- void remove(std::shared_ptr<SequenceEntry> entry);
-
- /**
- * Creates a new reader with high quality resampling.
- * \return The new reader.
- */
- std::shared_ptr<IReader> createQualityReader();
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SequenceData.h b/extern/audaspace/include/sequence/SequenceData.h
deleted file mode 100644
index b3df0548a4d..00000000000
--- a/extern/audaspace/include/sequence/SequenceData.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*******************************************************************************
- * 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 SequenceData.h
- * @ingroup sequence
- * The SequenceData class.
- */
-
-#include "respec/Specification.h"
-#include "sequence/AnimateableProperty.h"
-#include "devices/I3DDevice.h"
-#include "util/ILockable.h"
-
-#include <list>
-#include <memory>
-#include <mutex>
-
-AUD_NAMESPACE_BEGIN
-
-class SequenceEntry;
-class ISound;
-
-/**
- * This class represents sequenced entries to play a sound scene.
- */
-class AUD_API SequenceData : public ILockable
-{
- friend class SequenceReader;
-private:
- /// The target specification.
- Specs m_specs;
-
- /// The status of the sequence. Changes every time a non-animated parameter changes.
- int m_status;
-
- /// The entry status. Changes every time an entry is removed or added.
- int m_entry_status;
-
- /// The next unused ID for the entries.
- int m_id;
-
- /// The sequenced entries.
- std::list<std::shared_ptr<SequenceEntry> > m_entries;
-
- /// Whether the whole scene is muted.
- bool m_muted;
-
- /// The FPS of the scene.
- float m_fps;
-
- /// Speed of Sound.
- float m_speed_of_sound;
-
- /// Doppler factor.
- float m_doppler_factor;
-
- /// Distance model.
- DistanceModel m_distance_model;
-
- /// The animated volume.
- AnimateableProperty m_volume;
-
- /// The animated listener location.
- AnimateableProperty m_location;
-
- /// The animated listener orientation.
- AnimateableProperty m_orientation;
-
- /// The mutex for locking.
- std::recursive_mutex m_mutex;
-
- // delete copy constructor and operator=
- SequenceData(const SequenceData&) = delete;
- SequenceData& operator=(const SequenceData&) = delete;
-
-public:
- /**
- * Creates a new sound scene.
- * \param specs The output audio data specification.
- * \param fps The FPS of the scene.
- * \param muted Whether the whole scene is muted.
- */
- SequenceData(Specs specs, float fps, bool muted);
- virtual ~SequenceData();
-
- /**
- * Locks the sequence.
- */
- virtual void lock();
-
- /**
- * Unlocks the previously locked sequence.
- */
- virtual void unlock();
-
- /**
- * Retrieves the audio output specification.
- * \return The specification.
- */
- Specs getSpecs();
-
- /**
- * Sets the audio output specification.
- * \param specs The new specification.
- */
- void setSpecs(Specs specs);
-
- /**
- * Retrieves the scene's FPS.
- * \return The scene's FPS.
- */
- float getFPS() const;
-
- /**
- * Sets the scene's FPS.
- * \param fps The new FPS.
- */
- void setFPS(float fps);
-
- /**
- * Sets the muting state of the scene.
- * \param muted Whether the scene is muted.
- */
- void mute(bool muted);
-
- /**
- * Retrieves the muting state of the scene.
- * \return Whether the scene is muted.
- */
- bool isMuted() const;
-
- /**
- * Retrieves the speed of sound.
- * This value is needed for doppler effect calculation.
- * \return The speed of sound.
- */
- float getSpeedOfSound() const;
-
- /**
- * Sets the speed of sound.
- * This value is needed for doppler effect calculation.
- * \param speed The new speed of sound.
- */
- void setSpeedOfSound(float speed);
-
- /**
- * Retrieves the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \return The doppler factor.
- */
- float getDopplerFactor() const;
-
- /**
- * Sets the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \param factor The new doppler factor.
- */
- void setDopplerFactor(float factor);
-
- /**
- * Retrieves the distance model.
- * \return The distance model.
- */
- DistanceModel getDistanceModel() const;
-
- /**
- * Sets the distance model.
- * \param model distance model.
- */
- void setDistanceModel(DistanceModel model);
-
- /**
- * Retrieves one of the animated properties of the sequence.
- * \param type Which animated property to retrieve.
- * \return A pointer to the animated property, valid as long as the
- * sequence is.
- */
- AnimateableProperty* getAnimProperty(AnimateablePropertyType type);
-
- /**
- * Adds a new entry to the scene.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \return The entry added.
- */
- std::shared_ptr<SequenceEntry> add(std::shared_ptr<ISound> sound, float begin, float end, float skip);
-
- /**
- * Removes an entry from the scene.
- * \param entry The entry to remove.
- */
- void remove(std::shared_ptr<SequenceEntry> entry);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SequenceEntry.h b/extern/audaspace/include/sequence/SequenceEntry.h
deleted file mode 100644
index 98f15faf7ff..00000000000
--- a/extern/audaspace/include/sequence/SequenceEntry.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/*******************************************************************************
- * 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 SequenceEntry.h
- * @ingroup sequence
- * The SequenceEntry class.
- */
-
-#include "sequence/AnimateableProperty.h"
-#include "util/ILockable.h"
-
-#include <mutex>
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class ISound;
-
-/**
- * This class represents a sequenced entry in a sequencer sound.
- */
-class AUD_API SequenceEntry : public ILockable
-{
- friend class SequenceHandle;
-private:
- /// The status of the entry. Changes every time a non-animated parameter changes.
- int m_status;
-
- /// The positional status of the entry. Changes every time the entry is moved.
- int m_pos_status;
-
- /// The sound status, changed when the sound is changed.
- int m_sound_status;
-
- /// The unique (regarding the sound) ID of the entry.
- int m_id;
-
- /// The sound this entry plays.
- std::shared_ptr<ISound> m_sound;
-
- /// The begin time.
- float m_begin;
-
- /// The end time.
- float m_end;
-
- /// How many seconds are skipped at the beginning.
- float m_skip;
-
- /// Whether the entry is muted.
- bool m_muted;
-
- /// Whether the position to the listener is relative or absolute
- bool m_relative;
-
- /// Maximum volume.
- float m_volume_max;
-
- /// Minimum volume.
- float m_volume_min;
-
- /// Maximum distance.
- float m_distance_max;
-
- /// Reference distance;
- float m_distance_reference;
-
- /// Attenuation
- float m_attenuation;
-
- /// Cone outer angle.
- float m_cone_angle_outer;
-
- /// Cone inner angle.
- float m_cone_angle_inner;
-
- /// Cone outer volume.
- float m_cone_volume_outer;
-
- /// The mutex for locking.
- std::recursive_mutex m_mutex;
-
- /// The animated volume.
- AnimateableProperty m_volume;
-
- /// The animated panning.
- AnimateableProperty m_panning;
-
- /// The animated pitch.
- AnimateableProperty m_pitch;
-
- /// The animated location.
- AnimateableProperty m_location;
-
- /// The animated orientation.
- AnimateableProperty m_orientation;
-
- // delete copy constructor and operator=
- SequenceEntry(const SequenceEntry&) = delete;
- SequenceEntry& operator=(const SequenceEntry&) = delete;
-
-public:
- /**
- * Creates a new sequenced entry.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \param id The ID of the entry.
- */
- SequenceEntry(std::shared_ptr<ISound> sound, float begin, float end, float skip, int id);
- virtual ~SequenceEntry();
-
- /**
- * Locks the entry.
- */
- virtual void lock();
-
- /**
- * Unlocks the previously locked entry.
- */
- virtual void unlock();
-
- /**
- * Retrieves the sound of the entry.
- * \return The sound.
- */
- std::shared_ptr<ISound> getSound();
-
- /**
- * Sets the sound of the entry.
- * \param sound The new sound.
- */
- void setSound(std::shared_ptr<ISound> sound);
-
- /**
- * Moves the entry.
- * \param begin The new start time.
- * \param end The new end time or a negative value if unknown.
- * \param skip How many seconds to skip at the beginning.
- */
- void move(float begin, float end, float skip);
-
- /**
- * Retrieves the muting state of the entry.
- * \return Whether the entry should is muted or not.
- */
- bool isMuted();
-
- /**
- * Sets the muting state of the entry.
- * \param mute Whether the entry should be muted or not.
- */
- void mute(bool mute);
-
- /**
- * Retrieves the ID of the entry.
- * \return The ID of the entry.
- */
- int getID() const;
-
- /**
- * Retrieves one of the animated properties of the entry.
- * \param type Which animated property to retrieve.
- * \return A pointer to the animated property, valid as long as the
- * entry is.
- */
- AnimateableProperty* getAnimProperty(AnimateablePropertyType type);
-
- /**
- * Checks whether the source location, velocity and orientation are relative
- * to the listener.
- * \return Whether the source is relative.
- */
- bool isRelative();
-
- /**
- * Sets whether the source location, velocity and orientation are relative
- * to the listener.
- * \param relative Whether the source is relative.
- * \return Whether the action succeeded.
- */
- void setRelative(bool relative);
-
- /**
- * Retrieves the maximum volume of a source.
- * \return The maximum volume.
- */
- float getVolumeMaximum();
-
- /**
- * Sets the maximum volume of a source.
- * \param volume The new maximum volume.
- * \return Whether the action succeeded.
- */
- void setVolumeMaximum(float volume);
-
- /**
- * Retrieves the minimum volume of a source.
- * \return The minimum volume.
- */
- float getVolumeMinimum();
-
- /**
- * Sets the minimum volume of a source.
- * \param volume The new minimum volume.
- * \return Whether the action succeeded.
- */
- void setVolumeMinimum(float volume);
-
- /**
- * Retrieves the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \return The maximum distance.
- */
- float getDistanceMaximum();
-
- /**
- * Sets the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \param distance The new maximum distance.
- * \return Whether the action succeeded.
- */
- void setDistanceMaximum(float distance);
-
- /**
- * Retrieves the reference distance of a source.
- * \return The reference distance.
- */
- float getDistanceReference();
-
- /**
- * Sets the reference distance of a source.
- * \param distance The new reference distance.
- * \return Whether the action succeeded.
- */
- void setDistanceReference(float distance);
-
- /**
- * Retrieves the attenuation of a source.
- * \return The attenuation.
- */
- float getAttenuation();
-
- /**
- * Sets the attenuation of a source.
- * This value is used for distance calculation.
- * \param factor The new attenuation.
- * \return Whether the action succeeded.
- */
- void setAttenuation(float factor);
-
- /**
- * Retrieves the outer angle of the cone of a source.
- * \return The outer angle of the cone.
- */
- float getConeAngleOuter();
-
- /**
- * Sets the outer angle of the cone of a source.
- * \param angle The new outer angle of the cone.
- * \return Whether the action succeeded.
- */
- void setConeAngleOuter(float angle);
-
- /**
- * Retrieves the inner angle of the cone of a source.
- * \return The inner angle of the cone.
- */
- float getConeAngleInner();
-
- /**
- * Sets the inner angle of the cone of a source.
- * \param angle The new inner angle of the cone.
- * \return Whether the action succeeded.
- */
- void setConeAngleInner(float angle);
-
- /**
- * Retrieves the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \return The outer volume of the cone.
- */
- float getConeVolumeOuter();
-
- /**
- * Sets the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \param volume The new outer volume of the cone.
- * \return Whether the action succeeded.
- */
- void setConeVolumeOuter(float volume);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SequenceReader.h b/extern/audaspace/include/sequence/SequenceReader.h
deleted file mode 100644
index 196d969e102..00000000000
--- a/extern/audaspace/include/sequence/SequenceReader.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * 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 SequenceReader.h
- * @ingroup sequence
- * The SequenceReader class.
- */
-
-#include "IReader.h"
-#include "devices/ReadDevice.h"
-
-AUD_NAMESPACE_BEGIN
-
-class SequenceHandle;
-class SequenceData;
-
-/**
- * This reader plays back sequenced entries.
- */
-class AUD_API SequenceReader : public IReader
-{
-private:
- /**
- * The current position.
- */
- int m_position;
-
- /**
- * The read device used to mix the sounds correctly.
- */
- ReadDevice m_device;
-
- /**
- * Saves the sequence the reader belongs to.
- */
- std::shared_ptr<SequenceData> m_sequence;
-
- /**
- * The list of playback handles for the entries.
- */
- std::list<std::shared_ptr<SequenceHandle> > m_handles;
-
- /**
- * Last status read from the sequence.
- */
- int m_status;
-
- /**
- * Last entry status read from the sequence.
- */
- int m_entry_status;
-
- // delete copy constructor and operator=
- SequenceReader(const SequenceReader&) = delete;
- SequenceReader& operator=(const SequenceReader&) = delete;
-
-public:
- /**
- * Creates a resampling reader.
- * \param sequence The sequence data.
- * \param quality Whether a high quality resample should be used for resampling.
- */
- SequenceReader(std::shared_ptr<SequenceData> sequence, bool quality = false);
-
- /**
- * Destroys the reader.
- */
- ~SequenceReader();
-
- 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/extern/audaspace/include/sequence/Superpose.h b/extern/audaspace/include/sequence/Superpose.h
deleted file mode 100644
index 2a3a6166b3b..00000000000
--- a/extern/audaspace/include/sequence/Superpose.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * 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 Superpose.h
- * @ingroup sequence
- * The Superpose class.
- */
-
-#include "ISound.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This sound mixes two other factories, playing them the same time.
- * \note Readers from the underlying factories must have the same sample rate
- * and channel count.
- */
-class AUD_API Superpose : public ISound
-{
-private:
- /**
- * First played sound.
- */
- std::shared_ptr<ISound> m_sound1;
-
- /**
- * Second played sound.
- */
- std::shared_ptr<ISound> m_sound2;
-
- // delete copy constructor and operator=
- Superpose(const Superpose&) = delete;
- Superpose& operator=(const Superpose&) = delete;
-
-public:
- /**
- * Creates a new superpose sound.
- * \param sound1 The first input sound.
- * \param sound2 The second input sound.
- */
- Superpose(std::shared_ptr<ISound> sound1, std::shared_ptr<ISound> sound2);
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SuperposeReader.h b/extern/audaspace/include/sequence/SuperposeReader.h
deleted file mode 100644
index 8bd38ade4c3..00000000000
--- a/extern/audaspace/include/sequence/SuperposeReader.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * 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 SuperposeReader.h
- * @ingroup sequence
- * The SuperposeReader class.
- */
-
-#include "IReader.h"
-#include "util/Buffer.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This reader plays two readers with the same specs in parallel.
- */
-class AUD_API SuperposeReader : public IReader
-{
-private:
- /**
- * The first reader.
- */
- std::shared_ptr<IReader> m_reader1;
-
- /**
- * The second reader.
- */
- std::shared_ptr<IReader> m_reader2;
-
- /**
- * Buffer used for mixing.
- */
- Buffer m_buffer;
-
- // delete copy constructor and operator=
- SuperposeReader(const SuperposeReader&) = delete;
- SuperposeReader& operator=(const SuperposeReader&) = delete;
-
-public:
- /**
- * Creates a new superpose 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.
- */
- SuperposeReader(std::shared_ptr<IReader> reader1, std::shared_ptr<IReader> reader2);
-
- /**
- * Destroys the reader.
- */
- virtual ~SuperposeReader();
-
- 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/extern/audaspace/include/util/Barrier.h b/extern/audaspace/include/util/Barrier.h
deleted file mode 100644
index d9e8bf07f82..00000000000
--- a/extern/audaspace/include/util/Barrier.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 Barrier.h
-* @ingroup util
-* The Barrier class.
-*/
-
-#include "Audaspace.h"
-
-#include <mutex>
-#include <condition_variable>
-
-AUD_NAMESPACE_BEGIN
-/**
-* This represents a barrier mechanism for thread sychronization.
-*/
-class Barrier
-{
-private:
- /**
- * A mutex needed to use a condition variable.
- */
- std::mutex m_mutex;
-
- /**
- * Condition varieble used to sync threads.
- */
- std::condition_variable m_condition;
-
- /**
- * Number of threads that need to reach the barrier for it to lift.
- */
- unsigned int m_threshold;
-
- /**
- * Conter that count from threshold to 0.
- */
- unsigned int m_count;
-
- /**
- * Variable used for predicate check in the condition variable wait.
- */
- unsigned int m_generation;
-
- // delete copy constructor and operator=
- Barrier(const Barrier&) = delete;
- Barrier& operator=(const Barrier&) = delete;
-public:
- /**
- * Creates a new Barrier object.
- * \param count the number of threads that need to reach the barrier for it to lift.
- */
- Barrier(unsigned int count);
- virtual ~Barrier();
-
- /**
- * Makes the caller thread wait until enough threads are stopped by this method.
- */
- void wait();
-};
-AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/util/Buffer.h b/extern/audaspace/include/util/Buffer.h
deleted file mode 100644
index 9934e53625e..00000000000
--- a/extern/audaspace/include/util/Buffer.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * 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 Buffer.h
- * @ingroup util
- * The Buffer class.
- */
-
-#include "Audaspace.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class is a simple buffer in RAM which is 32 Byte aligned and provides
- * resize functionality.
- */
-class AUD_API Buffer
-{
-private:
- /// The size of the buffer in bytes.
- int m_size;
-
- /// The pointer to the buffer memory.
- data_t* m_buffer;
-
- // delete copy constructor and operator=
- Buffer(const Buffer&) = delete;
- Buffer& operator=(const Buffer&) = delete;
-
-public:
- /**
- * Creates a new buffer.
- * \param size The size of the buffer in bytes.
- */
- Buffer(int size = 0);
-
- /**
- * Destroys the buffer.
- */
- ~Buffer();
-
- /**
- * Returns the pointer to the buffer in memory.
- */
- sample_t* getBuffer() const;
-
- /**
- * Returns the size of the buffer in bytes.
- */
- int getSize() const;
-
- /**
- * Resizes the buffer.
- * \param size The new size of the buffer, measured in bytes.
- * \param keep Whether to keep the old data. If the new buffer is smaller,
- * the data at the end will be lost.
- */
- void resize(int size, bool keep = false);
-
- /**
- * Makes sure the buffer has a minimum size.
- * If size is >= current size, nothing will happen.
- * Otherwise the buffer is resized with keep as parameter.
- * \param size The new minimum size of the buffer, measured in bytes.
- * \param keep Whether to keep the old data. If the new buffer is smaller,
- * the data at the end will be lost.
- */
- void assureSize(int size, bool keep = false);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/BufferReader.h b/extern/audaspace/include/util/BufferReader.h
deleted file mode 100644
index b98313726bc..00000000000
--- a/extern/audaspace/include/util/BufferReader.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * 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 BufferReader.h
- * @ingroup util
- * The BufferReader class.
- */
-
-#include "IReader.h"
-
-#include <memory>
-
-AUD_NAMESPACE_BEGIN
-
-class Buffer;
-
-/**
- * This class represents a simple reader from a buffer that exists in memory.
- * \warning Notice that the buffer is not multi-threading ready, so changing the
- * buffer while the reader is reading is potentially dangerous.
- */
-class AUD_API BufferReader : public IReader
-{
-private:
- /**
- * The current position in the buffer.
- */
- int m_position;
-
- /**
- * The buffer that is read.
- */
- std::shared_ptr<Buffer> m_buffer;
-
- /**
- * The specification of the sample data in the buffer.
- */
- Specs m_specs;
-
- // delete copy constructor and operator=
- BufferReader(const BufferReader&) = delete;
- BufferReader& operator=(const BufferReader&) = delete;
-
-public:
- /**
- * Creates a new buffer reader.
- * \param buffer The buffer to read from.
- * \param specs The specification of the sample data in the buffer.
- */
- BufferReader(std::shared_ptr<Buffer> buffer, Specs specs);
-
- 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/extern/audaspace/include/util/FFTPlan.h b/extern/audaspace/include/util/FFTPlan.h
deleted file mode 100644
index 7d533ca8773..00000000000
--- a/extern/audaspace/include/util/FFTPlan.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 FFTPlan.h
-* @ingroup util
-* The FFTPlan class.
-*/
-
-#include <complex>
-#include <fftw3.h>
-#include "Audaspace.h"
-
-#include <memory>
-#include <vector>
-
-/**Default FFT size.*/
-#define DEFAULT_N 4096
-
-AUD_NAMESPACE_BEGIN
-
-/**
-* Thas class represents an plan object that allows to calculate FFTs and IFFTs.
-*/
-class AUD_API FFTPlan
-{
-private:
- /**
- * The size of the FFT plan.
- */
- int m_N;
-
- /**
- * The plan to transform the input to the frequency domain.
- */
- fftwf_plan m_fftPlanR2C;
-
- /**
- * The plan to transform the input to the time domain again.
- */
- fftwf_plan m_fftPlanC2R;
-
- /**
- * The size of a buffer for its use with the FFT plan (in bytes).
- */
- unsigned int m_bufferSize;
-
- // delete copy constructor and operator=
- FFTPlan(const FFTPlan&) = delete;
- FFTPlan& operator=(const FFTPlan&) = delete;
-
-public:
- /**
- * Creates a new FFTPlan object with DEFAULT_N size (4096).
- * \param measureTime The aproximate amount of seconds that FFTW will spend searching for the optimal plan,
- * which means faster FFTs and IFFTs while using this plan. If measureTime is negative, it will take all the time it needs.
- */
- FFTPlan(double measureTime = 0);
-
- /**
- * Creates a new FFTPlan object with a custom size.
- * \param n The size of the FFT plan. Values that are a power of two are faster.
- * The useful range usually is between 2048 and 8192, but bigger values can be useful
- * in certain situations (when using the StreamBuffer class per example).
- * Generally, low values use more CPU power and are a bit faster than large ones,
- * there is also a huge decrease in efficiency when n is lower than 2048.
- * \param measureTime The aproximate amount of seconds that FFTW will spend searching for the optimal plan,
- * which means faster FFTs while using this plan. If measureTime is negative, it will take all the time it needs.
- */
- FFTPlan(int n, double measureTime = 0);
- ~FFTPlan();
-
- /**
- * Retrieves the size of the FFT plan.
- * \return The size of the plan.
- */
- int getSize();
-
- /**
- * Calculates the FFT of an input buffer with the current plan.
- * \param[in,out] buffer A buffer with the input data an in which the output data will be written.
- */
- void FFT(void* buffer);
-
- /**
- * Calculates the IFFT of an input buffer with the current plan.
- * \param[in,out] buffer A buffer with the input data an in which the output data will be written.
- */
- void IFFT(void* buffer);
-
- /**
- * Reserves memory for a buffer that can be used for inplace transformations with this plan.
- * \return A pointer to a buffer of size ((N/2)+1)*2*sizeof(fftwf_complex).
- * \warning The returned buffer must be freed with the freeBuffer method of this class.
- */
- void* getBuffer();
-
- /**
- * Frees one of the buffers reserved with the getRealOnlyBuffer(), getComplexOnlyBuffer() or getInplaceBuffer() method.
- * \param buffer A pointer to the buufer taht must be freed.
- */
- void freeBuffer(void* buffer);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/ILockable.h b/extern/audaspace/include/util/ILockable.h
deleted file mode 100644
index 8300fbd2845..00000000000
--- a/extern/audaspace/include/util/ILockable.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * 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 ILockable.h
- * @ingroup util
- * The ILockable interface.
- */
-
-#include "Audaspace.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * @interface ILockable
- * This class provides an interface for lockable objects.
- */
-class AUD_API ILockable
-{
-public:
- /**
- * Locks the object.
- */
- virtual void lock()=0;
- /**
- * Unlocks the previously locked object.
- */
- virtual void unlock()=0;
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/Math3D.h b/extern/audaspace/include/util/Math3D.h
deleted file mode 100644
index 7ded12c1ba8..00000000000
--- a/extern/audaspace/include/util/Math3D.h
+++ /dev/null
@@ -1,324 +0,0 @@
-/*******************************************************************************
- * 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 Math3D.h
- * @ingroup util
- * Defines the Vector3 and Quaternion classes.
- */
-
-#include "Audaspace.h"
-
-#include <cmath>
-#include <cstring>
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class represents a 3 dimensional vector.
- */
-class AUD_API Vector3
-{
-private:
- /**
- * The vector components.
- */
- union
- {
- float m_v[3];
- struct
- {
- float m_x;
- float m_y;
- float m_z;
- };
- };
-
-public:
- /**
- * Creates a new 3 dimensional vector.
- * \param x The x component.
- * \param y The y component.
- * \param z The z component.
- */
- inline Vector3(float x = 0, float y = 0, float z = 0) :
- m_x(x), m_y(y), m_z(z)
- {
- }
-
- /**
- * Retrieves the x component of the vector.
- * \return The x component.
- */
- inline const float& x() const
- {
- return m_x;
- }
-
- /**
- * Retrieves the y component of the vector.
- * \return The y component.
- */
- inline const float& y() const
- {
- return m_y;
- }
-
- /**
- * Retrieves the z component of the vector.
- * \return The z component.
- */
- inline const float& z() const
- {
- return m_z;
- }
-
- /**
- * Retrieves the components of the vector.
- * \param destination Where the 3 float values should be saved to.
- */
- inline void get(float* destination) const
- {
- std::memcpy(destination, m_v, sizeof(m_v));
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[3].
- */
- inline float* get()
- {
- return m_v;
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[3].
- */
- inline const float* get() const
- {
- return m_v;
- }
-
- /**
- * Retrieves the length of the vector.
- * \return The length of the vector.
- */
- inline float length() const
- {
- return std::sqrt(m_x*m_x + m_y*m_y + m_z*m_z);
- }
-
- /**
- * Retrieves the cross product.
- * \param op The second operand.
- * \return The cross product of the two vectors.
- */
- inline Vector3 cross(const Vector3& op) const
- {
- return Vector3(m_y * op.m_z - m_z * op.m_y,
- m_z * op.m_x - m_x * op.m_z,
- m_x * op.m_y - m_y * op.m_x);
- }
-
- /**
- * Retrieves the dot product.
- * \param op The second operand.
- * \return The dot product of the two vectors.
- */
- inline float operator*(const Vector3& op) const
- {
- return m_x * op.m_x + m_y * op.m_y + m_z * op.m_z;
- }
-
- /**
- * Retrieves the product with a scalar.
- * \param op The second operand.
- * \return The scaled vector.
- */
- inline Vector3 operator*(const float& op) const
- {
- return Vector3(m_x * op, m_y * op, m_z * op);
- }
-
- /**
- * Adds two vectors.
- * \param op The second operand.
- * \return The sum vector.
- */
- inline Vector3 operator+(const Vector3& op) const
- {
- return Vector3(m_x + op.m_x, m_y + op.m_y, m_z + op.m_z);
- }
-
- /**
- * Subtracts two vectors.
- * \param op The second operand.
- * \return The difference vector.
- */
- inline Vector3 operator-(const Vector3& op) const
- {
- return Vector3(m_x - op.m_x, m_y - op.m_y, m_z - op.m_z);
- }
-
- /**
- * Negates the vector.
- * \return The vector facing in the opposite direction.
- */
- inline Vector3 operator-() const
- {
- return Vector3(-m_x, -m_y, -m_z);
- }
-
- /**
- * Subtracts the second vector.
- * \param op The second operand.
- * \return The difference vector.
- */
- inline Vector3& operator-=(const Vector3& op)
- {
- m_x -= op.m_x;
- m_y -= op.m_y;
- m_z -= op.m_z;
- return *this;
- }
-};
-
-/**
- * This class represents a quaternion used for 3D rotations.
- */
-class AUD_API Quaternion
-{
-private:
- /**
- * The quaternion components.
- */
- union
- {
- float m_v[4];
- struct
- {
- float m_w;
- float m_x;
- float m_y;
- float m_z;
- };
- };
-
-public:
- /**
- * Creates a new quaternion.
- * \param w The w component.
- * \param x The x component.
- * \param y The y component.
- * \param z The z component.
- */
- inline Quaternion(float w = 1, float x = 0, float y = 0, float z = 0) :
- m_w(w), m_x(x), m_y(y), m_z(z)
- {
- }
-
- /**
- * Retrieves the w component of the quarternion.
- * \return The w component.
- */
- inline const float& w() const
- {
- return m_w;
- }
-
- /**
- * Retrieves the x component of the quarternion.
- * \return The x component.
- */
- inline const float& x() const
- {
- return m_x;
- }
-
- /**
- * Retrieves the y component of the quarternion.
- * \return The y component.
- */
- inline const float& y() const
- {
- return m_y;
- }
-
- /**
- * Retrieves the z component of the quarternion.
- * \return The z component.
- */
- inline const float& z() const
- {
- return m_z;
- }
-
- /**
- * Retrieves the components of the vector.
- * \param destination Where the 4 float values should be saved to.
- */
- inline void get(float* destination) const
- {
- std::memcpy(destination, m_v, sizeof(m_v));
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[4].
- */
- inline float* get()
- {
- return m_v;
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[4].
- */
- inline const float* get() const
- {
- return m_v;
- }
-
- /**
- * When the quaternion represents an orientation, this returns the negative
- * z axis vector.
- * \return The negative z axis vector.
- */
- inline Vector3 getLookAt() const
- {
- return Vector3(-2 * (m_w * m_y + m_x * m_z),
- 2 * (m_x * m_w - m_z * m_y),
- 2 * (m_x * m_x + m_y * m_y) - 1);
- }
-
- /**
- * When the quaternion represents an orientation, this returns the y axis
- * vector.
- * \return The y axis vector.
- */
- inline Vector3 getUp() const
- {
- return Vector3(2 * (m_x * m_y - m_w * m_z),
- 1 - 2 * (m_x * m_x + m_z * m_z),
- 2 * (m_w * m_x + m_y * m_z));
- }
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/StreamBuffer.h b/extern/audaspace/include/util/StreamBuffer.h
deleted file mode 100644
index 8ec4cfcf46d..00000000000
--- a/extern/audaspace/include/util/StreamBuffer.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * 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 StreamBuffer.h
- * @ingroup util
- * The StreamBuffer class.
- */
-
-#include "ISound.h"
-#include "respec/Specification.h"
-
-AUD_NAMESPACE_BEGIN
-
-class Buffer;
-
-/**
- * This sound creates a buffer out of a reader. This way normally streamed
- * sound sources can be loaded into memory for buffered playback.
- */
-class AUD_API StreamBuffer : public ISound
-{
-private:
- /**
- * The buffer that holds the audio data.
- */
- std::shared_ptr<Buffer> m_buffer;
-
- /**
- * The specification of the samples.
- */
- Specs m_specs;
-
- // delete copy constructor and operator=
- StreamBuffer(const StreamBuffer&) = delete;
- StreamBuffer& operator=(const StreamBuffer&) = delete;
-
-public:
- /**
- * Creates the sound and reads the reader created by the sound supplied
- * to the buffer.
- * \param sound The sound that creates the reader for buffering.
- * \exception Exception Thrown if the reader cannot be created.
- */
- StreamBuffer(std::shared_ptr<ISound> sound);
-
- /**
- * Creates the sound from an preexisting buffer.
- * \param buffer The buffer to stream from.
- * \param specs The specification of the data in the buffer.
- * \exception Exception Thrown if the reader cannot be created.
- */
- StreamBuffer(std::shared_ptr<Buffer> buffer, Specs specs);
-
- /**
- * Returns the buffer to be streamed.
- * @return The buffer to stream.
- */
- std::shared_ptr<Buffer> getBuffer();
-
- /**
- * Returns the specification of the buffer.
- * @return The specification of the buffer.
- */
- Specs getSpecs();
-
- virtual std::shared_ptr<IReader> createReader();
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/ThreadPool.h b/extern/audaspace/include/util/ThreadPool.h
deleted file mode 100644
index 24ec089d52c..00000000000
--- a/extern/audaspace/include/util/ThreadPool.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
-* Copyright 2015-2016 Juan Francisco Crespo Galán
-*
-* 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 ThreadPool.h
-* @ingroup util
-* The ThreadPool class.
-*/
-
-#include "Audaspace.h"
-
-#include <mutex>
-#include <condition_variable>
-#include <vector>
-#include <thread>
-#include <queue>
-#include <future>
-#include <functional>
-
-AUD_NAMESPACE_BEGIN
-/**
-* This represents pool of threads.
-*/
-class AUD_API ThreadPool
-{
-private:
- /**
- * A queue of tasks.
- */
- std::queue<std::function<void()>> m_queue;
-
- /**
- * A vector of thread objects.
- */
- std::vector<std::thread> m_threads;
-
- /**
- * A mutex for synchronization.
- */
- std::mutex m_mutex;
-
- /**
- * A condition variable used to stop the threads when there are no tasks.
- */
- std::condition_variable m_condition;
-
- /**
- * Stop flag.
- */
- bool m_stopFlag;
-
- /**
- * The number fo threads.
- */
- unsigned int m_numThreads;
-
- // delete copy constructor and operator=
- ThreadPool(const ThreadPool&) = delete;
- ThreadPool& operator=(const ThreadPool&) = delete;
-public:
- /**
- * Creates a new ThreadPool object.
- * \param count The number of threads of the pool. It must not be 0.
- */
- ThreadPool(unsigned int count);
-
- virtual ~ThreadPool();
-
- /**
- * Enqueues a new task for the threads to realize.
- * \param t A function that realices a task.
- * \param args The arguments of the task.
- * \return A future of the same type as the return type of the task.
- */
- template<class T, class... Args>
- std::future<typename std::result_of<T(Args...)>::type> enqueue(T&& t, Args&&... args)
- {
- using pkgdTask = std::packaged_task<typename std::result_of<T(Args...)>::type()>;
-
- std::shared_ptr<pkgdTask> task = std::make_shared<pkgdTask>(std::bind(std::forward<T>(t), std::forward<Args>(args)...));
- auto result = task->get_future();
-
- m_mutex.lock();
- m_queue.emplace([task]() { (*task)(); });
- m_mutex.unlock();
-
- m_condition.notify_one();
- return result;
- }
-
- /**
- * Retrieves the number of threads of the pool.
- * \return The number of threads.
- */
- unsigned int getNumOfThreads();
-
-private:
-
- /**
- * Worker thread function.
- */
- void threadFunction();
-};
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEG.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEG.cpp
deleted file mode 100644
index 7f9b762f816..00000000000
--- a/extern/audaspace/plugins/ffmpeg/FFMPEG.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * 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 "FFMPEG.h"
-#include "FFMPEGReader.h"
-#include "FFMPEGWriter.h"
-#include "file/FileManager.h"
-
-AUD_NAMESPACE_BEGIN
-
-FFMPEG::FFMPEG()
-{
- av_register_all();
-}
-
-void FFMPEG::registerPlugin()
-{
- std::shared_ptr<FFMPEG> plugin = std::shared_ptr<FFMPEG>(new FFMPEG);
- FileManager::registerInput(plugin);
- FileManager::registerOutput(plugin);
-}
-
-std::shared_ptr<IReader> FFMPEG::createReader(std::string filename)
-{
- return std::shared_ptr<IReader>(new FFMPEGReader(filename));
-}
-
-std::shared_ptr<IReader> FFMPEG::createReader(std::shared_ptr<Buffer> buffer)
-{
- return std::shared_ptr<IReader>(new FFMPEGReader(buffer));
-}
-
-std::shared_ptr<IWriter> FFMPEG::createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)
-{
- return std::shared_ptr<IWriter>(new FFMPEGWriter(filename, specs, format, codec, bitrate));
-}
-
-#ifdef FFMPEG_PLUGIN
-extern "C" AUD_PLUGIN_API void registerPlugin()
-{
- FFMPEG::registerPlugin();
-}
-
-extern "C" AUD_PLUGIN_API const char* getName()
-{
- return "FFMPEG";
-}
-#endif
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEG.h b/extern/audaspace/plugins/ffmpeg/FFMPEG.h
deleted file mode 100644
index 108ba547e0f..00000000000
--- a/extern/audaspace/plugins/ffmpeg/FFMPEG.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * 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
-
-#ifdef FFMPEG_PLUGIN
-#define AUD_BUILD_PLUGIN
-#endif
-
-/**
- * @file FFMPEG.h
- * @ingroup plugin
- * The FFMPEG class.
- */
-
-#include "file/IFileInput.h"
-#include "file/IFileOutput.h"
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This plugin class reads and writes sounds via ffmpeg.
- */
-class AUD_PLUGIN_API FFMPEG : public IFileInput, public IFileOutput
-{
-private:
- // delete copy constructor and operator=
- FFMPEG(const FFMPEG&) = delete;
- FFMPEG& operator=(const FFMPEG&) = delete;
-
-public:
- /**
- * Creates a new ffmpeg plugin.
- */
- FFMPEG();
-
- /**
- * Registers this plugin.
- */
- static void registerPlugin();
-
- virtual std::shared_ptr<IReader> createReader(std::string filename);
- virtual std::shared_ptr<IReader> createReader(std::shared_ptr<Buffer> buffer);
- virtual std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
-};
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
deleted file mode 100644
index 6b79cc5abfd..00000000000
--- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
+++ /dev/null
@@ -1,397 +0,0 @@
-/*******************************************************************************
- * 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 "FFMPEGReader.h"
-#include "Exception.h"
-
-#include <algorithm>
-
-extern "C" {
-#include <libavcodec/avcodec.h>
-#include <libavformat/avio.h>
-}
-
-AUD_NAMESPACE_BEGIN
-
-int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer)
-{
- AVFrame* frame = nullptr;
- int got_frame;
- int read_length;
- uint8_t* orig_data = packet.data;
- int orig_size = packet.size;
-
- int buf_size = buffer.getSize();
- int buf_pos = 0;
-
- while(packet.size > 0)
- {
- got_frame = 0;
-
- if(!frame)
- frame = av_frame_alloc();
- else
- av_frame_unref(frame);
-
- read_length = avcodec_decode_audio4(m_codecCtx, frame, &got_frame, &packet);
- if(read_length < 0)
- break;
-
- if(got_frame)
- {
- int data_size = av_samples_get_buffer_size(nullptr, m_codecCtx->channels, frame->nb_samples, m_codecCtx->sample_fmt, 1);
-
- if(buf_size - buf_pos < data_size)
- {
- buffer.resize(buf_size + data_size, true);
- buf_size += data_size;
- }
-
- if(m_tointerleave)
- {
- int single_size = data_size / m_codecCtx->channels / frame->nb_samples;
- for(int channel = 0; channel < m_codecCtx->channels; channel++)
- {
- for(int i = 0; i < frame->nb_samples; i++)
- {
- std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((m_codecCtx->channels * i) + channel) * single_size,
- frame->data[channel] + i * single_size, single_size);
- }
- }
- }
- else
- std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos, frame->data[0], data_size);
-
- buf_pos += data_size;
- }
- packet.size -= read_length;
- packet.data += read_length;
- }
-
- packet.data = orig_data;
- packet.size = orig_size;
- av_free(frame);
-
- return buf_pos;
-}
-
-void FFMPEGReader::init()
-{
- m_position = 0;
- m_pkgbuf_left = 0;
-
- if(avformat_find_stream_info(m_formatCtx, nullptr) < 0)
- AUD_THROW(FileException, "File couldn't be read, ffmpeg couldn't find the stream info.");
-
- // find audio stream and codec
- m_stream = -1;
-
- for(unsigned int i = 0; i < m_formatCtx->nb_streams; i++)
- {
- if((m_formatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
- && (m_stream < 0))
- {
- m_stream=i;
- break;
- }
- }
-
- if(m_stream == -1)
- AUD_THROW(FileException, "File couldn't be read, no audio stream found by ffmpeg.");
-
- m_codecCtx = m_formatCtx->streams[m_stream]->codec;
-
- // get a decoder and open it
- AVCodec* aCodec = avcodec_find_decoder(m_codecCtx->codec_id);
- if(!aCodec)
- AUD_THROW(FileException, "File couldn't be read, no decoder found with ffmpeg.");
-
- if(avcodec_open2(m_codecCtx, aCodec, nullptr) < 0)
- AUD_THROW(FileException, "File couldn't be read, ffmpeg codec couldn't be opened.");
-
- m_specs.channels = (Channels) m_codecCtx->channels;
- m_tointerleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
-
- switch(av_get_packed_sample_fmt(m_codecCtx->sample_fmt))
- {
- case AV_SAMPLE_FMT_U8:
- m_convert = convert_u8_float;
- m_specs.format = FORMAT_U8;
- break;
- case AV_SAMPLE_FMT_S16:
- m_convert = convert_s16_float;
- m_specs.format = FORMAT_S16;
- break;
- case AV_SAMPLE_FMT_S32:
- m_convert = convert_s32_float;
- m_specs.format = FORMAT_S32;
- break;
- case AV_SAMPLE_FMT_FLT:
- m_convert = convert_copy<float>;
- m_specs.format = FORMAT_FLOAT32;
- break;
- case AV_SAMPLE_FMT_DBL:
- m_convert = convert_double_float;
- m_specs.format = FORMAT_FLOAT64;
- break;
- default:
- AUD_THROW(FileException, "File couldn't be read, ffmpeg sample format unknown.");
- }
-
- m_specs.rate = (SampleRate) m_codecCtx->sample_rate;
-}
-
-FFMPEGReader::FFMPEGReader(std::string filename) :
- m_pkgbuf(),
- m_formatCtx(nullptr),
- m_aviocontext(nullptr),
- m_membuf(nullptr)
-{
- // open file
- if(avformat_open_input(&m_formatCtx, filename.c_str(), nullptr, nullptr)!=0)
- AUD_THROW(FileException, "File couldn't be opened with ffmpeg.");
-
- try
- {
- init();
- }
- catch(Exception&)
- {
- avformat_close_input(&m_formatCtx);
- throw;
- }
-}
-
-FFMPEGReader::FFMPEGReader(std::shared_ptr<Buffer> buffer) :
- m_pkgbuf(),
- m_membuffer(buffer),
- m_membufferpos(0)
-{
- m_membuf = reinterpret_cast<data_t*>(av_malloc(FF_MIN_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE));
-
- m_aviocontext = avio_alloc_context(m_membuf, FF_MIN_BUFFER_SIZE, 0, this, read_packet, nullptr, seek_packet);
-
- if(!m_aviocontext)
- {
- av_free(m_aviocontext);
- AUD_THROW(FileException, "Buffer reading context couldn't be created with ffmpeg.");
- }
-
- m_formatCtx = avformat_alloc_context();
- m_formatCtx->pb = m_aviocontext;
- if(avformat_open_input(&m_formatCtx, "", nullptr, nullptr)!=0)
- {
- av_free(m_aviocontext);
- AUD_THROW(FileException, "Buffer couldn't be read with ffmpeg.");
- }
-
- try
- {
- init();
- }
- catch(Exception&)
- {
- avformat_close_input(&m_formatCtx);
- av_free(m_aviocontext);
- throw;
- }
-}
-
-FFMPEGReader::~FFMPEGReader()
-{
- avcodec_close(m_codecCtx);
- avformat_close_input(&m_formatCtx);
-}
-
-int FFMPEGReader::read_packet(void* opaque, uint8_t* buf, int buf_size)
-{
- FFMPEGReader* reader = reinterpret_cast<FFMPEGReader*>(opaque);
-
- int size = std::min(buf_size, int(reader->m_membuffer->getSize() - reader->m_membufferpos));
-
- if(size < 0)
- return -1;
-
- std::memcpy(buf, ((data_t*)reader->m_membuffer->getBuffer()) + reader->m_membufferpos, size);
- reader->m_membufferpos += size;
-
- return size;
-}
-
-int64_t FFMPEGReader::seek_packet(void* opaque, int64_t offset, int whence)
-{
- FFMPEGReader* reader = reinterpret_cast<FFMPEGReader*>(opaque);
-
- switch(whence)
- {
- case SEEK_SET:
- reader->m_membufferpos = 0;
- break;
- case SEEK_END:
- reader->m_membufferpos = reader->m_membuffer->getSize();
- break;
- case AVSEEK_SIZE:
- return reader->m_membuffer->getSize();
- }
-
- return (reader->m_membufferpos += offset);
-}
-
-bool FFMPEGReader::isSeekable() const
-{
- return true;
-}
-
-void FFMPEGReader::seek(int position)
-{
- if(position >= 0)
- {
- uint64_t st_time = m_formatCtx->start_time;
- uint64_t seek_pos = ((uint64_t)position) * ((uint64_t)AV_TIME_BASE) / ((uint64_t)m_specs.rate);
-
- if(st_time != AV_NOPTS_VALUE) {
- seek_pos += st_time;
- }
-
- double pts_time_base =
- av_q2d(m_formatCtx->streams[m_stream]->time_base);
- uint64_t pts_st_time =
- ((st_time != AV_NOPTS_VALUE) ? st_time : 0)
- / pts_time_base / (uint64_t) AV_TIME_BASE;
-
- // a value < 0 tells us that seeking failed
- if(av_seek_frame(m_formatCtx, -1, seek_pos,
- AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0)
- {
- avcodec_flush_buffers(m_codecCtx);
- m_position = position;
-
- AVPacket packet;
- bool search = true;
-
- while(search && av_read_frame(m_formatCtx, &packet) >= 0)
- {
- // is it a frame from the audio stream?
- if(packet.stream_index == m_stream)
- {
- // decode the package
- m_pkgbuf_left = decode(packet, m_pkgbuf);
- search = false;
-
- // check position
- if(packet.pts != AV_NOPTS_VALUE)
- {
- // calculate real position, and read to frame!
- m_position = (packet.pts - pts_st_time) * pts_time_base * m_specs.rate;
-
- if(m_position < position)
- {
- // read until we're at the right position
- int length = AUD_DEFAULT_BUFFER_SIZE;
- Buffer buffer(length * AUD_SAMPLE_SIZE(m_specs));
- bool eos;
- for(int len = position - m_position; len > 0; len -= AUD_DEFAULT_BUFFER_SIZE)
- {
- if(len < AUD_DEFAULT_BUFFER_SIZE)
- length = len;
- read(length, eos, buffer.getBuffer());
- }
- }
- }
- }
- av_free_packet(&packet);
- }
- }
- else
- {
- fprintf(stderr, "seeking failed!\n");
- // Seeking failed, do nothing.
- }
- }
-}
-
-int FFMPEGReader::getLength() const
-{
- // return approximated remaning size
- return (int)((m_formatCtx->duration * m_codecCtx->sample_rate)
- / AV_TIME_BASE)-m_position;
-}
-
-int FFMPEGReader::getPosition() const
-{
- return m_position;
-}
-
-Specs FFMPEGReader::getSpecs() const
-{
- return m_specs.specs;
-}
-
-void FFMPEGReader::read(int& length, bool& eos, sample_t* buffer)
-{
- // read packages and decode them
- AVPacket packet;
- int data_size = 0;
- int pkgbuf_pos;
- int left = length;
- int sample_size = AUD_DEVICE_SAMPLE_SIZE(m_specs);
-
- sample_t* buf = buffer;
- pkgbuf_pos = m_pkgbuf_left;
- m_pkgbuf_left = 0;
-
- // there may still be data in the buffer from the last call
- if(pkgbuf_pos > 0)
- {
- data_size = std::min(pkgbuf_pos, left * sample_size);
- m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(), data_size / AUD_FORMAT_SIZE(m_specs.format));
- buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
- left -= data_size/sample_size;
- }
-
- // for each frame read as long as there isn't enough data already
- while((left > 0) && (av_read_frame(m_formatCtx, &packet) >= 0))
- {
- // is it a frame from the audio stream?
- if(packet.stream_index == m_stream)
- {
- // decode the package
- pkgbuf_pos = decode(packet, m_pkgbuf);
-
- // copy to output buffer
- data_size = std::min(pkgbuf_pos, left * sample_size);
- m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(), data_size / AUD_FORMAT_SIZE(m_specs.format));
- buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
- left -= data_size/sample_size;
- }
- av_free_packet(&packet);
- }
- // read more data than necessary?
- if(pkgbuf_pos > data_size)
- {
- m_pkgbuf_left = pkgbuf_pos-data_size;
- memmove(m_pkgbuf.getBuffer(),
- ((data_t*)m_pkgbuf.getBuffer())+data_size,
- pkgbuf_pos-data_size);
- }
-
- if((eos = (left > 0)))
- length -= left;
-
- m_position += length;
-}
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h
deleted file mode 100644
index e2ae959912d..00000000000
--- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*******************************************************************************
- * 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
-
-#ifdef FFMPEG_PLUGIN
-#define AUD_BUILD_PLUGIN
-#endif
-
-/**
- * @file FFMPEGReader.h
- * @ingroup plugin
- * The FFMPEGReader class.
- */
-
-#include "respec/ConverterFunctions.h"
-#include "IReader.h"
-#include "util/Buffer.h"
-
-#include <string>
-#include <memory>
-
-struct AVCodecContext;
-extern "C" {
-#include <libavformat/avformat.h>
-}
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class reads a sound file via ffmpeg.
- * \warning Seeking may not be accurate! Moreover the position is updated after
- * a buffer reading call. So calling getPosition right after seek
- * normally results in a wrong value.
- */
-class AUD_PLUGIN_API FFMPEGReader : public IReader
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The specification of the audio data.
- */
- DeviceSpecs m_specs;
-
- /**
- * The buffer for package reading.
- */
- Buffer m_pkgbuf;
-
- /**
- * The count of samples still available from the last read package.
- */
- int m_pkgbuf_left;
-
- /**
- * The AVFormatContext structure for using ffmpeg.
- */
- AVFormatContext* m_formatCtx;
-
- /**
- * The AVCodecContext structure for using ffmpeg.
- */
- AVCodecContext* m_codecCtx;
-
- /**
- * The AVIOContext to read the data from.
- */
- AVIOContext* m_aviocontext;
-
- /**
- * The stream ID in the file.
- */
- int m_stream;
-
- /**
- * Converter function.
- */
- convert_f m_convert;
-
- /**
- * The memory file to read from.
- */
- std::shared_ptr<Buffer> m_membuffer;
-
- /**
- * The buffer to read with.
- */
- data_t* m_membuf;
-
- /**
- * Reading position of the buffer.
- */
- int64_t m_membufferpos;
-
- /**
- * Whether the audio data has to be interleaved after reading.
- */
- bool m_tointerleave;
-
- /**
- * Decodes a packet into the given buffer.
- * \param packet The AVPacket to decode.
- * \param buffer The target buffer.
- * \return The count of read bytes.
- */
- AUD_LOCAL int decode(AVPacket& packet, Buffer& buffer);
-
- /**
- * Initializes the object.
- */
- AUD_LOCAL void init();
-
- // delete copy constructor and operator=
- FFMPEGReader(const FFMPEGReader&) = delete;
- FFMPEGReader& operator=(const FFMPEGReader&) = delete;
-
-public:
- /**
- * Creates a new reader.
- * \param filename The path to the file to be read.
- * \exception Exception Thrown if the file specified does not exist or
- * cannot be read with ffmpeg.
- */
- FFMPEGReader(std::string filename);
-
- /**
- * Creates a new reader.
- * \param buffer The buffer to read from.
- * \exception Exception Thrown if the buffer specified cannot be read
- * with ffmpeg.
- */
- FFMPEGReader(std::shared_ptr<Buffer> buffer);
-
- /**
- * Destroys the reader and closes the file.
- */
- virtual ~FFMPEGReader();
-
- /**
- * Reads data to a memory buffer.
- * This function is used for avio only.
- * @param opaque The FFMPEGReader.
- * @param buf The buffer to read to.
- * @param buf_size The size of the buffer.
- * @return How many bytes have been read.
- */
- static int read_packet(void* opaque, uint8_t* buf, int buf_size);
-
- /**
- * Seeks within data.
- * This function is used for avio only.
- * @param opaque The FFMPEGReader.
- * @param offset The byte offset to seek to.
- * @param whence The seeking action.
- * @return The current position or the size of the data if requested.
- */
- static int64_t seek_packet(void* opaque, int64_t offset, int whence);
-
- 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/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
deleted file mode 100644
index f79f0f7fc6b..00000000000
--- a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
+++ /dev/null
@@ -1,427 +0,0 @@
-/*******************************************************************************
- * 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 "FFMPEGWriter.h"
-#include "Exception.h"
-
-#include <algorithm>
-#include <cstring>
-
-extern "C" {
-#include <libavcodec/avcodec.h>
-#include <libavformat/avio.h>
-}
-
-AUD_NAMESPACE_BEGIN
-
-void FFMPEGWriter::encode()
-{
- sample_t* data = m_input_buffer.getBuffer();
-
- if(m_deinterleave)
- {
- m_deinterleave_buffer.assureSize(m_input_buffer.getSize());
-
- sample_t* dbuf = m_deinterleave_buffer.getBuffer();
- // deinterleave
- int single_size = sizeof(sample_t);
- for(int channel = 0; channel < m_specs.channels; channel++)
- {
- for(int i = 0; i < m_input_buffer.getSize() / AUD_SAMPLE_SIZE(m_specs); i++)
- {
- std::memcpy(((data_t*)dbuf) + (m_input_samples * channel + i) * single_size,
- ((data_t*)data) + ((m_specs.channels * i) + channel) * single_size, single_size);
- }
- }
-
- // convert first
- if(m_input_size)
- m_convert(reinterpret_cast<data_t*>(data), reinterpret_cast<data_t*>(dbuf), m_input_samples * m_specs.channels);
- else
- std::memcpy(data, dbuf, m_input_buffer.getSize());
- }
- else
- // convert first
- if(m_input_size)
- m_convert(reinterpret_cast<data_t*>(data), reinterpret_cast<data_t*>(data), m_input_samples * m_specs.channels);
-
- AVPacket packet;
-
- packet.data = nullptr;
- packet.size = 0;
-
- av_init_packet(&packet);
-
- AVFrame* frame = av_frame_alloc();
- av_frame_unref(frame);
- int got_packet;
-
- frame->nb_samples = m_input_samples;
- frame->format = m_codecCtx->sample_fmt;
- frame->channel_layout = m_codecCtx->channel_layout;
-
- if(avcodec_fill_audio_frame(frame, m_specs.channels, m_codecCtx->sample_fmt, reinterpret_cast<data_t*>(data), m_input_buffer.getSize(), 0) < 0)
- AUD_THROW(FileException, "File couldn't be written, filling the audio frame failed with ffmpeg.");
-
- AVRational sample_time = { 1, static_cast<int>(m_specs.rate) };
- frame->pts = av_rescale_q(m_position - m_input_samples, m_codecCtx->time_base, sample_time);
-
- if(avcodec_encode_audio2(m_codecCtx, &packet, frame, &got_packet))
- {
- av_frame_free(&frame);
- AUD_THROW(FileException, "File couldn't be written, audio encoding failed with ffmpeg.");
- }
-
- if(got_packet)
- {
- packet.flags |= AV_PKT_FLAG_KEY;
- packet.stream_index = m_stream->index;
- if(av_write_frame(m_formatCtx, &packet) < 0)
- {
- av_free_packet(&packet);
- av_frame_free(&frame);
- AUD_THROW(FileException, "Frame couldn't be writen to the file with ffmpeg.");
- }
- av_free_packet(&packet);
- }
-
- av_frame_free(&frame);
-}
-
-void FFMPEGWriter::close()
-{
- int got_packet = true;
-
- while(got_packet)
- {
- AVPacket packet;
-
- packet.data = nullptr;
- packet.size = 0;
-
- av_init_packet(&packet);
-
- if(avcodec_encode_audio2(m_codecCtx, &packet, nullptr, &got_packet))
- AUD_THROW(FileException, "File end couldn't be written, audio encoding failed with ffmpeg.");
-
- if(got_packet)
- {
- packet.flags |= AV_PKT_FLAG_KEY;
- packet.stream_index = m_stream->index;
- if(av_write_frame(m_formatCtx, &packet))
- {
- av_free_packet(&packet);
- AUD_THROW(FileException, "Final frames couldn't be writen to the file with ffmpeg.");
- }
- av_free_packet(&packet);
- }
- }
-}
-
-FFMPEGWriter::FFMPEGWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate) :
- m_position(0),
- m_specs(specs),
- m_input_samples(0),
- m_deinterleave(false)
-{
- static const char* formats[] = { nullptr, "ac3", "flac", "matroska", "mp2", "mp3", "ogg", "wav" };
-
- if(avformat_alloc_output_context2(&m_formatCtx, nullptr, formats[format], filename.c_str()) < 0)
- AUD_THROW(FileException, "File couldn't be written, format couldn't be found with ffmpeg.");
-
- m_outputFmt = m_formatCtx->oformat;
-
- if(!m_outputFmt) {
- avformat_free_context(m_formatCtx);
- AUD_THROW(FileException, "File couldn't be written, output format couldn't be found with ffmpeg.");
- }
-
- m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
-
- switch(codec)
- {
- case CODEC_AAC:
- m_outputFmt->audio_codec = AV_CODEC_ID_AAC;
- break;
- case CODEC_AC3:
- m_outputFmt->audio_codec = AV_CODEC_ID_AC3;
- break;
- case CODEC_FLAC:
- m_outputFmt->audio_codec = AV_CODEC_ID_FLAC;
- break;
- case CODEC_MP2:
- m_outputFmt->audio_codec = AV_CODEC_ID_MP2;
- break;
- case CODEC_MP3:
- m_outputFmt->audio_codec = AV_CODEC_ID_MP3;
- break;
- case CODEC_OPUS:
- m_outputFmt->audio_codec = AV_CODEC_ID_OPUS;
- break;
- case CODEC_PCM:
- switch(specs.format)
- {
- case FORMAT_U8:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_U8;
- break;
- case FORMAT_S16:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S16LE;
- break;
- case FORMAT_S24:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S24LE;
- break;
- case FORMAT_S32:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S32LE;
- break;
- case FORMAT_FLOAT32:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_F32LE;
- break;
- case FORMAT_FLOAT64:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_F64LE;
- break;
- default:
- m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
- break;
- }
- break;
- case CODEC_VORBIS:
- m_outputFmt->audio_codec = AV_CODEC_ID_VORBIS;
- break;
- default:
- m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
- break;
- }
-
- try
- {
- if(m_outputFmt->audio_codec == AV_CODEC_ID_NONE)
- AUD_THROW(FileException, "File couldn't be written, audio codec not found with ffmpeg.");
-
- AVCodec* codec = avcodec_find_encoder(m_outputFmt->audio_codec);
- if(!codec)
- AUD_THROW(FileException, "File couldn't be written, audio encoder couldn't be found with ffmpeg.");
-
- m_stream = avformat_new_stream(m_formatCtx, codec);
- if(!m_stream)
- AUD_THROW(FileException, "File couldn't be written, stream creation failed with ffmpeg.");
-
- m_stream->id = m_formatCtx->nb_streams - 1;
-
- m_codecCtx = m_stream->codec;
-
- switch(m_specs.format)
- {
- case FORMAT_U8:
- m_convert = convert_float_u8;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_U8;
- break;
- case FORMAT_S16:
- m_convert = convert_float_s16;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
- break;
- case FORMAT_S32:
- m_convert = convert_float_s32;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S32;
- break;
- case FORMAT_FLOAT64:
- m_convert = convert_float_double;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_DBL;
- break;
- default:
- m_convert = convert_copy<sample_t>;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_FLT;
- break;
- }
-
- if(m_formatCtx->oformat->flags & AVFMT_GLOBALHEADER)
- m_codecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER;
-
- bool format_supported = false;
-
- for(int i = 0; codec->sample_fmts[i] != -1; i++)
- {
- if(av_get_alt_sample_fmt(codec->sample_fmts[i], false) == m_codecCtx->sample_fmt)
- {
- m_deinterleave = av_sample_fmt_is_planar(codec->sample_fmts[i]);
- m_codecCtx->sample_fmt = codec->sample_fmts[i];
- format_supported = true;
- }
- }
-
- if(!format_supported)
- {
- int chosen_index = 0;
- auto chosen = av_get_alt_sample_fmt(codec->sample_fmts[chosen_index], false);
- for(int i = 1; codec->sample_fmts[i] != -1; i++)
- {
- auto fmt = av_get_alt_sample_fmt(codec->sample_fmts[i], false);
- if((fmt > chosen && chosen < m_codecCtx->sample_fmt) || (fmt > m_codecCtx->sample_fmt && fmt < chosen))
- {
- chosen = fmt;
- chosen_index = i;
- }
- }
-
- m_codecCtx->sample_fmt = codec->sample_fmts[chosen_index];
- m_deinterleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
- switch(av_get_alt_sample_fmt(m_codecCtx->sample_fmt, false))
- {
- case AV_SAMPLE_FMT_U8:
- specs.format = FORMAT_U8;
- m_convert = convert_float_u8;
- break;
- case AV_SAMPLE_FMT_S16:
- specs.format = FORMAT_S16;
- m_convert = convert_float_s16;
- break;
- case AV_SAMPLE_FMT_S32:
- specs.format = FORMAT_S32;
- m_convert = convert_float_s32;
- break;
- case AV_SAMPLE_FMT_FLT:
- specs.format = FORMAT_FLOAT32;
- m_convert = convert_copy<sample_t>;
- break;
- case AV_SAMPLE_FMT_DBL:
- specs.format = FORMAT_FLOAT64;
- m_convert = convert_float_double;
- break;
- default:
- AUD_THROW(FileException, "File couldn't be written, sample format not supported with ffmpeg.");
- }
- }
-
- m_codecCtx->sample_rate = 0;
-
- if(codec->supported_samplerates)
- {
- for(int i = 0; codec->supported_samplerates[i]; i++)
- {
- if(codec->supported_samplerates[i] == m_specs.rate)
- {
- m_codecCtx->sample_rate = codec->supported_samplerates[i];
- break;
- }
- else if((codec->supported_samplerates[i] > m_codecCtx->sample_rate && m_specs.rate > m_codecCtx->sample_rate) ||
- (codec->supported_samplerates[i] < m_codecCtx->sample_rate && m_specs.rate < codec->supported_samplerates[i]))
- {
- m_codecCtx->sample_rate = codec->supported_samplerates[i];
- }
- }
- }
-
- if(m_codecCtx->sample_rate == 0)
- m_codecCtx->sample_rate = m_specs.rate;
-
- m_specs.rate = m_codecCtx->sample_rate;
-
- m_codecCtx->codec_id = m_outputFmt->audio_codec;
- m_codecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
- m_codecCtx->bit_rate = bitrate;
- m_codecCtx->channels = m_specs.channels;
- m_stream->time_base.num = m_codecCtx->time_base.num = 1;
- m_stream->time_base.den = m_codecCtx->time_base.den = m_codecCtx->sample_rate;
-
- if(avcodec_open2(m_codecCtx, codec, nullptr) < 0)
- AUD_THROW(FileException, "File couldn't be written, encoder couldn't be opened with ffmpeg.");
-
- int samplesize = std::max(int(AUD_SAMPLE_SIZE(m_specs)), AUD_DEVICE_SAMPLE_SIZE(m_specs));
-
- if((m_input_size = m_codecCtx->frame_size))
- m_input_buffer.resize(m_input_size * samplesize);
-
- if(avio_open(&m_formatCtx->pb, filename.c_str(), AVIO_FLAG_WRITE))
- AUD_THROW(FileException, "File couldn't be written, file opening failed with ffmpeg.");
-
- avformat_write_header(m_formatCtx, nullptr);
- }
- catch(Exception&)
- {
- avformat_free_context(m_formatCtx);
- throw;
- }
-}
-
-FFMPEGWriter::~FFMPEGWriter()
-{
- // writte missing data
- if(m_input_samples)
- encode();
-
- close();
-
- av_write_trailer(m_formatCtx);
-
- avcodec_close(m_codecCtx);
-
- avio_close(m_formatCtx->pb);
- avformat_free_context(m_formatCtx);
-}
-
-int FFMPEGWriter::getPosition() const
-{
- return m_position;
-}
-
-DeviceSpecs FFMPEGWriter::getSpecs() const
-{
- return m_specs;
-}
-
-void FFMPEGWriter::write(unsigned int length, sample_t* buffer)
-{
- unsigned int samplesize = AUD_SAMPLE_SIZE(m_specs);
-
- if(m_input_size)
- {
- sample_t* inbuf = m_input_buffer.getBuffer();
-
- while(length)
- {
- unsigned int len = std::min(m_input_size - m_input_samples, length);
-
- std::memcpy(inbuf + m_input_samples * m_specs.channels, buffer, len * samplesize);
-
- buffer += len * m_specs.channels;
- m_input_samples += len;
- m_position += len;
- length -= len;
-
- if(m_input_samples == m_input_size)
- {
- encode();
-
- m_input_samples = 0;
- }
- }
- }
- else // PCM data, can write directly!
- {
- int samplesize = AUD_SAMPLE_SIZE(m_specs);
- m_input_buffer.assureSize(length * std::max(AUD_DEVICE_SAMPLE_SIZE(m_specs), samplesize));
-
- sample_t* buf = m_input_buffer.getBuffer();
- m_convert(reinterpret_cast<data_t*>(buf), reinterpret_cast<data_t*>(buffer), length * m_specs.channels);
-
- m_input_samples = length;
-
- m_position += length;
-
- encode();
- }
-}
-
-AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h
deleted file mode 100644
index 690185deb64..00000000000
--- a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * 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
-
-#ifdef FFMPEG_PLUGIN
-#define AUD_BUILD_PLUGIN
-#endif
-
-/**
- * @file FFMPEGWriter.h
- * @ingroup plugin
- * The FFMPEGWriter class.
- */
-
-#include "respec/ConverterFunctions.h"
-#include "util/Buffer.h"
-#include "file/IWriter.h"
-
-#include <string>
-
-struct AVCodecContext;
-extern "C" {
-#include <libavformat/avformat.h>
-}
-
-AUD_NAMESPACE_BEGIN
-
-/**
- * This class writes a sound file via ffmpeg.
- */
-class AUD_PLUGIN_API FFMPEGWriter : public IWriter
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The specification of the audio data.
- */
- DeviceSpecs m_specs;
-
- /**
- * The AVFormatContext structure for using ffmpeg.
- */
- AVFormatContext* m_formatCtx;
-
- /**
- * The AVCodecContext structure for using ffmpeg.
- */
- AVCodecContext* m_codecCtx;
-
- /**
- * The AVOutputFormat structure for using ffmpeg.
- */
- AVOutputFormat* m_outputFmt;
-
- /**
- * The AVStream structure for using ffmpeg.
- */
- AVStream* m_stream;
-
- /**
- * The input buffer for the format converted data before encoding.
- */
- Buffer m_input_buffer;
-
- /**
- * The buffer used for deinterleaving.
- */
- Buffer m_deinterleave_buffer;
-
- /**
- * The count of input samples we have so far.
- */
- unsigned int m_input_samples;
-
- /**
- * The count of input samples necessary to encode a packet.
- */
- unsigned int m_input_size;
-
- /**
- * Whether the ouput has to be deinterleaved before writing.
- */
- bool m_deinterleave;
-
- /**
- * Converter function.
- */
- convert_f m_convert;
-
- // delete copy constructor and operator=
- FFMPEGWriter(const FFMPEGWriter&) = delete;
- FFMPEGWriter& operator=(const FFMPEGWriter&) = delete;
-
- /**
- * Encodes to the output buffer.
- */
- AUD_LOCAL void encode();
-
- /**
- * Finishes writing to the file.
- */
- AUD_LOCAL void close();
-
-public:
- /**
- * Creates a new writer.
- * \param filename The path to the file to be read.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \exception Exception Thrown if the file specified does not exist or
- * cannot be read with ffmpeg.
- */
- FFMPEGWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
-
- /**
- * Destroys the writer and closes the file.
- */
- virtual ~FFMPEGWriter();
-
- virtual int getPosition() const;
- virtual DeviceSpecs getSpecs() const;
- virtual void write(unsigned int length, sample_t* buffer);
-};
-
-AUD_NAMESPACE_END