Add removeAllTracks (#1919)

diff --git a/samples/RhythmGame/src/main/cpp/Game.cpp b/samples/RhythmGame/src/main/cpp/Game.cpp
index 59ab36d..12bec0d 100644
--- a/samples/RhythmGame/src/main/cpp/Game.cpp
+++ b/samples/RhythmGame/src/main/cpp/Game.cpp
@@ -136,7 +136,17 @@
 }
 
 void Game::onErrorAfterClose(AudioStream *oboeStream, Result error){
-    LOGE("The audio stream was closed, please restart the game. Error: %s", convertToText(error));
+    if (error == Result::ErrorDisconnected){
+        mGameState = GameState::Loading;
+        mAudioStream.reset();
+        mMixer.removeAllTracks();
+        mCurrentFrame = 0;
+        mSongPositionMs = 0;
+        mLastUpdateTime = 0;
+        start();
+    } else {
+        LOGE("Stream error: %s", convertToText(error));
+    }
 };
 
 bool Game::openStream() {
diff --git a/samples/shared/Mixer.h b/samples/shared/Mixer.h
index 56926d8..c91766e 100644
--- a/samples/shared/Mixer.h
+++ b/samples/shared/Mixer.h
@@ -52,6 +52,13 @@
 
     void setChannelCount(int32_t channelCount){ mChannelCount = channelCount; }
 
+    void removeAllTracks(){
+        for (int i = 0; i < mNextFreeTrackIndex; i++){
+            mTracks[i] = nullptr;
+        }
+        mNextFreeTrackIndex = 0;
+    }
+
 private:
     float mixingBuffer[kBufferSize];
     std::array<IRenderableAudio*, kMaxTracks> mTracks;