From 0ea90164f1bfe19b9f7fe986078a0e6f4e3d61b5 Mon Sep 17 00:00:00 2001 From: Maciej Makowski <120780663+maciejmakowski2003@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:36:29 +0100 Subject: [PATCH] feat: added support for playing different AudioBuffer sample rates (#283) Co-authored-by: Maciej Makowski --- .../common/cpp/core/AudioBufferSourceNode.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/react-native-audio-api/common/cpp/core/AudioBufferSourceNode.cpp b/packages/react-native-audio-api/common/cpp/core/AudioBufferSourceNode.cpp index a343e1eb..52efec1d 100644 --- a/packages/react-native-audio-api/common/cpp/core/AudioBufferSourceNode.cpp +++ b/packages/react-native-audio-api/common/cpp/core/AudioBufferSourceNode.cpp @@ -232,8 +232,11 @@ float AudioBufferSourceNode::getPlaybackRateValue(size_t &startOffset) { auto time = context_->getCurrentTime() + static_cast(startOffset) / context_->getSampleRate(); - return playbackRateParam_->getValueAtTime(time) * - std::pow(2.0f, detuneParam_->getValueAtTime(time) / 1200.0f); + auto sampleRateFactor = buffer_->getSampleRate() / context_->getSampleRate(); + auto detune = std::pow(2.0f, detuneParam_->getValueAtTime(time) / 1200.0f); + auto playbackRate = playbackRateParam_->getValueAtTime(time); + + return playbackRate * sampleRateFactor * detune; } double AudioBufferSourceNode::getVirtualStartFrame() {