[Bf-blender-cvs] [8096f36796a] master: Audaspace: porting changes from upstream.

Jörg Müller noreply at git.blender.org
Fri May 10 23:02:42 CEST 2019


Commit: 8096f36796ae07a1a76e99abbaf216ab29260b74
Author: Jörg Müller
Date:   Fri May 10 23:01:04 2019 +0200
Branches: master
https://developer.blender.org/rB8096f36796ae07a1a76e99abbaf216ab29260b74

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.

===================================================================

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

===================================================================

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<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
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<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,
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<IReader> 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 <mutex>
 #include <condition_variable>
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<IReader> Silence::createReader()
 {
-	return std::shared_ptr<IReader>(new SilenceReader());
+	return std::shared_ptr<IReader>(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



More information about the Bf-blender-cvs mailing list