From 9ee711eb0cb443d2ca1dd4e8052f04a74a80cb08 Mon Sep 17 00:00:00 2001
From: wittend99
Date: Fri, 18 May 2012 02:06:15 +0000
Subject: [PATCH] Catching up before things get into a snarl.
git-svn-id: https://svn.code.sf.net/p/freetel/code@475 01035d8c-6547-0410-b346-abe4f91aad63
---
.../portaudiocpp/AsioDeviceAdapter.hxx | 70 +--
.../include/portaudiocpp/AutoSystem.hxx | 84 ++--
.../include/portaudiocpp/BlockingStream.hxx | 44 +-
.../portaudiocpp/CFunCallbackStream.hxx | 44 +-
.../portaudiocpp/CallbackInterface.hxx | 56 +--
.../include/portaudiocpp/CallbackStream.hxx | 34 +-
.../portaudiocpp/CppFunCallbackStream.hxx | 112 ++---
fdmdv2/extern/include/portaudiocpp/Device.hxx | 120 ++---
.../DirectionSpecificStreamParameters.hxx | 70 +--
.../extern/include/portaudiocpp/Exception.hxx | 172 +++----
.../extern/include/portaudiocpp/HostApi.hxx | 90 ++--
.../portaudiocpp/InterfaceCallbackStream.hxx | 38 +-
.../portaudiocpp/MemFunCallbackStream.hxx | 162 +++----
.../include/portaudiocpp/PortAudioCpp.hxx | 38 +-
.../include/portaudiocpp/SampleDataFormat.hxx | 30 +-
fdmdv2/extern/include/portaudiocpp/Stream.hxx | 112 ++---
.../include/portaudiocpp/StreamParameters.hxx | 110 ++---
fdmdv2/extern/include/portaudiocpp/System.hxx | 116 ++---
.../portaudiocpp/SystemDeviceIterator.hxx | 70 +--
.../portaudiocpp/SystemHostApiIterator.hxx | 60 +--
fdmdv2/extern/lib/libportaudio.a | Bin 0 -> 355106 bytes
fdmdv2/extern/lib/libportaudio.la | 41 ++
fdmdv2/pa_cppbinding_test/gui.cpp | 66 ++-
fdmdv2/pa_cppbinding_test/gui.fbp | 440 +++++++++---------
fdmdv2/pa_cppbinding_test/gui.h | 8 +-
fdmdv2/pa_cppbinding_test/main.cpp | 181 +++++++
fdmdv2/pa_cppbinding_test/main.h | 10 +-
.../pa_cppbinding_test/pa_cppbinding_test.mk | 6 +-
.../pa_cppbinding_test.project | 61 ++-
29 files changed, 1364 insertions(+), 1081 deletions(-)
create mode 100644 fdmdv2/extern/lib/libportaudio.a
create mode 100644 fdmdv2/extern/lib/libportaudio.la
diff --git a/fdmdv2/extern/include/portaudiocpp/AsioDeviceAdapter.hxx b/fdmdv2/extern/include/portaudiocpp/AsioDeviceAdapter.hxx
index 1964b6a2..3291457a 100644
--- a/fdmdv2/extern/include/portaudiocpp/AsioDeviceAdapter.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/AsioDeviceAdapter.hxx
@@ -4,41 +4,41 @@
namespace portaudio
{
- // Forward declaration(s):
- class Device;
-
- // Declaration(s):
- //////
- /// @brief Adapts the given Device to an ASIO specific extension.
- ///
- /// Deleting the AsioDeviceAdapter does not affect the underlaying
- /// Device.
- //////
- class AsioDeviceAdapter
- {
- public:
- AsioDeviceAdapter(Device &device);
-
- Device &device();
-
- long minBufferSize() const;
- long maxBufferSize() const;
- long preferredBufferSize() const;
- long granularity() const;
-
- void showControlPanel(void *systemSpecific);
-
- const char *inputChannelName(int channelIndex) const;
- const char *outputChannelName(int channelIndex) const;
-
- private:
- Device *device_;
-
- long minBufferSize_;
- long maxBufferSize_;
- long preferredBufferSize_;
- long granularity_;
- };
+ // Forward declaration(s):
+ class Device;
+
+ // Declaration(s):
+ //////
+ /// @brief Adapts the given Device to an ASIO specific extension.
+ ///
+ /// Deleting the AsioDeviceAdapter does not affect the underlaying
+ /// Device.
+ //////
+ class AsioDeviceAdapter
+ {
+ public:
+ AsioDeviceAdapter(Device &device);
+
+ Device &device();
+
+ long minBufferSize() const;
+ long maxBufferSize() const;
+ long preferredBufferSize() const;
+ long granularity() const;
+
+ void showControlPanel(void *systemSpecific);
+
+ const char *inputChannelName(int channelIndex) const;
+ const char *outputChannelName(int channelIndex) const;
+
+ private:
+ Device *device_;
+
+ long minBufferSize_;
+ long maxBufferSize_;
+ long preferredBufferSize_;
+ long granularity_;
+ };
}
#endif // INCLUDED_PORTAUDIO_ASIODEVICEADAPTER_HXX
diff --git a/fdmdv2/extern/include/portaudiocpp/AutoSystem.hxx b/fdmdv2/extern/include/portaudiocpp/AutoSystem.hxx
index 16cac5ed..7c5889e5 100644
--- a/fdmdv2/extern/include/portaudiocpp/AutoSystem.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/AutoSystem.hxx
@@ -11,48 +11,48 @@ namespace portaudio
{
- //////
- /// @brief A RAII idiom class to ensure automatic clean-up when an exception is
- /// raised.
- ///
- /// A simple helper class which uses the 'Resource Acquisition is Initialization'
- /// idiom (RAII). Use this class to initialize/terminate the System rather than
- /// using System directly. AutoSystem must be created on stack and must be valid
- /// throughout the time you wish to use PortAudioCpp. Your 'main' function might be
- /// a good place for it.
- ///
- /// To avoid having to type portaudio::System::instance().xyz() all the time, it's usually
- /// a good idea to make a reference to the System which can be accessed directly.
- /// @verbatim
- /// portaudio::AutoSys autoSys;
- /// portaudio::System &sys = portaudio::System::instance();
- /// @endverbatim
- //////
- class AutoSystem
- {
- public:
- AutoSystem(bool initialize = true)
- {
- if (initialize)
- System::initialize();
- }
-
- ~AutoSystem()
- {
- if (System::exists())
- System::terminate();
- }
-
- void initialize()
- {
- System::initialize();
- }
-
- void terminate()
- {
- System::terminate();
- }
- };
+ //////
+ /// @brief A RAII idiom class to ensure automatic clean-up when an exception is
+ /// raised.
+ ///
+ /// A simple helper class which uses the 'Resource Acquisition is Initialization'
+ /// idiom (RAII). Use this class to initialize/terminate the System rather than
+ /// using System directly. AutoSystem must be created on stack and must be valid
+ /// throughout the time you wish to use PortAudioCpp. Your 'main' function might be
+ /// a good place for it.
+ ///
+ /// To avoid having to type portaudio::System::instance().xyz() all the time, it's usually
+ /// a good idea to make a reference to the System which can be accessed directly.
+ /// @verbatim
+ /// portaudio::AutoSys autoSys;
+ /// portaudio::System &sys = portaudio::System::instance();
+ /// @endverbatim
+ //////
+ class AutoSystem
+ {
+ public:
+ AutoSystem(bool initialize = true)
+ {
+ if (initialize)
+ System::initialize();
+ }
+
+ ~AutoSystem()
+ {
+ if (System::exists())
+ System::terminate();
+ }
+
+ void initialize()
+ {
+ System::initialize();
+ }
+
+ void terminate()
+ {
+ System::terminate();
+ }
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/BlockingStream.hxx b/fdmdv2/extern/include/portaudiocpp/BlockingStream.hxx
index 37fa7665..9653550f 100644
--- a/fdmdv2/extern/include/portaudiocpp/BlockingStream.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/BlockingStream.hxx
@@ -12,28 +12,28 @@ namespace portaudio
- //////
- /// @brief Stream class for blocking read/write-style input and output.
- //////
- class BlockingStream : public Stream
- {
- public:
- BlockingStream();
- BlockingStream(const StreamParameters ¶meters);
- ~BlockingStream();
-
- void open(const StreamParameters ¶meters);
-
- void read(void *buffer, unsigned long numFrames);
- void write(const void *buffer, unsigned long numFrames);
-
- signed long availableReadSize() const;
- signed long availableWriteSize() const;
-
- private:
- BlockingStream(const BlockingStream &); // non-copyable
- BlockingStream &operator=(const BlockingStream &); // non-copyable
- };
+ //////
+ /// @brief Stream class for blocking read/write-style input and output.
+ //////
+ class BlockingStream : public Stream
+ {
+ public:
+ BlockingStream();
+ BlockingStream(const StreamParameters ¶meters);
+ ~BlockingStream();
+
+ void open(const StreamParameters ¶meters);
+
+ void read(void *buffer, unsigned long numFrames);
+ void write(const void *buffer, unsigned long numFrames);
+
+ signed long availableReadSize() const;
+ signed long availableWriteSize() const;
+
+ private:
+ BlockingStream(const BlockingStream &); // non-copyable
+ BlockingStream &operator=(const BlockingStream &); // non-copyable
+ };
diff --git a/fdmdv2/extern/include/portaudiocpp/CFunCallbackStream.hxx b/fdmdv2/extern/include/portaudiocpp/CFunCallbackStream.hxx
index b3e3b5c1..f4d5918d 100644
--- a/fdmdv2/extern/include/portaudiocpp/CFunCallbackStream.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/CFunCallbackStream.hxx
@@ -12,7 +12,7 @@
// Forward declaration(s)
namespace portaudio
{
- class StreamParameters;
+ class StreamParameters;
}
// ---------------------------------------------------------------------------------------
@@ -20,27 +20,27 @@ namespace portaudio
// Declaration(s):
namespace portaudio
{
- // -----------------------------------------------------------------------------------
-
- //////
- /// @brief Callback stream using a free function with C linkage. It's important that the function
- /// the passed function pointer points to is declared ``extern "C"''.
- //////
- class CFunCallbackStream : public CallbackStream
- {
- public:
- CFunCallbackStream();
- CFunCallbackStream(const StreamParameters ¶meters, PaStreamCallback *funPtr, void *userData);
- ~CFunCallbackStream();
-
- void open(const StreamParameters ¶meters, PaStreamCallback *funPtr, void *userData);
-
- private:
- CFunCallbackStream(const CFunCallbackStream &); // non-copyable
- CFunCallbackStream &operator=(const CFunCallbackStream &); // non-copyable
- };
-
- // -----------------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------------
+
+ //////
+ /// @brief Callback stream using a free function with C linkage. It's important that the function
+ /// the passed function pointer points to is declared ``extern "C"''.
+ //////
+ class CFunCallbackStream : public CallbackStream
+ {
+ public:
+ CFunCallbackStream();
+ CFunCallbackStream(const StreamParameters ¶meters, PaStreamCallback *funPtr, void *userData);
+ ~CFunCallbackStream();
+
+ void open(const StreamParameters ¶meters, PaStreamCallback *funPtr, void *userData);
+
+ private:
+ CFunCallbackStream(const CFunCallbackStream &); // non-copyable
+ CFunCallbackStream &operator=(const CFunCallbackStream &); // non-copyable
+ };
+
+ // -----------------------------------------------------------------------------------
} // portaudio
// ---------------------------------------------------------------------------------------
diff --git a/fdmdv2/extern/include/portaudiocpp/CallbackInterface.hxx b/fdmdv2/extern/include/portaudiocpp/CallbackInterface.hxx
index d498ec5b..c9236cdd 100644
--- a/fdmdv2/extern/include/portaudiocpp/CallbackInterface.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/CallbackInterface.hxx
@@ -9,34 +9,34 @@
namespace portaudio
{
- // -----------------------------------------------------------------------------------
-
- //////
- /// @brief Interface for an object that's callable as a PortAudioCpp callback object (ie that implements the
- /// paCallbackFun method).
- //////
- class CallbackInterface
- {
- public:
- virtual ~CallbackInterface() {}
-
- virtual int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
- const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags) = 0;
- };
-
- // -----------------------------------------------------------------------------------
-
- namespace impl
- {
- extern "C"
- {
- int callbackInterfaceToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
- const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
- void *userData);
- } // extern "C"
- }
-
- // -----------------------------------------------------------------------------------
+ // -----------------------------------------------------------------------------------
+
+ //////
+ /// @brief Interface for an object that's callable as a PortAudioCpp callback object (ie that implements the
+ /// paCallbackFun method).
+ //////
+ class CallbackInterface
+ {
+ public:
+ virtual ~CallbackInterface() {}
+
+ virtual int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
+ const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags) = 0;
+ };
+
+ // -----------------------------------------------------------------------------------
+
+ namespace impl
+ {
+ extern "C"
+ {
+ int callbackInterfaceToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
+ const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
+ void *userData);
+ } // extern "C"
+ }
+
+ // -----------------------------------------------------------------------------------
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/CallbackStream.hxx b/fdmdv2/extern/include/portaudiocpp/CallbackStream.hxx
index 0382275e..8ee6d4c4 100644
--- a/fdmdv2/extern/include/portaudiocpp/CallbackStream.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/CallbackStream.hxx
@@ -14,23 +14,23 @@ namespace portaudio
{
- //////
- /// @brief Base class for all Streams which use a callback-based mechanism.
- //////
- class CallbackStream : public Stream
- {
- protected:
- CallbackStream();
- virtual ~CallbackStream();
-
- public:
- // stream info (time-varying)
- double cpuLoad() const;
-
- private:
- CallbackStream(const CallbackStream &); // non-copyable
- CallbackStream &operator=(const CallbackStream &); // non-copyable
- };
+ //////
+ /// @brief Base class for all Streams which use a callback-based mechanism.
+ //////
+ class CallbackStream : public Stream
+ {
+ protected:
+ CallbackStream();
+ virtual ~CallbackStream();
+
+ public:
+ // stream info (time-varying)
+ double cpuLoad() const;
+
+ private:
+ CallbackStream(const CallbackStream &); // non-copyable
+ CallbackStream &operator=(const CallbackStream &); // non-copyable
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/CppFunCallbackStream.hxx b/fdmdv2/extern/include/portaudiocpp/CppFunCallbackStream.hxx
index e0c00127..08d1aabe 100644
--- a/fdmdv2/extern/include/portaudiocpp/CppFunCallbackStream.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/CppFunCallbackStream.hxx
@@ -12,7 +12,7 @@
// Forward declaration(s):
namespace portaudio
{
- class StreamParameters;
+ class StreamParameters;
}
// ---------------------------------------------------------------------------------------
@@ -22,61 +22,61 @@ namespace portaudio
{
- namespace impl
- {
- extern "C"
- {
- int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
- const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
- void *userData);
- } // extern "C"
- }
-
- // -----------------------------------------------------------------------------------
-
- //////
- /// @brief Callback stream using a C++ function (either a free function or a static function)
- /// callback.
- //////
- class FunCallbackStream : public CallbackStream
- {
- public:
- typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
- const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
- void *userData);
-
- // -------------------------------------------------------------------------------
-
- //////
- /// @brief Simple structure containing a function pointer to the C++ callback function and a
- /// (void) pointer to the user supplied data.
- //////
- struct CppToCCallbackData
- {
- CppToCCallbackData();
- CppToCCallbackData(CallbackFunPtr funPtr, void *userData);
- void init(CallbackFunPtr funPtr, void *userData);
-
- CallbackFunPtr funPtr;
- void *userData;
- };
-
- // -------------------------------------------------------------------------------
-
- FunCallbackStream();
- FunCallbackStream(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData);
- ~FunCallbackStream();
-
- void open(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData);
-
- private:
- FunCallbackStream(const FunCallbackStream &); // non-copyable
- FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable
-
- CppToCCallbackData adapterData_;
-
- void open(const StreamParameters ¶meters);
- };
+ namespace impl
+ {
+ extern "C"
+ {
+ int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
+ const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
+ void *userData);
+ } // extern "C"
+ }
+
+ // -----------------------------------------------------------------------------------
+
+ //////
+ /// @brief Callback stream using a C++ function (either a free function or a static function)
+ /// callback.
+ //////
+ class FunCallbackStream : public CallbackStream
+ {
+ public:
+ typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
+ const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
+ void *userData);
+
+ // -------------------------------------------------------------------------------
+
+ //////
+ /// @brief Simple structure containing a function pointer to the C++ callback function and a
+ /// (void) pointer to the user supplied data.
+ //////
+ struct CppToCCallbackData
+ {
+ CppToCCallbackData();
+ CppToCCallbackData(CallbackFunPtr funPtr, void *userData);
+ void init(CallbackFunPtr funPtr, void *userData);
+
+ CallbackFunPtr funPtr;
+ void *userData;
+ };
+
+ // -------------------------------------------------------------------------------
+
+ FunCallbackStream();
+ FunCallbackStream(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData);
+ ~FunCallbackStream();
+
+ void open(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData);
+
+ private:
+ FunCallbackStream(const FunCallbackStream &); // non-copyable
+ FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable
+
+ CppToCCallbackData adapterData_;
+
+ void open(const StreamParameters ¶meters);
+ };
} // portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/Device.hxx b/fdmdv2/extern/include/portaudiocpp/Device.hxx
index ffde7aa8..db5018fa 100644
--- a/fdmdv2/extern/include/portaudiocpp/Device.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/Device.hxx
@@ -14,8 +14,8 @@
// Forward declaration(s):
namespace portaudio
{
- class System;
- class HostApi;
+ class System;
+ class HostApi;
}
// ---------------------------------------------------------------------------------------
@@ -24,64 +24,64 @@ namespace portaudio
namespace portaudio
{
- //////
- /// @brief Class which represents a PortAudio device in the System.
- ///
- /// A single physical device in the system may have multiple PortAudio
- /// Device representations using different HostApi 's though. A Device
- /// can be half-duplex or full-duplex. A half-duplex Device can be used
- /// to create a half-duplex Stream. A full-duplex Device can be used to
- /// create a full-duplex Stream. If supported by the HostApi, two
- /// half-duplex Devices can even be used to create a full-duplex Stream.
- ///
- /// Note that Device objects are very light-weight and can be passed around
- /// by-value.
- //////
- class Device
- {
- public:
- // query info: name, max in channels, max out channels,
- // default low/hight input/output latency, default sample rate
- PaDeviceIndex index() const;
- const char *name() const;
- int maxInputChannels() const;
- int maxOutputChannels() const;
- PaTime defaultLowInputLatency() const;
- PaTime defaultHighInputLatency() const;
- PaTime defaultLowOutputLatency() const;
- PaTime defaultHighOutputLatency() const;
- double defaultSampleRate() const;
-
- bool isInputOnlyDevice() const; // extended
- bool isOutputOnlyDevice() const; // extended
- bool isFullDuplexDevice() const; // extended
- bool isSystemDefaultInputDevice() const; // extended
- bool isSystemDefaultOutputDevice() const; // extended
- bool isHostApiDefaultInputDevice() const; // extended
- bool isHostApiDefaultOutputDevice() const; // extended
-
- bool operator==(const Device &rhs);
- bool operator!=(const Device &rhs);
-
- // host api reference
- HostApi &hostApi();
- const HostApi &hostApi() const;
-
- private:
- PaDeviceIndex index_;
- const PaDeviceInfo *info_;
-
- private:
- friend class System;
-
- explicit Device(PaDeviceIndex index);
- ~Device();
-
- Device(const Device &); // non-copyable
- Device &operator=(const Device &); // non-copyable
- };
-
- // -----------------------------------------------------------------------------------
+ //////
+ /// @brief Class which represents a PortAudio device in the System.
+ ///
+ /// A single physical device in the system may have multiple PortAudio
+ /// Device representations using different HostApi 's though. A Device
+ /// can be half-duplex or full-duplex. A half-duplex Device can be used
+ /// to create a half-duplex Stream. A full-duplex Device can be used to
+ /// create a full-duplex Stream. If supported by the HostApi, two
+ /// half-duplex Devices can even be used to create a full-duplex Stream.
+ ///
+ /// Note that Device objects are very light-weight and can be passed around
+ /// by-value.
+ //////
+ class Device
+ {
+ public:
+ // query info: name, max in channels, max out channels,
+ // default low/hight input/output latency, default sample rate
+ PaDeviceIndex index() const;
+ const char *name() const;
+ int maxInputChannels() const;
+ int maxOutputChannels() const;
+ PaTime defaultLowInputLatency() const;
+ PaTime defaultHighInputLatency() const;
+ PaTime defaultLowOutputLatency() const;
+ PaTime defaultHighOutputLatency() const;
+ double defaultSampleRate() const;
+
+ bool isInputOnlyDevice() const; // extended
+ bool isOutputOnlyDevice() const; // extended
+ bool isFullDuplexDevice() const; // extended
+ bool isSystemDefaultInputDevice() const; // extended
+ bool isSystemDefaultOutputDevice() const; // extended
+ bool isHostApiDefaultInputDevice() const; // extended
+ bool isHostApiDefaultOutputDevice() const; // extended
+
+ bool operator==(const Device &rhs);
+ bool operator!=(const Device &rhs);
+
+ // host api reference
+ HostApi &hostApi();
+ const HostApi &hostApi() const;
+
+ private:
+ PaDeviceIndex index_;
+ const PaDeviceInfo *info_;
+
+ private:
+ friend class System;
+
+ explicit Device(PaDeviceIndex index);
+ ~Device();
+
+ Device(const Device &); // non-copyable
+ Device &operator=(const Device &); // non-copyable
+ };
+
+ // -----------------------------------------------------------------------------------
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/DirectionSpecificStreamParameters.hxx b/fdmdv2/extern/include/portaudiocpp/DirectionSpecificStreamParameters.hxx
index dd5ae0b9..5001149b 100644
--- a/fdmdv2/extern/include/portaudiocpp/DirectionSpecificStreamParameters.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/DirectionSpecificStreamParameters.hxx
@@ -15,7 +15,7 @@
// Forward declaration(s):
namespace portaudio
{
- class Device;
+ class Device;
}
// ---------------------------------------------------------------------------------------
@@ -24,50 +24,50 @@ namespace portaudio
namespace portaudio
{
- //////
- /// @brief All parameters for one direction (either in or out) of a Stream. Together with
- /// parameters common to both directions, two DirectionSpecificStreamParameters can make up
- /// a StreamParameters object which contains all parameters for a Stream.
- //////
- class DirectionSpecificStreamParameters
- {
- public:
- static DirectionSpecificStreamParameters null();
+ //////
+ /// @brief All parameters for one direction (either in or out) of a Stream. Together with
+ /// parameters common to both directions, two DirectionSpecificStreamParameters can make up
+ /// a StreamParameters object which contains all parameters for a Stream.
+ //////
+ class DirectionSpecificStreamParameters
+ {
+ public:
+ static DirectionSpecificStreamParameters null();
- DirectionSpecificStreamParameters();
- DirectionSpecificStreamParameters(const Device &device, int numChannels, SampleDataFormat format,
- bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo);
+ DirectionSpecificStreamParameters();
+ DirectionSpecificStreamParameters(const Device &device, int numChannels, SampleDataFormat format,
+ bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo);
- // Set up methods:
- void setDevice(const Device &device);
- void setNumChannels(int numChannels);
+ // Set up methods:
+ void setDevice(const Device &device);
+ void setNumChannels(int numChannels);
- void setSampleFormat(SampleDataFormat format, bool interleaved = true);
- void setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved = true);
+ void setSampleFormat(SampleDataFormat format, bool interleaved = true);
+ void setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved = true);
- void setSuggestedLatency(PaTime latency);
+ void setSuggestedLatency(PaTime latency);
- void setHostApiSpecificStreamInfo(void *streamInfo);
+ void setHostApiSpecificStreamInfo(void *streamInfo);
- // Accessor methods:
- PaStreamParameters *paStreamParameters();
- const PaStreamParameters *paStreamParameters() const;
+ // Accessor methods:
+ PaStreamParameters *paStreamParameters();
+ const PaStreamParameters *paStreamParameters() const;
- Device &device() const;
- int numChannels() const;
+ Device &device() const;
+ int numChannels() const;
- SampleDataFormat sampleFormat() const;
- bool isSampleFormatInterleaved() const;
- bool isSampleFormatHostApiSpecific() const;
- PaSampleFormat hostApiSpecificSampleFormat() const;
+ SampleDataFormat sampleFormat() const;
+ bool isSampleFormatInterleaved() const;
+ bool isSampleFormatHostApiSpecific() const;
+ PaSampleFormat hostApiSpecificSampleFormat() const;
- PaTime suggestedLatency() const;
+ PaTime suggestedLatency() const;
- void *hostApiSpecificStreamInfo() const;
-
- private:
- PaStreamParameters paStreamParameters_;
- };
+ void *hostApiSpecificStreamInfo() const;
+
+ private:
+ PaStreamParameters paStreamParameters_;
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/Exception.hxx b/fdmdv2/extern/include/portaudiocpp/Exception.hxx
index a70c2f1d..96e4ad2f 100644
--- a/fdmdv2/extern/include/portaudiocpp/Exception.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/Exception.hxx
@@ -12,92 +12,92 @@
namespace portaudio
{
- //////
- /// @brief Base class for all exceptions PortAudioCpp can throw.
- ///
- /// Class is derived from std::exception.
- //////
- class Exception : public std::exception
- {
- public:
- virtual ~Exception() throw() {}
-
- virtual const char *what() const throw() = 0;
- };
-
- // -----------------------------------------------------------------------------------
-
- //////
- /// @brief Wrapper for PortAudio error codes to C++ exceptions.
- ///
- /// It wraps up PortAudio's error handling mechanism using
- /// C++ exceptions and is derived from std::exception for
- /// easy exception handling and to ease integration with
- /// other code.
- ///
- /// To know what exceptions each function may throw, look up
- /// the errors that can occure in the PortAudio documentation
- /// for the equivalent functions.
- ///
- /// Some functions are likely to throw an exception (such as
- /// Stream::open(), etc) and these should always be called in
- /// try{} catch{} blocks and the thrown exceptions should be
- /// handled properly (ie. the application shouldn't just abort,
- /// but merely display a warning dialog to the user or something).
- /// However nearly all functions in PortAudioCpp are capable
- /// of throwing exceptions. When a function like Stream::isStopped()
- /// throws an exception, it's such an exceptional state that it's
- /// not likely that it can be recovered. PaExceptions such as these
- /// can ``safely'' be left to be handled by some outer catch-all-like
- /// mechanism for unrecoverable errors.
- //////
- class PaException : public Exception
- {
- public:
- explicit PaException(PaError error);
-
- const char *what() const throw();
-
- PaError paError() const;
- const char *paErrorText() const;
-
- bool isHostApiError() const; // extended
- long lastHostApiError() const;
- const char *lastHostApiErrorText() const;
-
- bool operator==(const PaException &rhs) const;
- bool operator!=(const PaException &rhs) const;
-
- private:
- PaError error_;
- };
-
- // -----------------------------------------------------------------------------------
-
- //////
- /// @brief Exceptions specific to PortAudioCpp (ie. exceptions which do not have an
- /// equivalent PortAudio error code).
- //////
- class PaCppException : public Exception
- {
- public:
- enum ExceptionSpecifier
- {
- UNABLE_TO_ADAPT_DEVICE
- };
-
- PaCppException(ExceptionSpecifier specifier);
-
- const char *what() const throw();
-
- ExceptionSpecifier specifier() const;
-
- bool operator==(const PaCppException &rhs) const;
- bool operator!=(const PaCppException &rhs) const;
-
- private:
- ExceptionSpecifier specifier_;
- };
+ //////
+ /// @brief Base class for all exceptions PortAudioCpp can throw.
+ ///
+ /// Class is derived from std::exception.
+ //////
+ class Exception : public std::exception
+ {
+ public:
+ virtual ~Exception() throw() {}
+
+ virtual const char *what() const throw() = 0;
+ };
+
+ // -----------------------------------------------------------------------------------
+
+ //////
+ /// @brief Wrapper for PortAudio error codes to C++ exceptions.
+ ///
+ /// It wraps up PortAudio's error handling mechanism using
+ /// C++ exceptions and is derived from std::exception for
+ /// easy exception handling and to ease integration with
+ /// other code.
+ ///
+ /// To know what exceptions each function may throw, look up
+ /// the errors that can occure in the PortAudio documentation
+ /// for the equivalent functions.
+ ///
+ /// Some functions are likely to throw an exception (such as
+ /// Stream::open(), etc) and these should always be called in
+ /// try{} catch{} blocks and the thrown exceptions should be
+ /// handled properly (ie. the application shouldn't just abort,
+ /// but merely display a warning dialog to the user or something).
+ /// However nearly all functions in PortAudioCpp are capable
+ /// of throwing exceptions. When a function like Stream::isStopped()
+ /// throws an exception, it's such an exceptional state that it's
+ /// not likely that it can be recovered. PaExceptions such as these
+ /// can ``safely'' be left to be handled by some outer catch-all-like
+ /// mechanism for unrecoverable errors.
+ //////
+ class PaException : public Exception
+ {
+ public:
+ explicit PaException(PaError error);
+
+ const char *what() const throw();
+
+ PaError paError() const;
+ const char *paErrorText() const;
+
+ bool isHostApiError() const; // extended
+ long lastHostApiError() const;
+ const char *lastHostApiErrorText() const;
+
+ bool operator==(const PaException &rhs) const;
+ bool operator!=(const PaException &rhs) const;
+
+ private:
+ PaError error_;
+ };
+
+ // -----------------------------------------------------------------------------------
+
+ //////
+ /// @brief Exceptions specific to PortAudioCpp (ie. exceptions which do not have an
+ /// equivalent PortAudio error code).
+ //////
+ class PaCppException : public Exception
+ {
+ public:
+ enum ExceptionSpecifier
+ {
+ UNABLE_TO_ADAPT_DEVICE
+ };
+
+ PaCppException(ExceptionSpecifier specifier);
+
+ const char *what() const throw();
+
+ ExceptionSpecifier specifier() const;
+
+ bool operator==(const PaCppException &rhs) const;
+ bool operator!=(const PaCppException &rhs) const;
+
+ private:
+ ExceptionSpecifier specifier_;
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/HostApi.hxx b/fdmdv2/extern/include/portaudiocpp/HostApi.hxx
index 899fc42d..a51cfe07 100644
--- a/fdmdv2/extern/include/portaudiocpp/HostApi.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/HostApi.hxx
@@ -12,7 +12,7 @@
// Forward declaration(s):
namespace portaudio
{
- class Device;
+ class Device;
}
// ---------------------------------------------------------------------------------------
@@ -22,50 +22,50 @@ namespace portaudio
{
- //////
- /// @brief HostApi represents a host API (usually type of driver) in the System.
- ///
- /// A single System can support multiple HostApi's each one typically having
- /// a set of Devices using that HostApi (usually driver type). All Devices in
- /// the HostApi can be enumerated and the default input/output Device for this
- /// HostApi can be retreived.
- //////
- class HostApi
- {
- public:
- typedef System::DeviceIterator DeviceIterator;
-
- // query info: id, name, numDevices
- PaHostApiTypeId typeId() const;
- PaHostApiIndex index() const;
- const char *name() const;
- int deviceCount() const;
-
- // iterate devices
- DeviceIterator devicesBegin();
- DeviceIterator devicesEnd();
-
- // default devices
- Device &defaultInputDevice() const;
- Device &defaultOutputDevice() const;
-
- // comparison operators
- bool operator==(const HostApi &rhs) const;
- bool operator!=(const HostApi &rhs) const;
-
- private:
- const PaHostApiInfo *info_;
- Device **devices_;
-
- private:
- friend class System;
-
- explicit HostApi(PaHostApiIndex index);
- ~HostApi();
-
- HostApi(const HostApi &); // non-copyable
- HostApi &operator=(const HostApi &); // non-copyable
- };
+ //////
+ /// @brief HostApi represents a host API (usually type of driver) in the System.
+ ///
+ /// A single System can support multiple HostApi's each one typically having
+ /// a set of Devices using that HostApi (usually driver type). All Devices in
+ /// the HostApi can be enumerated and the default input/output Device for this
+ /// HostApi can be retreived.
+ //////
+ class HostApi
+ {
+ public:
+ typedef System::DeviceIterator DeviceIterator;
+
+ // query info: id, name, numDevices
+ PaHostApiTypeId typeId() const;
+ PaHostApiIndex index() const;
+ const char *name() const;
+ int deviceCount() const;
+
+ // iterate devices
+ DeviceIterator devicesBegin();
+ DeviceIterator devicesEnd();
+
+ // default devices
+ Device &defaultInputDevice() const;
+ Device &defaultOutputDevice() const;
+
+ // comparison operators
+ bool operator==(const HostApi &rhs) const;
+ bool operator!=(const HostApi &rhs) const;
+
+ private:
+ const PaHostApiInfo *info_;
+ Device **devices_;
+
+ private:
+ friend class System;
+
+ explicit HostApi(PaHostApiIndex index);
+ ~HostApi();
+
+ HostApi(const HostApi &); // non-copyable
+ HostApi &operator=(const HostApi &); // non-copyable
+ };
}
diff --git a/fdmdv2/extern/include/portaudiocpp/InterfaceCallbackStream.hxx b/fdmdv2/extern/include/portaudiocpp/InterfaceCallbackStream.hxx
index e496dd27..5e03035b 100644
--- a/fdmdv2/extern/include/portaudiocpp/InterfaceCallbackStream.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/InterfaceCallbackStream.hxx
@@ -12,8 +12,8 @@
// Forward declaration(s)
namespace portaudio
{
- class StreamParameters;
- class CallbackInterface;
+ class StreamParameters;
+ class CallbackInterface;
}
// ---------------------------------------------------------------------------------------
@@ -23,23 +23,23 @@ namespace portaudio
{
- //////
- /// @brief Callback stream using an instance of an object that's derived from the CallbackInterface
- /// interface.
- //////
- class InterfaceCallbackStream : public CallbackStream
- {
- public:
- InterfaceCallbackStream();
- InterfaceCallbackStream(const StreamParameters ¶meters, CallbackInterface &instance);
- ~InterfaceCallbackStream();
-
- void open(const StreamParameters ¶meters, CallbackInterface &instance);
-
- private:
- InterfaceCallbackStream(const InterfaceCallbackStream &); // non-copyable
- InterfaceCallbackStream &operator=(const InterfaceCallbackStream &); // non-copyable
- };
+ //////
+ /// @brief Callback stream using an instance of an object that's derived from the CallbackInterface
+ /// interface.
+ //////
+ class InterfaceCallbackStream : public CallbackStream
+ {
+ public:
+ InterfaceCallbackStream();
+ InterfaceCallbackStream(const StreamParameters ¶meters, CallbackInterface &instance);
+ ~InterfaceCallbackStream();
+
+ void open(const StreamParameters ¶meters, CallbackInterface &instance);
+
+ private:
+ InterfaceCallbackStream(const InterfaceCallbackStream &); // non-copyable
+ InterfaceCallbackStream &operator=(const InterfaceCallbackStream &); // non-copyable
+ };
} // portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/MemFunCallbackStream.hxx b/fdmdv2/extern/include/portaudiocpp/MemFunCallbackStream.hxx
index a9e50ca6..a04c5be3 100644
--- a/fdmdv2/extern/include/portaudiocpp/MemFunCallbackStream.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/MemFunCallbackStream.hxx
@@ -17,87 +17,87 @@ namespace portaudio
{
- //////
- /// @brief Callback stream using a class's member function as a callback. Template argument T is the type of the
- /// class of which a member function is going to be used.
- ///
- /// Example usage:
- /// @verbatim MemFunCallback stream = MemFunCallbackStream(parameters, *this, &MyClass::myCallbackFunction); @endverbatim
- //////
- template
- class MemFunCallbackStream : public CallbackStream
- {
- public:
- typedef int (T::*CallbackFunPtr)(const void *, void *, unsigned long, const PaStreamCallbackTimeInfo *,
- PaStreamCallbackFlags);
-
- // -------------------------------------------------------------------------------
-
- MemFunCallbackStream()
- {
- }
-
- MemFunCallbackStream(const StreamParameters ¶meters, T &instance, CallbackFunPtr memFun) : adapter_(instance, memFun)
- {
- open(parameters);
- }
-
- ~MemFunCallbackStream()
- {
- close();
- }
-
- void open(const StreamParameters ¶meters, T &instance, CallbackFunPtr memFun)
- {
- // XXX: need to check if already open?
-
- adapter_.init(instance, memFun);
- open(parameters);
- }
-
- private:
- MemFunCallbackStream(const MemFunCallbackStream &); // non-copyable
- MemFunCallbackStream &operator=(const MemFunCallbackStream &); // non-copyable
-
- //////
- /// @brief Inner class which adapts a member function callback to a CallbackInterface compliant
- /// class (so it can be adapted using the paCallbackAdapter function).
- //////
- class MemFunToCallbackInterfaceAdapter : public CallbackInterface
- {
- public:
- MemFunToCallbackInterfaceAdapter() {}
- MemFunToCallbackInterfaceAdapter(T &instance, CallbackFunPtr memFun) : instance_(&instance), memFun_(memFun) {}
-
- void init(T &instance, CallbackFunPtr memFun)
- {
- instance_ = &instance;
- memFun_ = memFun;
- }
-
- int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
- const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags)
- {
- return (instance_->*memFun_)(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags);
- }
-
- private:
- T *instance_;
- CallbackFunPtr memFun_;
- };
-
- MemFunToCallbackInterfaceAdapter adapter_;
-
- void open(const StreamParameters ¶meters)
- {
- PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
- parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::callbackInterfaceToPaCallbackAdapter,
- static_cast(&adapter_));
-
- if (err != paNoError)
- throw PaException(err);
- }
- };
+ //////
+ /// @brief Callback stream using a class's member function as a callback. Template argument T is the type of the
+ /// class of which a member function is going to be used.
+ ///
+ /// Example usage:
+ /// @verbatim MemFunCallback stream = MemFunCallbackStream(parameters, *this, &MyClass::myCallbackFunction); @endverbatim
+ //////
+ template
+ class MemFunCallbackStream : public CallbackStream
+ {
+ public:
+ typedef int (T::*CallbackFunPtr)(const void *, void *, unsigned long, const PaStreamCallbackTimeInfo *,
+ PaStreamCallbackFlags);
+
+ // -------------------------------------------------------------------------------
+
+ MemFunCallbackStream()
+ {
+ }
+
+ MemFunCallbackStream(const StreamParameters ¶meters, T &instance, CallbackFunPtr memFun) : adapter_(instance, memFun)
+ {
+ open(parameters);
+ }
+
+ ~MemFunCallbackStream()
+ {
+ close();
+ }
+
+ void open(const StreamParameters ¶meters, T &instance, CallbackFunPtr memFun)
+ {
+ // XXX: need to check if already open?
+
+ adapter_.init(instance, memFun);
+ open(parameters);
+ }
+
+ private:
+ MemFunCallbackStream(const MemFunCallbackStream &); // non-copyable
+ MemFunCallbackStream &operator=(const MemFunCallbackStream &); // non-copyable
+
+ //////
+ /// @brief Inner class which adapts a member function callback to a CallbackInterface compliant
+ /// class (so it can be adapted using the paCallbackAdapter function).
+ //////
+ class MemFunToCallbackInterfaceAdapter : public CallbackInterface
+ {
+ public:
+ MemFunToCallbackInterfaceAdapter() {}
+ MemFunToCallbackInterfaceAdapter(T &instance, CallbackFunPtr memFun) : instance_(&instance), memFun_(memFun) {}
+
+ void init(T &instance, CallbackFunPtr memFun)
+ {
+ instance_ = &instance;
+ memFun_ = memFun;
+ }
+
+ int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
+ const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags)
+ {
+ return (instance_->*memFun_)(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags);
+ }
+
+ private:
+ T *instance_;
+ CallbackFunPtr memFun_;
+ };
+
+ MemFunToCallbackInterfaceAdapter adapter_;
+
+ void open(const StreamParameters ¶meters)
+ {
+ PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
+ parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::callbackInterfaceToPaCallbackAdapter,
+ static_cast(&adapter_));
+
+ if (err != paNoError)
+ throw PaException(err);
+ }
+ };
} // portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/PortAudioCpp.hxx b/fdmdv2/extern/include/portaudiocpp/PortAudioCpp.hxx
index f11e7fb9..9b9dfe36 100644
--- a/fdmdv2/extern/include/portaudiocpp/PortAudioCpp.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/PortAudioCpp.hxx
@@ -6,23 +6,23 @@
//////
/// @mainpage PortAudioCpp
///
-/// PortAudioCpp - A Native C++ Binding of PortAudio V19
+/// PortAudioCpp - A Native C++ Binding of PortAudio V19
/// PortAudio
///
-/// PortAudio is a portable and mature C API for accessing audio hardware. It offers both callback-based and blocking
-/// style input and output, deals with sample data format conversions, dithering and much more. There are a large number
-/// of implementations available for various platforms including Windows MME, Windows DirectX, Windows and MacOS (Classic)
-/// ASIO, MacOS Classic SoundManager, MacOS X CoreAudio, OSS (Linux), Linux ALSA, JACK (MacOS X and Linux) and SGI Irix
-/// AL. Note that, currently not all of these implementations are equally complete or up-to-date (as PortAudio V19 is
-/// still in development). Because PortAudio has a C API, it can easily be called from a variety of other programming
+/// PortAudio is a portable and mature C API for accessing audio hardware. It offers both callback-based and blocking
+/// style input and output, deals with sample data format conversions, dithering and much more. There are a large number
+/// of implementations available for various platforms including Windows MME, Windows DirectX, Windows and MacOS (Classic)
+/// ASIO, MacOS Classic SoundManager, MacOS X CoreAudio, OSS (Linux), Linux ALSA, JACK (MacOS X and Linux) and SGI Irix
+/// AL. Note that, currently not all of these implementations are equally complete or up-to-date (as PortAudio V19 is
+/// still in development). Because PortAudio has a C API, it can easily be called from a variety of other programming
/// languages.
///
/// PortAudioCpp
///
-/// Although, it is possible to use PortAudio's C API from within a C++ program, this is usually a little awkward
-/// as procedural and object-oriented paradigms need to be mixed. PortAudioCpp aims to resolve this by encapsulating
-/// PortAudio's C API to form an equivalent object-oriented C++ API. It provides a more natural integration of PortAudio
-/// into C++ programs as well as a more structured interface. PortAudio's concepts were preserved as much as possible and
+/// Although, it is possible to use PortAudio's C API from within a C++ program, this is usually a little awkward
+/// as procedural and object-oriented paradigms need to be mixed. PortAudioCpp aims to resolve this by encapsulating
+/// PortAudio's C API to form an equivalent object-oriented C++ API. It provides a more natural integration of PortAudio
+/// into C++ programs as well as a more structured interface. PortAudio's concepts were preserved as much as possible and
/// no additional features were added except for some `convenience methods'.
///
///
@@ -30,15 +30,15 @@
///
/// - Structured object model.
/// - C++ exception handling instead of C-style error return codes.
-/// - Handling of callbacks using free functions (C and C++), static functions, member functions or instances of classes
+///
- Handling of callbacks using free functions (C and C++), static functions, member functions or instances of classes
/// derived from a given interface.
/// - STL compliant iterators to host APIs and devices.
/// - Some additional convenience functions to more easily set up and use PortAudio.
///
///
///
-/// PortAudioCpp requires a recent version of the PortAudio V19 source code. This can be obtained from CVS or as a snapshot
-/// from the website. The examples also require the ASIO 2 SDK which can be obtained from the Steinberg website. Alternatively, the
+/// PortAudioCpp requires a recent version of the PortAudio V19 source code. This can be obtained from CVS or as a snapshot
+/// from the website. The examples also require the ASIO 2 SDK which can be obtained from the Steinberg website. Alternatively, the
/// examples can easily be modified to compile without needing ASIO.
///
///
@@ -50,12 +50,12 @@
/// Other platforms should be easily supported as PortAudioCpp is platform-independent and (reasonably) C++ standard compliant.
///
///
-/// This documentation mainly provides information specific to PortAudioCpp. For a more complete explaination of all of the
+/// This documentation mainly provides information specific to PortAudioCpp. For a more complete explaination of all of the
/// concepts used, please consult the PortAudio documentation.
///
///
-/// PortAudioCpp was developed by Merlijn Blaauw with many great suggestions and help from Ross Bencina. Ludwig Schwardt provided
-/// GNU/Linux build files and checked G++ compatibility. PortAudioCpp may be used under the same licensing, conditions and
+/// PortAudioCpp was developed by Merlijn Blaauw with many great suggestions and help from Ross Bencina. Ludwig Schwardt provided
+/// GNU/Linux build files and checked G++ compatibility. PortAudioCpp may be used under the same licensing, conditions and
/// warranty as PortAudio. See the PortAudio license for more details.
///
/// Links
@@ -69,8 +69,8 @@
//////
/// @namespace portaudio
///
-/// To avoid name collision, everything in PortAudioCpp is in the portaudio
-/// namespace. If this name is too long it's usually pretty safe to use an
+/// To avoid name collision, everything in PortAudioCpp is in the portaudio
+/// namespace. If this name is too long it's usually pretty safe to use an
/// alias like ``namespace pa = portaudio;''.
//////
diff --git a/fdmdv2/extern/include/portaudiocpp/SampleDataFormat.hxx b/fdmdv2/extern/include/portaudiocpp/SampleDataFormat.hxx
index a7e25b24..5224768b 100644
--- a/fdmdv2/extern/include/portaudiocpp/SampleDataFormat.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/SampleDataFormat.hxx
@@ -11,21 +11,21 @@ namespace portaudio
{
- //////
- /// @brief PortAudio sample data formats.
- ///
- /// Small helper enum to wrap the PortAudio defines.
- //////
- enum SampleDataFormat
- {
- INVALID_FORMAT = 0,
- FLOAT32 = paFloat32,
- INT32 = paInt32,
- INT24 = paInt24,
- INT16 = paInt16,
- INT8 = paInt8,
- UINT8 = paUInt8
- };
+ //////
+ /// @brief PortAudio sample data formats.
+ ///
+ /// Small helper enum to wrap the PortAudio defines.
+ //////
+ enum SampleDataFormat
+ {
+ INVALID_FORMAT = 0,
+ FLOAT32 = paFloat32,
+ INT32 = paInt32,
+ INT24 = paInt24,
+ INT16 = paInt16,
+ INT8 = paInt8,
+ UINT8 = paUInt8
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/Stream.hxx b/fdmdv2/extern/include/portaudiocpp/Stream.hxx
index 8a255ec7..80c363d0 100644
--- a/fdmdv2/extern/include/portaudiocpp/Stream.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/Stream.hxx
@@ -8,7 +8,7 @@
// Forward declaration(s):
namespace portaudio
{
- class StreamParameters;
+ class StreamParameters;
}
// ---------------------------------------------------------------------------------------
@@ -18,61 +18,61 @@ namespace portaudio
{
- //////
- /// @brief A Stream represents an active or inactive input and/or output data
- /// stream in the System.
- ///
- /// Concrete Stream classes should ensure themselves being in a closed state at
- /// destruction (i.e. by calling their own close() method in their deconstructor).
- /// Following good C++ programming practices, care must be taken to ensure no
- /// exceptions are thrown by the deconstructor of these classes. As a consequence,
- /// clients need to explicitly call close() to ensure the stream closed successfully.
- ///
- /// The Stream object can be used to manipulate the Stream's state. Also, time-constant
- /// and time-varying information about the Stream can be retreived.
- //////
- class Stream
- {
- public:
- // Opening/closing:
- virtual ~Stream();
-
- virtual void close();
- bool isOpen() const;
-
- // Additional set up:
- void setStreamFinishedCallback(PaStreamFinishedCallback *callback);
-
- // State management:
- void start();
- void stop();
- void abort();
-
- bool isStopped() const;
- bool isActive() const;
-
- // Stream info (time-constant, but might become time-variant soon):
- PaTime inputLatency() const;
- PaTime outputLatency() const;
- double sampleRate() const;
-
- // Stream info (time-varying):
- PaTime time() const;
-
- // Accessors for PortAudio PaStream, useful for interfacing
- // with PortAudio add-ons (such as PortMixer) for instance:
- const PaStream *paStream() const;
- PaStream *paStream();
-
- protected:
- Stream(); // abstract class
-
- PaStream *stream_;
-
- private:
- Stream(const Stream &); // non-copyable
- Stream &operator=(const Stream &); // non-copyable
- };
+ //////
+ /// @brief A Stream represents an active or inactive input and/or output data
+ /// stream in the System.
+ ///
+ /// Concrete Stream classes should ensure themselves being in a closed state at
+ /// destruction (i.e. by calling their own close() method in their deconstructor).
+ /// Following good C++ programming practices, care must be taken to ensure no
+ /// exceptions are thrown by the deconstructor of these classes. As a consequence,
+ /// clients need to explicitly call close() to ensure the stream closed successfully.
+ ///
+ /// The Stream object can be used to manipulate the Stream's state. Also, time-constant
+ /// and time-varying information about the Stream can be retreived.
+ //////
+ class Stream
+ {
+ public:
+ // Opening/closing:
+ virtual ~Stream();
+
+ virtual void close();
+ bool isOpen() const;
+
+ // Additional set up:
+ void setStreamFinishedCallback(PaStreamFinishedCallback *callback);
+
+ // State management:
+ void start();
+ void stop();
+ void abort();
+
+ bool isStopped() const;
+ bool isActive() const;
+
+ // Stream info (time-constant, but might become time-variant soon):
+ PaTime inputLatency() const;
+ PaTime outputLatency() const;
+ double sampleRate() const;
+
+ // Stream info (time-varying):
+ PaTime time() const;
+
+ // Accessors for PortAudio PaStream, useful for interfacing
+ // with PortAudio add-ons (such as PortMixer) for instance:
+ const PaStream *paStream() const;
+ PaStream *paStream();
+
+ protected:
+ Stream(); // abstract class
+
+ PaStream *stream_;
+
+ private:
+ Stream(const Stream &); // non-copyable
+ Stream &operator=(const Stream &); // non-copyable
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/StreamParameters.hxx b/fdmdv2/extern/include/portaudiocpp/StreamParameters.hxx
index 2b6aa2ef..d9b90e9e 100644
--- a/fdmdv2/extern/include/portaudiocpp/StreamParameters.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/StreamParameters.hxx
@@ -13,61 +13,61 @@
namespace portaudio
{
- //////
- /// @brief The entire set of parameters needed to configure and open
- /// a Stream.
- ///
- /// It contains parameters of input, output and shared parameters.
- /// Using the isSupported() method, the StreamParameters can be
- /// checked if opening a Stream using this StreamParameters would
- /// succeed or not. Accessors are provided to higher-level parameters
- /// aswell as the lower-level parameters which are mainly intended for
- /// internal use.
- //////
- class StreamParameters
- {
- public:
- StreamParameters();
- StreamParameters(const DirectionSpecificStreamParameters &inputParameters,
- const DirectionSpecificStreamParameters &outputParameters, double sampleRate,
- unsigned long framesPerBuffer, PaStreamFlags flags);
-
- // Set up for direction-specific:
- void setInputParameters(const DirectionSpecificStreamParameters ¶meters);
- void setOutputParameters(const DirectionSpecificStreamParameters ¶meters);
-
- // Set up for common parameters:
- void setSampleRate(double sampleRate);
- void setFramesPerBuffer(unsigned long framesPerBuffer);
- void setFlag(PaStreamFlags flag);
- void unsetFlag(PaStreamFlags flag);
- void clearFlags();
-
- // Validation:
- bool isSupported() const;
-
- // Accessors (direction-specific):
- DirectionSpecificStreamParameters &inputParameters();
- const DirectionSpecificStreamParameters &inputParameters() const;
- DirectionSpecificStreamParameters &outputParameters();
- const DirectionSpecificStreamParameters &outputParameters() const;
-
- // Accessors (common):
- double sampleRate() const;
- unsigned long framesPerBuffer() const;
- PaStreamFlags flags() const;
- bool isFlagSet(PaStreamFlags flag) const;
-
- private:
- // Half-duplex specific parameters:
- DirectionSpecificStreamParameters inputParameters_;
- DirectionSpecificStreamParameters outputParameters_;
-
- // Common parameters:
- double sampleRate_;
- unsigned long framesPerBuffer_;
- PaStreamFlags flags_;
- };
+ //////
+ /// @brief The entire set of parameters needed to configure and open
+ /// a Stream.
+ ///
+ /// It contains parameters of input, output and shared parameters.
+ /// Using the isSupported() method, the StreamParameters can be
+ /// checked if opening a Stream using this StreamParameters would
+ /// succeed or not. Accessors are provided to higher-level parameters
+ /// aswell as the lower-level parameters which are mainly intended for
+ /// internal use.
+ //////
+ class StreamParameters
+ {
+ public:
+ StreamParameters();
+ StreamParameters(const DirectionSpecificStreamParameters &inputParameters,
+ const DirectionSpecificStreamParameters &outputParameters, double sampleRate,
+ unsigned long framesPerBuffer, PaStreamFlags flags);
+
+ // Set up for direction-specific:
+ void setInputParameters(const DirectionSpecificStreamParameters ¶meters);
+ void setOutputParameters(const DirectionSpecificStreamParameters ¶meters);
+
+ // Set up for common parameters:
+ void setSampleRate(double sampleRate);
+ void setFramesPerBuffer(unsigned long framesPerBuffer);
+ void setFlag(PaStreamFlags flag);
+ void unsetFlag(PaStreamFlags flag);
+ void clearFlags();
+
+ // Validation:
+ bool isSupported() const;
+
+ // Accessors (direction-specific):
+ DirectionSpecificStreamParameters &inputParameters();
+ const DirectionSpecificStreamParameters &inputParameters() const;
+ DirectionSpecificStreamParameters &outputParameters();
+ const DirectionSpecificStreamParameters &outputParameters() const;
+
+ // Accessors (common):
+ double sampleRate() const;
+ unsigned long framesPerBuffer() const;
+ PaStreamFlags flags() const;
+ bool isFlagSet(PaStreamFlags flag) const;
+
+ private:
+ // Half-duplex specific parameters:
+ DirectionSpecificStreamParameters inputParameters_;
+ DirectionSpecificStreamParameters outputParameters_;
+
+ // Common parameters:
+ double sampleRate_;
+ unsigned long framesPerBuffer_;
+ PaStreamFlags flags_;
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/System.hxx b/fdmdv2/extern/include/portaudiocpp/System.hxx
index f5fb7132..014cc20b 100644
--- a/fdmdv2/extern/include/portaudiocpp/System.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/System.hxx
@@ -10,9 +10,9 @@
// Forward declaration(s):
namespace portaudio
{
- class Device;
- class Stream;
- class HostApi;
+ class Device;
+ class Stream;
+ class HostApi;
}
// ---------------------------------------------------------------------------------------
@@ -22,82 +22,82 @@ namespace portaudio
{
- //////
- /// @brief System singleton which represents the PortAudio system.
- ///
- /// The System is used to initialize/terminate PortAudio and provide
- /// a single acccess point to the PortAudio System (instance()).
- /// It can be used to iterate through all HostApi 's in the System as
- /// well as all devices in the System. It also provides some utility
- /// functionality of PortAudio.
- ///
- /// Terminating the System will also abort and close the open streams.
- /// The Stream objects will need to be deallocated by the client though
- /// (it's usually a good idea to have them cleaned up automatically).
- //////
- class System
- {
- public:
- class HostApiIterator; // forward declaration
- class DeviceIterator; // forward declaration
+ //////
+ /// @brief System singleton which represents the PortAudio system.
+ ///
+ /// The System is used to initialize/terminate PortAudio and provide
+ /// a single acccess point to the PortAudio System (instance()).
+ /// It can be used to iterate through all HostApi 's in the System as
+ /// well as all devices in the System. It also provides some utility
+ /// functionality of PortAudio.
+ ///
+ /// Terminating the System will also abort and close the open streams.
+ /// The Stream objects will need to be deallocated by the client though
+ /// (it's usually a good idea to have them cleaned up automatically).
+ //////
+ class System
+ {
+ public:
+ class HostApiIterator; // forward declaration
+ class DeviceIterator; // forward declaration
- // -------------------------------------------------------------------------------
+ // -------------------------------------------------------------------------------
- static int version();
- static const char *versionText();
+ static int version();
+ static const char *versionText();
- static void initialize();
- static void terminate();
+ static void initialize();
+ static void terminate();
- static System &instance();
- static bool exists();
+ static System &instance();
+ static bool exists();
- // -------------------------------------------------------------------------------
+ // -------------------------------------------------------------------------------
- // host apis:
- HostApiIterator hostApisBegin();
- HostApiIterator hostApisEnd();
+ // host apis:
+ HostApiIterator hostApisBegin();
+ HostApiIterator hostApisEnd();
- HostApi &defaultHostApi();
+ HostApi &defaultHostApi();
- HostApi &hostApiByTypeId(PaHostApiTypeId type);
- HostApi &hostApiByIndex(PaHostApiIndex index);
+ HostApi &hostApiByTypeId(PaHostApiTypeId type);
+ HostApi &hostApiByIndex(PaHostApiIndex index);
- int hostApiCount();
+ int hostApiCount();
- // -------------------------------------------------------------------------------
+ // -------------------------------------------------------------------------------
- // devices:
- DeviceIterator devicesBegin();
- DeviceIterator devicesEnd();
+ // devices:
+ DeviceIterator devicesBegin();
+ DeviceIterator devicesEnd();
- Device &defaultInputDevice();
- Device &defaultOutputDevice();
+ Device &defaultInputDevice();
+ Device &defaultOutputDevice();
- Device &deviceByIndex(PaDeviceIndex index);
+ Device &deviceByIndex(PaDeviceIndex index);
- int deviceCount();
+ int deviceCount();
- static Device &nullDevice();
+ static Device &nullDevice();
- // -------------------------------------------------------------------------------
+ // -------------------------------------------------------------------------------
- // misc:
- void sleep(long msec);
- int sizeOfSample(PaSampleFormat format);
+ // misc:
+ void sleep(long msec);
+ int sizeOfSample(PaSampleFormat format);
- private:
- System();
- ~System();
+ private:
+ System();
+ ~System();
- static System *instance_;
- static int initCount_;
+ static System *instance_;
+ static int initCount_;
- static HostApi **hostApis_;
- static Device **devices_;
+ static HostApi **hostApis_;
+ static Device **devices_;
- static Device *nullDevice_;
- };
+ static Device *nullDevice_;
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/SystemDeviceIterator.hxx b/fdmdv2/extern/include/portaudiocpp/SystemDeviceIterator.hxx
index 613fc3db..8dc8ed67 100644
--- a/fdmdv2/extern/include/portaudiocpp/SystemDeviceIterator.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/SystemDeviceIterator.hxx
@@ -13,8 +13,8 @@
// Forward declaration(s):
namespace portaudio
{
- class Device;
- class HostApi;
+ class Device;
+ class HostApi;
}
// ---------------------------------------------------------------------------------------
@@ -23,39 +23,39 @@ namespace portaudio
namespace portaudio
{
-
- //////
- /// @brief Iterator class for iterating through all Devices in a System.
- ///
- /// Devices will be iterated by iterating all Devices in each
- /// HostApi in the System. Compliant with the STL bidirectional
- /// iterator concept.
- //////
- class System::DeviceIterator
- {
- public:
- typedef std::bidirectional_iterator_tag iterator_category;
- typedef Device value_type;
- typedef ptrdiff_t difference_type;
- typedef Device * pointer;
- typedef Device & reference;
-
- Device &operator*() const;
- Device *operator->() const;
-
- DeviceIterator &operator++();
- DeviceIterator operator++(int);
- DeviceIterator &operator--();
- DeviceIterator operator--(int);
-
- bool operator==(const DeviceIterator &rhs);
- bool operator!=(const DeviceIterator &rhs);
-
- private:
- friend class System;
- friend class HostApi;
- Device **ptr_;
- };
+
+ //////
+ /// @brief Iterator class for iterating through all Devices in a System.
+ ///
+ /// Devices will be iterated by iterating all Devices in each
+ /// HostApi in the System. Compliant with the STL bidirectional
+ /// iterator concept.
+ //////
+ class System::DeviceIterator
+ {
+ public:
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef Device value_type;
+ typedef ptrdiff_t difference_type;
+ typedef Device * pointer;
+ typedef Device & reference;
+
+ Device &operator*() const;
+ Device *operator->() const;
+
+ DeviceIterator &operator++();
+ DeviceIterator operator++(int);
+ DeviceIterator &operator--();
+ DeviceIterator operator--(int);
+
+ bool operator==(const DeviceIterator &rhs);
+ bool operator!=(const DeviceIterator &rhs);
+
+ private:
+ friend class System;
+ friend class HostApi;
+ Device **ptr_;
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/include/portaudiocpp/SystemHostApiIterator.hxx b/fdmdv2/extern/include/portaudiocpp/SystemHostApiIterator.hxx
index b9b13b85..82988776 100644
--- a/fdmdv2/extern/include/portaudiocpp/SystemHostApiIterator.hxx
+++ b/fdmdv2/extern/include/portaudiocpp/SystemHostApiIterator.hxx
@@ -13,7 +13,7 @@
// Forward declaration(s):
namespace portaudio
{
- class HostApi;
+ class HostApi;
}
// ---------------------------------------------------------------------------------------
@@ -23,35 +23,35 @@ namespace portaudio
{
- //////
- /// @brief Iterator class for iterating through all HostApis in a System.
- ///
- /// Compliant with the STL bidirectional iterator concept.
- //////
- class System::HostApiIterator
- {
- public:
- typedef std::bidirectional_iterator_tag iterator_category;
- typedef Device value_type;
- typedef ptrdiff_t difference_type;
- typedef HostApi * pointer;
- typedef HostApi & reference;
-
- HostApi &operator*() const;
- HostApi *operator->() const;
-
- HostApiIterator &operator++();
- HostApiIterator operator++(int);
- HostApiIterator &operator--();
- HostApiIterator operator--(int);
-
- bool operator==(const HostApiIterator &rhs);
- bool operator!=(const HostApiIterator &rhs);
-
- private:
- friend class System;
- HostApi **ptr_;
- };
+ //////
+ /// @brief Iterator class for iterating through all HostApis in a System.
+ ///
+ /// Compliant with the STL bidirectional iterator concept.
+ //////
+ class System::HostApiIterator
+ {
+ public:
+ typedef std::bidirectional_iterator_tag iterator_category;
+ typedef Device value_type;
+ typedef ptrdiff_t difference_type;
+ typedef HostApi * pointer;
+ typedef HostApi & reference;
+
+ HostApi &operator*() const;
+ HostApi *operator->() const;
+
+ HostApiIterator &operator++();
+ HostApiIterator operator++(int);
+ HostApiIterator &operator--();
+ HostApiIterator operator--(int);
+
+ bool operator==(const HostApiIterator &rhs);
+ bool operator!=(const HostApiIterator &rhs);
+
+ private:
+ friend class System;
+ HostApi **ptr_;
+ };
} // namespace portaudio
diff --git a/fdmdv2/extern/lib/libportaudio.a b/fdmdv2/extern/lib/libportaudio.a
new file mode 100644
index 0000000000000000000000000000000000000000..e5b3b04919e91864739936131e59005fd2b74587
GIT binary patch
literal 355106
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%0D8dhVb+ZLHk-H--cd?
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