diff options
| author | swurl <swurl@swurl.xyz> | 2025-05-31 02:33:02 -0400 |
|---|---|---|
| committer | swurl <swurl@swurl.xyz> | 2025-05-31 02:33:02 -0400 |
| commit | 6c655321e6b04b8648802e296bb5ca11d290ae68 (patch) | |
| tree | 5c906511e4a2910ce8b806bb9d763b524c28619e /externals/oboe/samples/RhythmGame/src/main/cpp/audio/Player.cpp | |
| parent | c0cceff365f754f8859f4c9a0362ebdba7ea388b (diff) | |
Move dead submodules in-tree
Signed-off-by: swurl <swurl@swurl.xyz>
Diffstat (limited to 'externals/oboe/samples/RhythmGame/src/main/cpp/audio/Player.cpp')
| -rw-r--r-- | externals/oboe/samples/RhythmGame/src/main/cpp/audio/Player.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/externals/oboe/samples/RhythmGame/src/main/cpp/audio/Player.cpp b/externals/oboe/samples/RhythmGame/src/main/cpp/audio/Player.cpp new file mode 100644 index 0000000000..e73a9c351a --- /dev/null +++ b/externals/oboe/samples/RhythmGame/src/main/cpp/audio/Player.cpp @@ -0,0 +1,59 @@ +/* + * 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. + */ + +#include "Player.h" +#include "utils/logging.h" + +void Player::renderAudio(float *targetData, int32_t numFrames){ + + const AudioProperties properties = mSource->getProperties(); + + if (mIsPlaying){ + + int64_t framesToRenderFromData = numFrames; + int64_t totalSourceFrames = mSource->getSize() / properties.channelCount; + const float *data = mSource->getData(); + + // Check whether we're about to reach the end of the recording + if (!mIsLooping && mReadFrameIndex + numFrames >= totalSourceFrames){ + framesToRenderFromData = totalSourceFrames - mReadFrameIndex; + mIsPlaying = false; + } + + for (int i = 0; i < framesToRenderFromData; ++i) { + for (int j = 0; j < properties.channelCount; ++j) { + targetData[(i*properties.channelCount)+j] = data[(mReadFrameIndex*properties.channelCount)+j]; + } + + // Increment and handle wraparound + if (++mReadFrameIndex >= totalSourceFrames) mReadFrameIndex = 0; + } + + if (framesToRenderFromData < numFrames){ + // fill the rest of the buffer with silence + renderSilence(&targetData[framesToRenderFromData], numFrames * properties.channelCount); + } + + } else { + renderSilence(targetData, numFrames * properties.channelCount); + } +} + +void Player::renderSilence(float *start, int32_t numSamples){ + for (int i = 0; i < numSamples; ++i) { + start[i] = 0; + } +} |
