From 8096f36796ae07a1a76e99abbaf216ab29260b74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20M=C3=BCller?= Date: Fri, 10 May 2019 23:01:04 +0200 Subject: Audaspace: porting changes from upstream. - Silence now has an optional sample rate parameter. - Fix: wrong length reported by modulator and superpose. - Minor formatting, include and documentation fixes. --- extern/audaspace/bindings/C/AUD_Sound.cpp | 4 ++-- extern/audaspace/bindings/C/AUD_Sound.h | 3 ++- extern/audaspace/bindings/C/AUD_Special.cpp | 6 +++--- extern/audaspace/bindings/python/PySequence.cpp | 8 ++++---- extern/audaspace/bindings/python/PySound.cpp | 16 ++++++++++++---- extern/audaspace/include/generator/Silence.h | 9 ++++++++- extern/audaspace/include/generator/SilenceReader.h | 8 +++++++- extern/audaspace/include/generator/Sine.h | 3 +-- extern/audaspace/src/fx/DynamicMusic.cpp | 3 --- extern/audaspace/src/fx/ModulatorReader.cpp | 2 +- extern/audaspace/src/generator/Silence.cpp | 5 +++-- extern/audaspace/src/generator/SilenceReader.cpp | 7 ++++--- extern/audaspace/src/sequence/SuperposeReader.cpp | 2 +- 13 files changed, 48 insertions(+), 28 deletions(-) diff --git a/extern/audaspace/bindings/C/AUD_Sound.cpp b/extern/audaspace/bindings/C/AUD_Sound.cpp index 00a59f4c67f..8c99ce2341f 100644 --- a/extern/audaspace/bindings/C/AUD_Sound.cpp +++ b/extern/audaspace/bindings/C/AUD_Sound.cpp @@ -277,9 +277,9 @@ AUD_API AUD_Sound* AUD_Sound_sawtooth(float frequency, AUD_SampleRate rate) return new AUD_Sound(new Sawtooth(frequency, rate)); } -AUD_API AUD_Sound*AUD_Sound_silence() +AUD_API AUD_Sound* AUD_Sound_silence(AUD_SampleRate rate) { - return new AUD_Sound(new Silence()); + return new AUD_Sound(new Silence(rate)); } AUD_API AUD_Sound* AUD_Sound_sine(float frequency, AUD_SampleRate rate) diff --git a/extern/audaspace/bindings/C/AUD_Sound.h b/extern/audaspace/bindings/C/AUD_Sound.h index 66d6c53cc37..53172616781 100644 --- a/extern/audaspace/bindings/C/AUD_Sound.h +++ b/extern/audaspace/bindings/C/AUD_Sound.h @@ -113,9 +113,10 @@ extern AUD_API AUD_Sound* AUD_Sound_sawtooth(float frequency, AUD_SampleRate rat /** * Creates a quiet sound. + * \param rate The sample rate of the silence sound. * \return A handle of the sound. */ -extern AUD_API AUD_Sound* AUD_Sound_silence(); +extern AUD_API AUD_Sound* AUD_Sound_silence(AUD_SampleRate rate); /** * Creates a sine sound. diff --git a/extern/audaspace/bindings/C/AUD_Special.cpp b/extern/audaspace/bindings/C/AUD_Special.cpp index f8f46651231..30148fa1487 100644 --- a/extern/audaspace/bindings/C/AUD_Special.cpp +++ b/extern/audaspace/bindings/C/AUD_Special.cpp @@ -177,11 +177,11 @@ static void pauseSound(AUD_Handle* handle) AUD_API AUD_Handle* AUD_pauseAfter(AUD_Handle* handle, float seconds) { - std::shared_ptr silence = std::shared_ptr(new Silence); - std::shared_ptr limiter = std::shared_ptr(new Limiter(silence, 0, seconds)); - auto device = DeviceManager::getDevice(); + std::shared_ptr silence = std::shared_ptr(new Silence(device->getSpecs().rate)); + std::shared_ptr limiter = std::shared_ptr(new Limiter(silence, 0, seconds)); + std::lock_guard lock(*device); try diff --git a/extern/audaspace/bindings/python/PySequence.cpp b/extern/audaspace/bindings/python/PySequence.cpp index d4773c743ee..e574d76bea1 100644 --- a/extern/audaspace/bindings/python/PySequence.cpp +++ b/extern/audaspace/bindings/python/PySequence.cpp @@ -100,7 +100,7 @@ Sequence_new(PyTypeObject* type, PyObject* args, PyObject* kwds) PyDoc_STRVAR(M_aud_Sequence_add_doc, "add()\n\n" - "Adds a new entry to the scene.\n" + "Adds a new entry to the sequence.\n\n" ":arg sound: The sound this entry should play.\n" ":type sound: :class:`Sound`\n" ":arg begin: The start time.\n" @@ -151,8 +151,8 @@ Sequence_add(Sequence* self, PyObject* args, PyObject* kwds) } PyDoc_STRVAR(M_aud_Sequence_remove_doc, - "reomve()\n\n" - "Adds a new entry to the scene.\n" + "remove()\n\n" + "Removes an entry from the sequence.\n\n" ":arg entry: The entry to remove.\n" ":type entry: :class:`SequenceEntry`\n"); @@ -579,7 +579,7 @@ static PyGetSetDef Sequence_properties[] = { }; PyDoc_STRVAR(M_aud_Sequence_doc, - "This sound represents sequenced entries to play a sound scene."); + "This sound represents sequenced entries to play a sound sequence."); extern PyTypeObject SoundType; diff --git a/extern/audaspace/bindings/python/PySound.cpp b/extern/audaspace/bindings/python/PySound.cpp index 17fcdbeb938..c589e7110cb 100644 --- a/extern/audaspace/bindings/python/PySound.cpp +++ b/extern/audaspace/bindings/python/PySound.cpp @@ -470,14 +470,22 @@ Sound_sawtooth(PyTypeObject* type, PyObject* args) } PyDoc_STRVAR(M_aud_Sound_silence_doc, - "silence()\n\n" + "silence(rate=48000)\n\n" "Creates a silence sound which plays simple silence.\n\n" + ":arg rate: The sampling rate in Hz. It's recommended to set this " + "value to the playback device's samling rate to avoid resamping.\n" + ":type rate: int\n" ":return: The created :class:`Sound` object.\n" ":rtype: :class:`Sound`"); static PyObject * -Sound_silence(PyTypeObject* type) +Sound_silence(PyTypeObject* type, PyObject* args) { + double rate = 48000; + + if(!PyArg_ParseTuple(args, "|d:sawtooth", &rate)) + return nullptr; + Sound* self; self = (Sound*)type->tp_alloc(type, 0); @@ -485,7 +493,7 @@ Sound_silence(PyTypeObject* type) { try { - self->sound = new std::shared_ptr(new Silence()); + self->sound = new std::shared_ptr(new Silence((SampleRate)rate)); } catch(Exception& e) { @@ -1788,7 +1796,7 @@ static PyMethodDef Sound_methods[] = { {"sawtooth", (PyCFunction)Sound_sawtooth, METH_VARARGS | METH_CLASS, M_aud_Sound_sawtooth_doc }, - {"silence", (PyCFunction)Sound_silence, METH_NOARGS | METH_CLASS, + {"silence", (PyCFunction)Sound_silence, METH_VARARGS | METH_CLASS, M_aud_Sound_silence_doc }, {"sine", (PyCFunction)Sound_sine, METH_VARARGS | METH_CLASS, diff --git a/extern/audaspace/include/generator/Silence.h b/extern/audaspace/include/generator/Silence.h index a35b83d37fc..1aa26eb390f 100644 --- a/extern/audaspace/include/generator/Silence.h +++ b/extern/audaspace/include/generator/Silence.h @@ -23,6 +23,7 @@ */ #include "ISound.h" +#include "respec/Specification.h" AUD_NAMESPACE_BEGIN @@ -32,6 +33,11 @@ AUD_NAMESPACE_BEGIN class AUD_API Silence : public ISound { private: + /** + * The target sample rate for output. + */ + const SampleRate m_sampleRate; + // delete copy constructor and operator= Silence(const Silence&) = delete; Silence& operator=(const Silence&) = delete; @@ -39,8 +45,9 @@ private: public: /** * Creates a new silence sound. + * \param sampleRate The target sample rate for playback. */ - Silence(); + Silence(SampleRate sampleRate = RATE_48000); virtual std::shared_ptr createReader(); }; diff --git a/extern/audaspace/include/generator/SilenceReader.h b/extern/audaspace/include/generator/SilenceReader.h index ecc0ce86da9..c32db4b3e89 100644 --- a/extern/audaspace/include/generator/SilenceReader.h +++ b/extern/audaspace/include/generator/SilenceReader.h @@ -38,6 +38,11 @@ private: */ int m_position; + /** + * The sample rate for the output. + */ + const SampleRate m_sampleRate; + // delete copy constructor and operator= SilenceReader(const SilenceReader&) = delete; SilenceReader& operator=(const SilenceReader&) = delete; @@ -45,8 +50,9 @@ private: public: /** * Creates a new reader. + * \param sampleRate The output sample rate. */ - SilenceReader(); + SilenceReader(SampleRate sampleRate); virtual bool isSeekable() const; virtual void seek(int position); diff --git a/extern/audaspace/include/generator/Sine.h b/extern/audaspace/include/generator/Sine.h index ee78fc7d06b..0c7dd15ab30 100644 --- a/extern/audaspace/include/generator/Sine.h +++ b/extern/audaspace/include/generator/Sine.h @@ -53,8 +53,7 @@ public: * \param frequency The desired frequency. * \param sampleRate The target sample rate for playback. */ - Sine(float frequency, - SampleRate sampleRate = RATE_48000); + Sine(float frequency, SampleRate sampleRate = RATE_48000); /** * Returns the frequency of the sine wave. diff --git a/extern/audaspace/src/fx/DynamicMusic.cpp b/extern/audaspace/src/fx/DynamicMusic.cpp index 2b0acc06fbc..c682108378f 100644 --- a/extern/audaspace/src/fx/DynamicMusic.cpp +++ b/extern/audaspace/src/fx/DynamicMusic.cpp @@ -15,9 +15,6 @@ ******************************************************************************/ #include "fx/DynamicMusic.h" -#include "generator/Silence.h" -#include "fx/Fader.h" -#include "fx/Limiter.h" #include #include diff --git a/extern/audaspace/src/fx/ModulatorReader.cpp b/extern/audaspace/src/fx/ModulatorReader.cpp index c17cee08239..f7cdc1d2758 100644 --- a/extern/audaspace/src/fx/ModulatorReader.cpp +++ b/extern/audaspace/src/fx/ModulatorReader.cpp @@ -48,7 +48,7 @@ int ModulatorReader::getLength() const int len2 = m_reader2->getLength(); if((len1 < 0) || (len2 < 0)) return -1; - return std::min(len1, len2); + return std::max(len1, len2); } int ModulatorReader::getPosition() const diff --git a/extern/audaspace/src/generator/Silence.cpp b/extern/audaspace/src/generator/Silence.cpp index a173a1bc5f6..2919f892803 100644 --- a/extern/audaspace/src/generator/Silence.cpp +++ b/extern/audaspace/src/generator/Silence.cpp @@ -19,13 +19,14 @@ AUD_NAMESPACE_BEGIN -Silence::Silence() +Silence::Silence(SampleRate sampleRate) : + m_sampleRate(sampleRate) { } std::shared_ptr Silence::createReader() { - return std::shared_ptr(new SilenceReader()); + return std::shared_ptr(new SilenceReader(m_sampleRate)); } AUD_NAMESPACE_END diff --git a/extern/audaspace/src/generator/SilenceReader.cpp b/extern/audaspace/src/generator/SilenceReader.cpp index 39358cc087a..746cc7600da 100644 --- a/extern/audaspace/src/generator/SilenceReader.cpp +++ b/extern/audaspace/src/generator/SilenceReader.cpp @@ -20,8 +20,9 @@ AUD_NAMESPACE_BEGIN -SilenceReader::SilenceReader() : - m_position(0) +SilenceReader::SilenceReader(SampleRate sampleRate) : + m_position(0), + m_sampleRate(sampleRate) { } @@ -48,7 +49,7 @@ int SilenceReader::getPosition() const Specs SilenceReader::getSpecs() const { Specs specs; - specs.rate = RATE_48000; + specs.rate = m_sampleRate; specs.channels = CHANNELS_MONO; return specs; } diff --git a/extern/audaspace/src/sequence/SuperposeReader.cpp b/extern/audaspace/src/sequence/SuperposeReader.cpp index 9206a7a96ef..a65185acf17 100644 --- a/extern/audaspace/src/sequence/SuperposeReader.cpp +++ b/extern/audaspace/src/sequence/SuperposeReader.cpp @@ -48,7 +48,7 @@ int SuperposeReader::getLength() const int len2 = m_reader2->getLength(); if((len1 < 0) || (len2 < 0)) return -1; - return std::min(len1, len2); + return std::max(len1, len2); } int SuperposeReader::getPosition() const -- cgit v1.2.3