Audaspace: porting changes from upstream.
authorJörg Müller <nexyon@gmail.com>
Fri, 10 May 2019 21:01:04 +0000 (23:01 +0200)
committerJörg Müller <nexyon@gmail.com>
Fri, 10 May 2019 21:01:04 +0000 (23:01 +0200)
- Silence now has an optional sample rate parameter.
- Fix: wrong length reported by modulator and superpose.
- Minor formatting, include and documentation fixes.

13 files changed:
extern/audaspace/bindings/C/AUD_Sound.cpp
extern/audaspace/bindings/C/AUD_Sound.h
extern/audaspace/bindings/C/AUD_Special.cpp
extern/audaspace/bindings/python/PySequence.cpp
extern/audaspace/bindings/python/PySound.cpp
extern/audaspace/include/generator/Silence.h
extern/audaspace/include/generator/SilenceReader.h
extern/audaspace/include/generator/Sine.h
extern/audaspace/src/fx/DynamicMusic.cpp
extern/audaspace/src/fx/ModulatorReader.cpp
extern/audaspace/src/generator/Silence.cpp
extern/audaspace/src/generator/SilenceReader.cpp
extern/audaspace/src/sequence/SuperposeReader.cpp

index 00a59f4..8c99ce2 100644 (file)
@@ -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)
index 66d6c53..5317261 100644 (file)
@@ -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.
index f8f4665..30148fa 100644 (file)
@@ -177,11 +177,11 @@ static void pauseSound(AUD_Handle* handle)
 
 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::shared_ptr<ISound> silence = std::shared_ptr<ISound>(new Silence(device->getSpecs().rate));
+       std::shared_ptr<ISound> limiter = std::shared_ptr<ISound>(new Limiter(silence, 0, seconds));
+
        std::lock_guard<ILockable> lock(*device);
 
        try
index d4773c7..e574d76 100644 (file)
@@ -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;
 
index 17fcdbe..c589e71 100644 (file)
@@ -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<ISound>(new Silence());
+                       self->sound = new std::shared_ptr<ISound>(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,
index a35b83d..1aa26eb 100644 (file)
@@ -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<IReader> createReader();
 };
index ecc0ce8..c32db4b 100644 (file)
@@ -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);
index ee78fc7..0c7dd15 100644 (file)
@@ -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.
index 2b0acc0..c682108 100644 (file)
@@ -15,9 +15,6 @@
 ******************************************************************************/
 
 #include "fx/DynamicMusic.h"
-#include "generator/Silence.h"
-#include "fx/Fader.h"
-#include "fx/Limiter.h"
 
 #include <mutex>
 #include <condition_variable>
index c17cee0..f7cdc1d 100644 (file)
@@ -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
index a173a1b..2919f89 100644 (file)
 
 AUD_NAMESPACE_BEGIN
 
-Silence::Silence()
+Silence::Silence(SampleRate sampleRate) :
+       m_sampleRate(sampleRate)
 {
 }
 
 std::shared_ptr<IReader> Silence::createReader()
 {
-       return std::shared_ptr<IReader>(new SilenceReader());
+       return std::shared_ptr<IReader>(new SilenceReader(m_sampleRate));
 }
 
 AUD_NAMESPACE_END
index 39358cc..746cc76 100644 (file)
@@ -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;
 }
index 9206a7a..a65185a 100644 (file)
@@ -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