diff --git a/samples/shared/Mixer.h b/samples/shared/Mixer.h
new file mode 100644
index 0000000..52ccf37
--- /dev/null
+++ b/samples/shared/Mixer.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SHARED_MIXER_H
+#define SHARED_MIXER_H
+
+#include <array>
+#include "IRenderableAudio.h"
+
+constexpr int32_t kBufferSize = 192*10;  // Temporary buffer is used for mixing
+constexpr uint8_t kMaxTracks = 100;
+
+/**
+ * A Mixer object which sums the output from multiple tracks into a single output. The number of
+ * input channels on each track must match the number of output channels (default 1=mono). This can
+ * be changed by calling `setChannelCount`.
+ */
+class Mixer : public IRenderableAudio {
+
+public:
+    void renderAudio(float *audioData, int32_t numFrames) {
+
+        // Zero out the incoming container array
+        memset(audioData, 0, sizeof(float) * numFrames * mChannelCount);
+
+        for (int i = 0; i < mNextFreeTrackIndex; ++i) {
+            mTracks[i]->renderAudio(mixingBuffer, numFrames);
+
+            for (int j = 0; j < numFrames * mChannelCount; ++j) {
+                audioData[j] += mixingBuffer[j];
+            }
+        }
+    }
+
+    void addTrack(std::shared_ptr<IRenderableAudio> renderer){
+        mTracks[mNextFreeTrackIndex++] = renderer;
+    }
+
+    void setChannelCount(int32_t channelCount){ mChannelCount = channelCount; }
+
+private:
+    float mixingBuffer[kBufferSize];
+    std::array<std::shared_ptr<IRenderableAudio>, kMaxTracks> mTracks;
+    uint8_t mNextFreeTrackIndex = 0;
+    int32_t mChannelCount = 1; // Default to mono
+};
+
+
+#endif //SHARED_MIXER_H
