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;