Skip to content

Commit efeeaa4

Browse files
committed
refactor: update playback parameters API to return success status and handle state synchronization in UI
1 parent 884ed06 commit efeeaa4

5 files changed

Lines changed: 44 additions & 18 deletions

File tree

samples/powerplay/src/main/cpp/PowerPlayJNI.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,13 +423,13 @@ Java_com_google_oboe_samples_powerplay_engine_PowerPlayAudioPlayer_removeSampleS
423423
/**
424424
* Native (JNI) implementation of PowerPlayAudioPlayer.setPlaybackParametersNative()
425425
*/
426-
JNIEXPORT void JNICALL
426+
JNIEXPORT jboolean JNICALL
427427
Java_com_google_oboe_samples_powerplay_engine_PowerPlayAudioPlayer_setPlaybackParametersNative(
428428
JNIEnv *env,
429429
jobject,
430430
jfloat speed,
431431
jfloat pitch) {
432-
player.setPlaybackParameters(speed, pitch);
432+
return player.setPlaybackParameters(speed, pitch);
433433
}
434434

435435
#ifdef __cplusplus

samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,7 @@ bool PowerPlayMultiPlayer::removeSampleSource(int32_t index) {
353353
return true;
354354
}
355355

356-
void PowerPlayMultiPlayer::setPlaybackParameters(float speed, float pitch) {
357-
mPlaybackSpeed = speed;
358-
mPlaybackPitch = pitch;
356+
bool PowerPlayMultiPlayer::setPlaybackParameters(float speed, float pitch) {
359357
if (mAudioStream) {
360358
oboe::PlaybackParameters params = {
361359
oboe::FallbackMode::Default,
@@ -367,6 +365,10 @@ void PowerPlayMultiPlayer::setPlaybackParameters(float speed, float pitch) {
367365
if (result != oboe::Result::OK) {
368366
__android_log_print(ANDROID_LOG_ERROR, "PowerPlayMultiPlayer",
369367
"setPlaybackParameters failed: %s", oboe::convertToText(result));
368+
return false;
370369
}
371370
}
371+
mPlaybackSpeed = speed;
372+
mPlaybackPitch = pitch;
373+
return true;
372374
}

samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class PowerPlayMultiPlayer : public iolib::SimpleMultiPlayer {
6060

6161
bool removeSampleSource(int32_t index);
6262

63-
void setPlaybackParameters(float speed, float pitch);
63+
bool setPlaybackParameters(float speed, float pitch);
6464

6565
private:
6666
class MyPresentationCallback : public oboe::AudioStreamPresentationCallback {

samples/powerplay/src/main/kotlin/com/google/oboe/samples/powerplay/MainActivity.kt

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -743,12 +743,18 @@ class MainActivity : ComponentActivity() {
743743
playbackSpeed = playbackSpeed,
744744
playbackPitch = playbackPitch,
745745
onSpeedChange = {
746-
playbackSpeed = it
747-
player.setPlaybackParameters(playbackSpeed, playbackPitch)
746+
val success = player.setPlaybackParameters(it, playbackPitch)
747+
if (success) {
748+
playbackSpeed = it
749+
}
750+
success
748751
},
749752
onPitchChange = {
750-
playbackPitch = it
751-
player.setPlaybackParameters(playbackSpeed, playbackPitch)
753+
val success = player.setPlaybackParameters(playbackSpeed, it)
754+
if (success) {
755+
playbackPitch = it
756+
}
757+
success
752758
},
753759
fileSampleRate = currentTrack?.wavInfo?.sampleRate ?: 48000,
754760
onDismiss = { showBottomSheet = false }
@@ -859,8 +865,8 @@ class MainActivity : ComponentActivity() {
859865
onSliderPositionChange: (Float) -> Unit,
860866
playbackSpeed: Float,
861867
playbackPitch: Float,
862-
onSpeedChange: (Float) -> Unit,
863-
onPitchChange: (Float) -> Unit,
868+
onSpeedChange: (Float) -> Boolean,
869+
onPitchChange: (Float) -> Boolean,
864870
fileSampleRate: Int,
865871
onDismiss: () -> Unit
866872
) {
@@ -869,6 +875,12 @@ class MainActivity : ComponentActivity() {
869875
val actualFrames = remember { mutableIntStateOf(0) }
870876
var isModified by remember { mutableStateOf(playbackSpeed != 1.0f || playbackPitch != 1.0f) }
871877

878+
var localSpeed by remember { mutableFloatStateOf(playbackSpeed) }
879+
var localPitch by remember { mutableFloatStateOf(playbackPitch) }
880+
881+
LaunchedEffect(playbackSpeed) { localSpeed = playbackSpeed }
882+
LaunchedEffect(playbackPitch) { localPitch = playbackPitch }
883+
872884
Column(
873885
modifier = Modifier
874886
.fillMaxWidth()
@@ -993,9 +1005,15 @@ class MainActivity : ComponentActivity() {
9931005
color = if (canUseSpeed) Color.Unspecified else Color.Gray
9941006
)
9951007
Slider(
996-
value = playbackSpeed,
997-
onValueChange = onSpeedChange,
1008+
value = localSpeed,
1009+
onValueChange = {
1010+
localSpeed = it
1011+
onSpeedChange(it)
1012+
},
9981013
onValueChangeFinished = {
1014+
if (localSpeed != playbackSpeed) {
1015+
localSpeed = playbackSpeed
1016+
}
9991017
isModified = (playbackSpeed != 1.0f || playbackPitch != 1.0f)
10001018
},
10011019
valueRange = 0.5f..2.0f,
@@ -1015,9 +1033,15 @@ class MainActivity : ComponentActivity() {
10151033
color = if (canUsePitch) Color.Unspecified else Color.Gray
10161034
)
10171035
Slider(
1018-
value = playbackPitch,
1019-
onValueChange = onPitchChange,
1036+
value = localPitch,
1037+
onValueChange = {
1038+
localPitch = it
1039+
onPitchChange(it)
1040+
},
10201041
onValueChangeFinished = {
1042+
if (localPitch != playbackPitch) {
1043+
localPitch = playbackPitch
1044+
}
10211045
isModified = (playbackSpeed != 1.0f || playbackPitch != 1.0f)
10221046
},
10231047
valueRange = 0.5f..2.0f,

samples/powerplay/src/main/kotlin/com/google/oboe/samples/powerplay/engine/PowerPlayAudioPlayer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class PowerPlayAudioPlayer() : DefaultLifecycleObserver {
6666
fun setLooping(index: Int, looping: Boolean) = setLoopingNative(index, looping)
6767
fun teardownAudioStream() = teardownAudioStreamNative()
6868
fun unloadAssets() = unloadAssetsNative()
69-
fun setPlaybackParameters(speed: Float, pitch: Float) = setPlaybackParametersNative(speed, pitch)
69+
fun setPlaybackParameters(speed: Float, pitch: Float): Boolean = setPlaybackParametersNative(speed, pitch)
7070

7171
/**
7272
* Loads a file from assets into memory and returns its WAV properties.
@@ -259,7 +259,7 @@ class PowerPlayAudioPlayer() : DefaultLifecycleObserver {
259259
private external fun getDurationMillisNative(index: Int): Long
260260
private external fun getWavFileInfoNative(wavBytes: ByteArray): IntArray
261261
private external fun removeSampleSourceNative(index: Int): Boolean
262-
private external fun setPlaybackParametersNative(speed: Float, pitch: Float)
262+
private external fun setPlaybackParametersNative(speed: Float, pitch: Float): Boolean
263263

264264
/**
265265
* Companion

0 commit comments

Comments
 (0)