Skip to content

Commit 42a3aca

Browse files
author
Maciej Makowski
committed
refactor: minor improvements
1 parent 83dfe60 commit 42a3aca

File tree

5 files changed

+25
-12
lines changed

5 files changed

+25
-12
lines changed

packages/react-native-audio-api/common/cpp/audioapi/HostObjects/AudioBufferStreamSourceNodeHostObject.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class AudioBufferStreamSourceNodeHostObject
2626

2727
addFunctions(
2828
JSI_EXPORT_FUNCTION(AudioBufferStreamSourceNodeHostObject, start),
29-
JSI_EXPORT_FUNCTION(AudioBufferStreamSourceNodeHostObject, enqueueAudioBuffer));
29+
JSI_EXPORT_FUNCTION(AudioBufferStreamSourceNodeHostObject, enqueueBuffer));
3030
}
3131

3232
JSI_PROPERTY_GETTER(detune) {
@@ -58,14 +58,16 @@ class AudioBufferStreamSourceNodeHostObject
5858
return jsi::Value::undefined();
5959
}
6060

61-
JSI_HOST_FUNCTION(enqueueAudioBuffer) {
61+
JSI_HOST_FUNCTION(enqueueBuffer) {
6262
auto audioBufferStreamSourceNode =
6363
std::static_pointer_cast<AudioBufferStreamSourceNode>(node_);
6464

6565
auto audioBufferHostObject =
6666
args[0].getObject(runtime).asHostObject<AudioBufferHostObject>(runtime);
6767

68-
audioBufferStreamSourceNode->enqueueAudioBuffer(audioBufferHostObject->audioBuffer_);
68+
auto isLastBuffer = args[1].asBool();
69+
70+
audioBufferStreamSourceNode->enqueueBuffer(audioBufferHostObject->audioBuffer_, isLastBuffer);
6971

7072
return jsi::Value::undefined();
7173
}

packages/react-native-audio-api/common/cpp/audioapi/core/sources/AudioBufferStreamSourceNode.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,13 @@ void AudioBufferStreamSourceNode::start(double when, double offset) {
5151
vReadIndex_ = static_cast<double>(context_->getSampleRate() * offset);
5252
}
5353

54-
void AudioBufferStreamSourceNode::enqueueAudioBuffer(
55-
const std::shared_ptr<AudioBuffer> &buffer) {
54+
void AudioBufferStreamSourceNode::enqueueBuffer(
55+
const std::shared_ptr<AudioBuffer> &buffer,
56+
bool isLastBuffer) {
5657
auto locker = Locker(getBufferLock());
5758
buffers_.push(buffer);
59+
60+
isLastBuffer_ = isLastBuffer;
5861
}
5962

6063
void AudioBufferStreamSourceNode::disable() {
@@ -165,6 +168,10 @@ void AudioBufferStreamSourceNode::processWithoutInterpolation(
165168
if (buffers_.empty()) {
166169
processingBus->zero(writeIndex, framesLeft);
167170
readIndex = 0;
171+
172+
if (isLastBuffer_) {
173+
playbackState_ = PlaybackState::STOP_SCHEDULED;
174+
}
168175
break;
169176
} else {
170177
buffer = buffers_.front();

packages/react-native-audio-api/common/cpp/audioapi/core/sources/AudioBufferStreamSourceNode.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class AudioBufferStreamSourceNode : public AudioScheduledSourceNode {
2424
[[nodiscard]] std::shared_ptr<AudioParam> getPlaybackRateParam() const;
2525

2626
void start(double when, double offset);
27-
void enqueueAudioBuffer(const std::shared_ptr<AudioBuffer> &buffer);
27+
void enqueueBuffer(const std::shared_ptr<AudioBuffer> &buffer, bool isLastBuffer);
2828
void disable() override;
2929

3030
protected:
@@ -37,18 +37,18 @@ class AudioBufferStreamSourceNode : public AudioScheduledSourceNode {
3737

3838
// pitch correction
3939
std::shared_ptr<signalsmith::stretch::SignalsmithStretch<float>> stretch_;
40+
std::shared_ptr<AudioBus> playbackRateBus_;
4041

4142
// k-rate params
4243
std::shared_ptr<AudioParam> detuneParam_;
4344
std::shared_ptr<AudioParam> playbackRateParam_;
4445

45-
std::shared_ptr<AudioBus> playbackRateBus_;
46-
4746
// internal helper
4847
double vReadIndex_;
4948

5049
// User provided buffer
5150
std::queue<std::shared_ptr<AudioBuffer>> buffers_;
51+
bool isLastBuffer_ = false;
5252

5353
void processWithPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
5454
int framesToProcess);

packages/react-native-audio-api/src/core/AudioBufferStreamSourceNode.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ export default class AudioBufferStreamSourceNode extends AudioScheduledSourceNod
1616
this.playbackRate = new AudioParam(node.playbackRate, context);
1717
}
1818

19-
public enqueueAudioBuffer(buffer: AudioBuffer): void {
20-
(this.node as IAudioBufferStreamSourceNode).enqueueAudioBuffer(
21-
buffer.buffer
19+
public enqueueBuffer(
20+
buffer: AudioBuffer,
21+
isLastBuffer: boolean = false
22+
): void {
23+
(this.node as IAudioBufferStreamSourceNode).enqueueBuffer(
24+
buffer.buffer,
25+
isLastBuffer
2226
);
2327
}
2428

packages/react-native-audio-api/src/interfaces.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export interface IAudioBufferStreamSourceNode
115115
detune: IAudioParam;
116116
playbackRate: IAudioParam;
117117

118-
enqueueAudioBuffer: (audioBuffer: IAudioBuffer) => void;
118+
enqueueBuffer: (audioBuffer: IAudioBuffer, isLastBuffer: boolean) => void;
119119
start: (when?: number, offset?: number) => void;
120120
}
121121

0 commit comments

Comments
 (0)