diff --git a/src/common/AudioSourceCaller.h b/src/common/AudioSourceCaller.h
index f1ef972..d196d41 100644
--- a/src/common/AudioSourceCaller.h
+++ b/src/common/AudioSourceCaller.h
@@ -20,7 +20,7 @@
 #include "OboeDebug.h"
 #include "oboe/Oboe.h"
 
-#include "flowgraph/AudioProcessorBase.h"
+#include "flowgraph/FlowGraphNode.h"
 #include "FixedBlockReader.h"
 
 namespace oboe {
@@ -32,10 +32,10 @@
  * For output streams that use a callback, call the application for more data.
  * For input streams that do not use a callback, read from the stream.
  */
-class AudioSourceCaller : public flowgraph::AudioSource, public FixedBlockProcessor {
+class AudioSourceCaller : public flowgraph::FlowGraphSource, public FixedBlockProcessor {
 public:
     AudioSourceCaller(int32_t channelCount, int32_t framesPerCallback, int32_t bytesPerSample)
-            : AudioSource(channelCount)
+            : FlowGraphSource(channelCount)
             , mBlockReader(*this) {
         mBlockReader.open(channelCount * framesPerCallback * bytesPerSample);
     }
diff --git a/src/common/DataConversionFlowGraph.cpp b/src/common/DataConversionFlowGraph.cpp
index 36af115..98536a9 100644
--- a/src/common/DataConversionFlowGraph.cpp
+++ b/src/common/DataConversionFlowGraph.cpp
@@ -72,7 +72,7 @@
 //
 Result DataConversionFlowGraph::configure(AudioStream *sourceStream, AudioStream *sinkStream) {
 
-    AudioFloatOutputPort *lastOutput = nullptr;
+    FlowGraphPortFloatOutput *lastOutput = nullptr;
 
     bool isOutput = sourceStream->getDirection() == Direction::Output;
     mFilterStream = isOutput ? sourceStream : sinkStream;
diff --git a/src/common/DataConversionFlowGraph.h b/src/common/DataConversionFlowGraph.h
index 2afa3d9..b1d5ebe 100644
--- a/src/common/DataConversionFlowGraph.h
+++ b/src/common/DataConversionFlowGraph.h
@@ -65,12 +65,12 @@
     }
 
 private:
-    std::unique_ptr<flowgraph::AudioSourceBuffered>    mSource;
+    std::unique_ptr<flowgraph::FlowGraphSourceBuffered>    mSource;
     std::unique_ptr<AudioSourceCaller>                 mSourceCaller;
     std::unique_ptr<flowgraph::MonoToMultiConverter>   mChannelConverter;
     std::unique_ptr<resampler::MultiChannelResampler>  mResampler;
     std::unique_ptr<flowgraph::SampleRateConverter>    mRateConverter;
-    std::unique_ptr<flowgraph::AudioSink>              mSink;
+    std::unique_ptr<flowgraph::FlowGraphSink>              mSink;
 
     FixedBlockWriter                                   mBlockWriter;
     DataCallbackResult                                 mCallbackResult = DataCallbackResult::Continue;
diff --git a/src/common/SourceFloatCaller.cpp b/src/common/SourceFloatCaller.cpp
index 3ccf90b..631af85 100644
--- a/src/common/SourceFloatCaller.cpp
+++ b/src/common/SourceFloatCaller.cpp
@@ -16,7 +16,7 @@
 
 #include <algorithm>
 #include <unistd.h>
-#include "flowgraph/AudioProcessorBase.h"
+#include "flowgraph/FlowGraphNode.h"
 #include "SourceFloatCaller.h"
 
 using namespace oboe;
diff --git a/src/common/SourceFloatCaller.h b/src/common/SourceFloatCaller.h
index c4253b6..85a1585 100644
--- a/src/common/SourceFloatCaller.h
+++ b/src/common/SourceFloatCaller.h
@@ -20,7 +20,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "flowgraph/AudioProcessorBase.h"
+#include "flowgraph/FlowGraphNode.h"
 #include "AudioSourceCaller.h"
 #include "FixedBlockReader.h"
 
diff --git a/src/common/SourceI16Caller.cpp b/src/common/SourceI16Caller.cpp
index 889593d..2ab372b 100644
--- a/src/common/SourceI16Caller.cpp
+++ b/src/common/SourceI16Caller.cpp
@@ -16,7 +16,7 @@
 
 #include <algorithm>
 #include <unistd.h>
-#include "flowgraph/AudioProcessorBase.h"
+#include "flowgraph/FlowGraphNode.h"
 #include "SourceI16Caller.h"
 
 #if FLOWGRAPH_ANDROID_INTERNAL
diff --git a/src/common/SourceI16Caller.h b/src/common/SourceI16Caller.h
index 5d1ec8f..22c1b9a 100644
--- a/src/common/SourceI16Caller.h
+++ b/src/common/SourceI16Caller.h
@@ -20,7 +20,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "flowgraph/AudioProcessorBase.h"
+#include "flowgraph/FlowGraphNode.h"
 #include "AudioSourceCaller.h"
 #include "FixedBlockReader.h"
 
diff --git a/src/flowgraph/ClipToRange.cpp b/src/flowgraph/ClipToRange.cpp
index ceec0ec..d2f8a02 100644
--- a/src/flowgraph/ClipToRange.cpp
+++ b/src/flowgraph/ClipToRange.cpp
@@ -16,13 +16,13 @@
 
 #include <algorithm>
 #include <unistd.h>
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "ClipToRange.h"
 
 using namespace flowgraph;
 
 ClipToRange::ClipToRange(int32_t channelCount)
-        : AudioFilter(channelCount) {
+        : FlowGraphFilter(channelCount) {
 }
 
 int32_t ClipToRange::onProcess(int32_t numFrames) {
diff --git a/src/flowgraph/ClipToRange.h b/src/flowgraph/ClipToRange.h
index ee8d3f2..22b7804 100644
--- a/src/flowgraph/ClipToRange.h
+++ b/src/flowgraph/ClipToRange.h
@@ -21,7 +21,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
@@ -30,7 +30,7 @@
 constexpr float kDefaultMaxHeadroom = 1.41253754f;
 constexpr float kDefaultMinHeadroom = -kDefaultMaxHeadroom;
 
-class ClipToRange : public AudioFilter {
+class ClipToRange : public FlowGraphFilter {
 public:
     explicit ClipToRange(int32_t channelCount);
 
diff --git a/src/flowgraph/AudioProcessorBase.cpp b/src/flowgraph/FlowGraphNode.cpp
similarity index 79%
rename from src/flowgraph/AudioProcessorBase.cpp
rename to src/flowgraph/FlowGraphNode.cpp
index d0b768a..bb6ecc9 100644
--- a/src/flowgraph/AudioProcessorBase.cpp
+++ b/src/flowgraph/FlowGraphNode.cpp
@@ -17,12 +17,12 @@
 #include "stdio.h"
 #include <algorithm>
 #include <sys/types.h>
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 using namespace flowgraph;
 
 /***************************************************************************/
-int32_t AudioProcessorBase::pullData(int64_t framePosition, int32_t numFrames) {
+int32_t FlowGraphNode::pullData(int64_t framePosition, int32_t numFrames) {
     int32_t frameCount = numFrames;
     // Prevent recursion and multiple execution of nodes.
     if (framePosition <= mLastFramePosition && !mBlockRecursion) {
@@ -46,7 +46,7 @@
     return frameCount;
 }
 
-void AudioProcessorBase::pullReset() {
+void FlowGraphNode::pullReset() {
     if (!mBlockRecursion) {
         mBlockRecursion = true; // for cyclic graphs
         // Pull reset from all the upstream nodes.
@@ -58,15 +58,15 @@
     }
 }
 
-void AudioProcessorBase::reset() {
+void FlowGraphNode::reset() {
     mLastFrameCount = 0;
 }
 
 /***************************************************************************/
-AudioFloatBufferPort::AudioFloatBufferPort(AudioProcessorBase &parent,
+FlowGraphPortFloat::FlowGraphPortFloat(FlowGraphNode &parent,
                                int32_t samplesPerFrame,
                                int32_t framesPerBuffer)
-        : AudioPort(parent, samplesPerFrame)
+        : FlowGraphPort(parent, samplesPerFrame)
         , mFramesPerBuffer(framesPerBuffer)
         , mBuffer(nullptr) {
     size_t numFloats = static_cast<size_t>(framesPerBuffer * getSamplesPerFrame());
@@ -74,37 +74,37 @@
 }
 
 /***************************************************************************/
-int32_t AudioFloatOutputPort::pullData(int64_t framePosition, int32_t numFrames) {
+int32_t FlowGraphPortFloatOutput::pullData(int64_t framePosition, int32_t numFrames) {
     numFrames = std::min(getFramesPerBuffer(), numFrames);
     return mContainingNode.pullData(framePosition, numFrames);
 }
 
-void AudioFloatOutputPort::pullReset() {
+void FlowGraphPortFloatOutput::pullReset() {
     mContainingNode.pullReset();
 }
 
 // These need to be in the .cpp file because of forward cross references.
-void AudioFloatOutputPort::connect(AudioFloatInputPort *port) {
+void FlowGraphPortFloatOutput::connect(FlowGraphPortFloatInput *port) {
     port->connect(this);
 }
 
-void AudioFloatOutputPort::disconnect(AudioFloatInputPort *port) {
+void FlowGraphPortFloatOutput::disconnect(FlowGraphPortFloatInput *port) {
     port->disconnect(this);
 }
 
 /***************************************************************************/
-int32_t AudioFloatInputPort::pullData(int64_t framePosition, int32_t numFrames) {
+int32_t FlowGraphPortFloatInput::pullData(int64_t framePosition, int32_t numFrames) {
     return (mConnected == nullptr)
             ? std::min(getFramesPerBuffer(), numFrames)
             : mConnected->pullData(framePosition, numFrames);
 }
-void AudioFloatInputPort::pullReset() {
+void FlowGraphPortFloatInput::pullReset() {
     if (mConnected != nullptr) mConnected->pullReset();
 }
 
-float *AudioFloatInputPort::getBuffer() {
+float *FlowGraphPortFloatInput::getBuffer() {
     if (mConnected == nullptr) {
-        return AudioFloatBufferPort::getBuffer(); // loaded using setValue()
+        return FlowGraphPortFloat::getBuffer(); // loaded using setValue()
     } else {
         return mConnected->getBuffer();
     }
diff --git a/src/flowgraph/AudioProcessorBase.h b/src/flowgraph/FlowGraphNode.h
similarity index 79%
rename from src/flowgraph/AudioProcessorBase.h
rename to src/flowgraph/FlowGraphNode.h
index a2380c0..007131e 100644
--- a/src/flowgraph/AudioProcessorBase.h
+++ b/src/flowgraph/FlowGraphNode.h
@@ -15,13 +15,15 @@
  */
 
 /*
- * AudioProcessorBase.h
+ * FlowGraph.h
  *
- * Audio processing node and ports that can be used in a simple data flow graph.
+ * Processing node and ports that can be used in a simple data flow graph.
+ * This was designed to work with audio but could be used for other
+ * types of data.
  */
 
-#ifndef FLOWGRAPH_AUDIO_PROCESSOR_BASE_H
-#define FLOWGRAPH_AUDIO_PROCESSOR_BASE_H
+#ifndef FLOWGRAPH_FLOW_GRAPH_NODE_H
+#define FLOWGRAPH_FLOW_GRAPH_NODE_H
 
 #include <cassert>
 #include <cstring>
@@ -33,7 +35,6 @@
 #include <vector>
 
 // TODO Move these classes into separate files.
-// TODO Maybe remove "Audio" prefix from these class names: AudioProcessorBase to ProcessorNode
 // TODO Review use of raw pointers for connect(). Maybe use smart pointers but need to avoid
 //      run-time deallocation in audio thread.
 
@@ -43,22 +44,22 @@
 
 namespace flowgraph {
 
-// Default block size that can be overridden when the AudioFloatBufferPort is created.
+// Default block size that can be overridden when the FlowGraphPortFloat is created.
 // If it is too small then we will have too much overhead from switching between nodes.
 // If it is too high then we will thrash the caches.
 constexpr int kDefaultBufferSize = 8; // arbitrary
 
-class AudioPort;
-class AudioFloatInputPort;
+class FlowGraphPort;
+class FlowGraphPortFloatInput;
 
 /***************************************************************************/
 /**
  * Base class for all nodes in the flowgraph.
  */
-class AudioProcessorBase {
+class FlowGraphNode {
 public:
-    AudioProcessorBase() {}
-    virtual ~AudioProcessorBase() = default;
+    FlowGraphNode() {}
+    virtual ~FlowGraphNode() = default;
 
     /**
      * Read from the input ports,
@@ -92,7 +93,7 @@
      */
     virtual void reset();
 
-    void addInputPort(AudioPort &port) {
+    void addInputPort(FlowGraphPort &port) {
         mInputPorts.push_back(port);
     }
 
@@ -114,7 +115,7 @@
     }
 
     virtual const char *getName() {
-        return "AudioProcessorBase";
+        return "FlowGraph";
     }
 
     int64_t getLastFramePosition() {
@@ -124,7 +125,7 @@
 protected:
     int64_t  mLastFramePosition = 0;
 
-    std::vector<std::reference_wrapper<AudioPort>> mInputPorts;
+    std::vector<std::reference_wrapper<FlowGraphPort>> mInputPorts;
 
 private:
     bool     mDataPulledAutomatically = true;
@@ -141,16 +142,16 @@
   * So they are generally declared as public.
   *
   */
-class AudioPort {
+class FlowGraphPort {
 public:
-    AudioPort(AudioProcessorBase &parent, int32_t samplesPerFrame)
+    FlowGraphPort(FlowGraphNode &parent, int32_t samplesPerFrame)
             : mContainingNode(parent)
             , mSamplesPerFrame(samplesPerFrame) {
     }
 
     // Ports are often declared public. So let's make them non-copyable.
-    AudioPort(const AudioPort&) = delete;
-    AudioPort& operator=(const AudioPort&) = delete;
+    FlowGraphPort(const FlowGraphPort&) = delete;
+    FlowGraphPort& operator=(const FlowGraphPort&) = delete;
 
     int32_t getSamplesPerFrame() const {
         return mSamplesPerFrame;
@@ -161,7 +162,7 @@
     virtual void pullReset() {}
 
 protected:
-    AudioProcessorBase &mContainingNode;
+    FlowGraphNode &mContainingNode;
 
 private:
     const int32_t    mSamplesPerFrame = 1;
@@ -174,14 +175,14 @@
  *
  * The size is framesPerBuffer * samplesPerFrame).
  */
-class AudioFloatBufferPort  : public AudioPort {
+class FlowGraphPortFloat  : public FlowGraphPort {
 public:
-    AudioFloatBufferPort(AudioProcessorBase &parent,
+    FlowGraphPortFloat(FlowGraphNode &parent,
                    int32_t samplesPerFrame,
                    int32_t framesPerBuffer = kDefaultBufferSize
                 );
 
-    virtual ~AudioFloatBufferPort() = default;
+    virtual ~FlowGraphPortFloat() = default;
 
     int32_t getFramesPerBuffer() const {
         return mFramesPerBuffer;
@@ -205,15 +206,15 @@
 /**
   * The results of a node's processing are stored in the buffers of the output ports.
   */
-class AudioFloatOutputPort : public AudioFloatBufferPort {
+class FlowGraphPortFloatOutput : public FlowGraphPortFloat {
 public:
-    AudioFloatOutputPort(AudioProcessorBase &parent, int32_t samplesPerFrame)
-            : AudioFloatBufferPort(parent, samplesPerFrame) {
+    FlowGraphPortFloatOutput(FlowGraphNode &parent, int32_t samplesPerFrame)
+            : FlowGraphPortFloat(parent, samplesPerFrame) {
     }
 
-    virtual ~AudioFloatOutputPort() = default;
+    virtual ~FlowGraphPortFloatOutput() = default;
 
-    using AudioFloatBufferPort::getBuffer;
+    using FlowGraphPortFloat::getBuffer;
 
     /**
      * Connect to the input of another module.
@@ -225,13 +226,13 @@
      * This not thread safe. Do not modify the graph topology from another thread while running.
      * Also do not delete a module while it is connected to another port if the graph is running.
      */
-    void connect(AudioFloatInputPort *port);
+    void connect(FlowGraphPortFloatInput *port);
 
     /**
      * Disconnect from the input of another module.
      * This not thread safe.
      */
-    void disconnect(AudioFloatInputPort *port);
+    void disconnect(FlowGraphPortFloatInput *port);
 
     /**
      * Call the parent module's onProcess() method.
@@ -253,15 +254,15 @@
  * You can set a value that will be used for processing.
  * If you connect an output port to this port then its value will be used instead.
  */
-class AudioFloatInputPort : public AudioFloatBufferPort {
+class FlowGraphPortFloatInput : public FlowGraphPortFloat {
 public:
-    AudioFloatInputPort(AudioProcessorBase &parent, int32_t samplesPerFrame)
-            : AudioFloatBufferPort(parent, samplesPerFrame) {
+    FlowGraphPortFloatInput(FlowGraphNode &parent, int32_t samplesPerFrame)
+            : FlowGraphPortFloat(parent, samplesPerFrame) {
         // Add to parent so it can pull data from each input.
         parent.addInputPort(*this);
     }
 
-    virtual ~AudioFloatInputPort() = default;
+    virtual ~FlowGraphPortFloatInput() = default;
 
     /**
      * If connected to an output port then this will return
@@ -290,12 +291,12 @@
      * An output port can have multiple connections.
      * This not thread safe.
      */
-    void connect(AudioFloatOutputPort *port) {
+    void connect(FlowGraphPortFloatOutput *port) {
         assert(getSamplesPerFrame() == port->getSamplesPerFrame());
         mConnected = port;
     }
 
-    void disconnect(AudioFloatOutputPort *port) {
+    void disconnect(FlowGraphPortFloatOutput *port) {
         assert(mConnected == port);
         (void) port;
         mConnected = nullptr;
@@ -313,7 +314,7 @@
     void pullReset() override;
 
 private:
-    AudioFloatOutputPort *mConnected = nullptr;
+    FlowGraphPortFloatOutput *mConnected = nullptr;
 };
 
 /***************************************************************************/
@@ -323,15 +324,15 @@
  * It outputs data but does not consume data.
  * By default, it will read its data from an external buffer.
  */
-class AudioSource : public AudioProcessorBase {
+class FlowGraphSource : public FlowGraphNode {
 public:
-    explicit AudioSource(int32_t channelCount)
+    explicit FlowGraphSource(int32_t channelCount)
             : output(*this, channelCount) {
     }
 
-    virtual ~AudioSource() = default;
+    virtual ~FlowGraphSource() = default;
 
-    AudioFloatOutputPort output;
+    FlowGraphPortFloatOutput output;
 };
 
 /***************************************************************************/
@@ -341,12 +342,12 @@
  * It outputs data but does not consume data.
  * By default, it will read its data from an external buffer.
  */
-class AudioSourceBuffered : public AudioSource {
+class FlowGraphSourceBuffered : public FlowGraphSource {
 public:
-    explicit AudioSourceBuffered(int32_t channelCount)
-            : AudioSource(channelCount) {}
+    explicit FlowGraphSourceBuffered(int32_t channelCount)
+            : FlowGraphSource(channelCount) {}
 
-    virtual ~AudioSourceBuffered() = default;
+    virtual ~FlowGraphSourceBuffered() = default;
 
     /**
      * Specify buffer that the node will read from.
@@ -373,15 +374,15 @@
  * This graph will be executed when data is read() from this node
  * by pulling data from upstream nodes.
  */
-class AudioSink : public AudioProcessorBase {
+class FlowGraphSink : public FlowGraphNode {
 public:
-    explicit AudioSink(int32_t channelCount)
+    explicit FlowGraphSink(int32_t channelCount)
             : input(*this, channelCount) {
     }
 
-    virtual ~AudioSink() = default;
+    virtual ~FlowGraphSink() = default;
 
-    AudioFloatInputPort input;
+    FlowGraphPortFloatInput input;
 
     /**
      * Dummy processor. The work happens in the read() method.
@@ -403,19 +404,19 @@
  * This may include traditional filters, eg. FIR, but also include
  * any processing node that converts input to output.
  */
-class AudioFilter : public AudioProcessorBase {
+class FlowGraphFilter : public FlowGraphNode {
 public:
-    explicit AudioFilter(int32_t channelCount)
+    explicit FlowGraphFilter(int32_t channelCount)
             : input(*this, channelCount)
             , output(*this, channelCount) {
     }
 
-    virtual ~AudioFilter() = default;
+    virtual ~FlowGraphFilter() = default;
 
-    AudioFloatInputPort input;
-    AudioFloatOutputPort output;
+    FlowGraphPortFloatInput input;
+    FlowGraphPortFloatOutput output;
 };
 
 } /* namespace flowgraph */
 
-#endif /* FLOWGRAPH_AUDIO_PROCESSOR_BASE_H */
+#endif /* FLOWGRAPH_FLOW_GRAPH_NODE_H */
diff --git a/src/flowgraph/ManyToMultiConverter.cpp b/src/flowgraph/ManyToMultiConverter.cpp
index f51384c..879685e 100644
--- a/src/flowgraph/ManyToMultiConverter.cpp
+++ b/src/flowgraph/ManyToMultiConverter.cpp
@@ -24,7 +24,7 @@
         : inputs(channelCount)
         , output(*this, channelCount) {
     for (int i = 0; i < channelCount; i++) {
-        inputs[i] = std::make_unique<AudioFloatInputPort>(*this, 1);
+        inputs[i] = std::make_unique<FlowGraphPortFloatInput>(*this, 1);
     }
 }
 
diff --git a/src/flowgraph/ManyToMultiConverter.h b/src/flowgraph/ManyToMultiConverter.h
index 8a2c480..eca4a8e 100644
--- a/src/flowgraph/ManyToMultiConverter.h
+++ b/src/flowgraph/ManyToMultiConverter.h
@@ -21,12 +21,12 @@
 #include <sys/types.h>
 #include <vector>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 /**
  * Combine multiple mono inputs into one interleaved multi-channel output.
  */
-class ManyToMultiConverter : public flowgraph::AudioProcessorBase {
+class ManyToMultiConverter : public flowgraph::FlowGraphNode {
 public:
     explicit ManyToMultiConverter(int32_t channelCount);
 
@@ -36,8 +36,8 @@
 
     void setEnabled(bool enabled) {}
 
-    std::vector<std::unique_ptr<flowgraph::AudioFloatInputPort>> inputs;
-    flowgraph::AudioFloatOutputPort output;
+    std::vector<std::unique_ptr<flowgraph::FlowGraphPortFloatInput>> inputs;
+    flowgraph::FlowGraphPortFloatOutput output;
 
     const char *getName() override {
         return "ManyToMultiConverter";
diff --git a/src/flowgraph/MonoToMultiConverter.cpp b/src/flowgraph/MonoToMultiConverter.cpp
index 772a74d..11cea78 100644
--- a/src/flowgraph/MonoToMultiConverter.cpp
+++ b/src/flowgraph/MonoToMultiConverter.cpp
@@ -15,7 +15,7 @@
  */
 
 #include <unistd.h>
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "MonoToMultiConverter.h"
 
 using namespace flowgraph;
diff --git a/src/flowgraph/MonoToMultiConverter.h b/src/flowgraph/MonoToMultiConverter.h
index 9426e9d..376f7a3 100644
--- a/src/flowgraph/MonoToMultiConverter.h
+++ b/src/flowgraph/MonoToMultiConverter.h
@@ -20,7 +20,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
@@ -28,7 +28,7 @@
  * Convert a monophonic stream to a multi-channel stream
  * with the same signal on each channel.
  */
-class MonoToMultiConverter : public AudioProcessorBase {
+class MonoToMultiConverter : public FlowGraphNode {
 public:
     explicit MonoToMultiConverter(int32_t channelCount);
 
@@ -40,8 +40,8 @@
         return "MonoToMultiConverter";
     }
 
-    AudioFloatInputPort input;
-    AudioFloatOutputPort output;
+    FlowGraphPortFloatInput input;
+    FlowGraphPortFloatOutput output;
 };
 
 } /* namespace flowgraph */
diff --git a/src/flowgraph/RampLinear.cpp b/src/flowgraph/RampLinear.cpp
index a076923..afef018 100644
--- a/src/flowgraph/RampLinear.cpp
+++ b/src/flowgraph/RampLinear.cpp
@@ -16,13 +16,13 @@
 
 #include <algorithm>
 #include <unistd.h>
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "RampLinear.h"
 
 using namespace flowgraph;
 
 RampLinear::RampLinear(int32_t channelCount)
-        : AudioFilter(channelCount) {
+        : FlowGraphFilter(channelCount) {
     mTarget.store(1.0f);
 }
 
diff --git a/src/flowgraph/RampLinear.h b/src/flowgraph/RampLinear.h
index 63cb124..f285704 100644
--- a/src/flowgraph/RampLinear.h
+++ b/src/flowgraph/RampLinear.h
@@ -21,7 +21,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
@@ -33,7 +33,7 @@
  * The target may be updated while a ramp is in progress, which will trigger
  * a new ramp from the current value.
  */
-class RampLinear : public AudioFilter {
+class RampLinear : public FlowGraphFilter {
 public:
     explicit RampLinear(int32_t channelCount);
 
diff --git a/src/flowgraph/SampleRateConverter.cpp b/src/flowgraph/SampleRateConverter.cpp
index da88494..708c684 100644
--- a/src/flowgraph/SampleRateConverter.cpp
+++ b/src/flowgraph/SampleRateConverter.cpp
@@ -20,7 +20,7 @@
 using namespace resampler;
 
 SampleRateConverter::SampleRateConverter(int32_t channelCount, MultiChannelResampler &resampler)
-        : AudioFilter(channelCount)
+        : FlowGraphFilter(channelCount)
         , mResampler(resampler) {
     setDataPulledAutomatically(false);
 }
diff --git a/src/flowgraph/SampleRateConverter.h b/src/flowgraph/SampleRateConverter.h
index 243b68c..d940b22 100644
--- a/src/flowgraph/SampleRateConverter.h
+++ b/src/flowgraph/SampleRateConverter.h
@@ -20,12 +20,12 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "resampler/MultiChannelResampler.h"
 
 namespace flowgraph {
 
-class SampleRateConverter : public AudioFilter {
+class SampleRateConverter : public FlowGraphFilter {
 public:
     explicit SampleRateConverter(int32_t channelCount, resampler::MultiChannelResampler &mResampler);
 
diff --git a/src/flowgraph/SinkFloat.cpp b/src/flowgraph/SinkFloat.cpp
index bd3435f..f830daf 100644
--- a/src/flowgraph/SinkFloat.cpp
+++ b/src/flowgraph/SinkFloat.cpp
@@ -16,13 +16,13 @@
 
 #include <algorithm>
 #include <unistd.h>
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "SinkFloat.h"
 
 using namespace flowgraph;
 
 SinkFloat::SinkFloat(int32_t channelCount)
-        : AudioSink(channelCount) {
+        : FlowGraphSink(channelCount) {
 }
 
 int32_t SinkFloat::read(int64_t framePosition, void *data, int32_t numFrames) {
diff --git a/src/flowgraph/SinkFloat.h b/src/flowgraph/SinkFloat.h
index a0335fd..b6474d1 100644
--- a/src/flowgraph/SinkFloat.h
+++ b/src/flowgraph/SinkFloat.h
@@ -21,14 +21,14 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
 /**
  * AudioSink that lets you read data as 32-bit floats.
  */
-class SinkFloat : public AudioSink {
+class SinkFloat : public FlowGraphSink {
 public:
     explicit SinkFloat(int32_t channelCount);
 
diff --git a/src/flowgraph/SinkI16.cpp b/src/flowgraph/SinkI16.cpp
index 3cb7b45..a5904e8 100644
--- a/src/flowgraph/SinkI16.cpp
+++ b/src/flowgraph/SinkI16.cpp
@@ -26,7 +26,7 @@
 using namespace flowgraph;
 
 SinkI16::SinkI16(int32_t channelCount)
-        : AudioSink(channelCount) {}
+        : FlowGraphSink(channelCount) {}
 
 int32_t SinkI16::read(int64_t framePosition, void *data, int32_t numFrames) {
     int16_t *shortData = (int16_t *) data;
diff --git a/src/flowgraph/SinkI16.h b/src/flowgraph/SinkI16.h
index f91903b..2cfdfb0 100644
--- a/src/flowgraph/SinkI16.h
+++ b/src/flowgraph/SinkI16.h
@@ -20,14 +20,14 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
 /**
  * AudioSink that lets you read data as 16-bit signed integers.
  */
-class SinkI16 : public AudioSink {
+class SinkI16 : public FlowGraphSink {
 public:
     explicit SinkI16(int32_t channelCount);
 
diff --git a/src/flowgraph/SinkI24.cpp b/src/flowgraph/SinkI24.cpp
index d2b948c..b944b77 100644
--- a/src/flowgraph/SinkI24.cpp
+++ b/src/flowgraph/SinkI24.cpp
@@ -18,7 +18,7 @@
 #include <unistd.h>
 
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "SinkI24.h"
 
 #if FLOWGRAPH_ANDROID_INTERNAL
@@ -28,7 +28,7 @@
 using namespace flowgraph;
 
 SinkI24::SinkI24(int32_t channelCount)
-        : AudioSink(channelCount) {}
+        : FlowGraphSink(channelCount) {}
 
 int32_t SinkI24::read(int64_t framePosition, void *data, int32_t numFrames) {
     uint8_t *byteData = (uint8_t *) data;
diff --git a/src/flowgraph/SinkI24.h b/src/flowgraph/SinkI24.h
index 980419b..7477c8d 100644
--- a/src/flowgraph/SinkI24.h
+++ b/src/flowgraph/SinkI24.h
@@ -20,7 +20,7 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
@@ -28,7 +28,7 @@
  * AudioSink that lets you read data as packed 24-bit signed integers.
  * The sample size is 3 bytes.
  */
-class SinkI24 : public AudioSink {
+class SinkI24 : public FlowGraphSink {
 public:
     explicit SinkI24(int32_t channelCount);
 
diff --git a/src/flowgraph/SourceFloat.cpp b/src/flowgraph/SourceFloat.cpp
index 431e1d0..f574d84 100644
--- a/src/flowgraph/SourceFloat.cpp
+++ b/src/flowgraph/SourceFloat.cpp
@@ -17,13 +17,13 @@
 #include "common/OboeDebug.h"
 #include <algorithm>
 #include <unistd.h>
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "SourceFloat.h"
 
 using namespace flowgraph;
 
 SourceFloat::SourceFloat(int32_t channelCount)
-        : AudioSourceBuffered(channelCount) {
+        : FlowGraphSourceBuffered(channelCount) {
 }
 
 int32_t SourceFloat::onProcess(int32_t numFrames) {
diff --git a/src/flowgraph/SourceFloat.h b/src/flowgraph/SourceFloat.h
index 16d8e17..4de1b41 100644
--- a/src/flowgraph/SourceFloat.h
+++ b/src/flowgraph/SourceFloat.h
@@ -20,14 +20,14 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
 /**
  * AudioSource that reads a block of pre-defined float data.
  */
-class SourceFloat : public AudioSourceBuffered {
+class SourceFloat : public FlowGraphSourceBuffered {
 public:
     explicit SourceFloat(int32_t channelCount);
 
diff --git a/src/flowgraph/SourceI16.cpp b/src/flowgraph/SourceI16.cpp
index 86d5148..8813023 100644
--- a/src/flowgraph/SourceI16.cpp
+++ b/src/flowgraph/SourceI16.cpp
@@ -17,7 +17,7 @@
 #include <algorithm>
 #include <unistd.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "SourceI16.h"
 
 #if FLOWGRAPH_ANDROID_INTERNAL
@@ -27,7 +27,7 @@
 using namespace flowgraph;
 
 SourceI16::SourceI16(int32_t channelCount)
-        : AudioSourceBuffered(channelCount) {
+        : FlowGraphSourceBuffered(channelCount) {
 }
 
 int32_t SourceI16::onProcess(int32_t numFrames) {
diff --git a/src/flowgraph/SourceI16.h b/src/flowgraph/SourceI16.h
index efca138..fe440b2 100644
--- a/src/flowgraph/SourceI16.h
+++ b/src/flowgraph/SourceI16.h
@@ -20,13 +20,13 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 /**
  * AudioSource that reads a block of pre-defined 16-bit integer data.
  */
-class SourceI16 : public AudioSourceBuffered {
+class SourceI16 : public FlowGraphSourceBuffered {
 public:
     explicit SourceI16(int32_t channelCount);
 
diff --git a/src/flowgraph/SourceI24.cpp b/src/flowgraph/SourceI24.cpp
index 2f2f334..1975878 100644
--- a/src/flowgraph/SourceI24.cpp
+++ b/src/flowgraph/SourceI24.cpp
@@ -21,7 +21,7 @@
 #include <audio_utils/primitives.h>
 #endif
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 #include "SourceI24.h"
 
 using namespace flowgraph;
@@ -29,7 +29,7 @@
 constexpr int kBytesPerI24Packed = 3;
 
 SourceI24::SourceI24(int32_t channelCount)
-        : AudioSourceBuffered(channelCount) {
+        : FlowGraphSourceBuffered(channelCount) {
 }
 
 int32_t SourceI24::onProcess(int32_t numFrames) {
diff --git a/src/flowgraph/SourceI24.h b/src/flowgraph/SourceI24.h
index f9f8d02..3779534 100644
--- a/src/flowgraph/SourceI24.h
+++ b/src/flowgraph/SourceI24.h
@@ -20,14 +20,14 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include "AudioProcessorBase.h"
+#include "FlowGraphNode.h"
 
 namespace flowgraph {
 
 /**
  * AudioSource that reads a block of pre-defined 24-bit packed integer data.
  */
-class SourceI24 : public AudioSourceBuffered {
+class SourceI24 : public FlowGraphSourceBuffered {
 public:
     explicit SourceI24(int32_t channelCount);
 
