diff --git a/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt b/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt index e970a43..fedc35d 100644 --- a/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt +++ b/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt @@ -4,6 +4,7 @@ import android.media.AudioAttributes import android.media.AudioFormat import android.media.AudioManager import android.media.AudioTrack +import android.os.Build import android.util.Base64 import android.util.Log import com.facebook.react.bridge.Arguments @@ -107,7 +108,20 @@ class PcmStreamPlayerModule(reactContext: ReactApplicationContext) : ReactContex .setTransferMode(AudioTrack.MODE_STREAM) .build() - // AudioTrack erstellen — play() wird erst aufgerufen wenn Pre-Roll erreicht. + // Start-Threshold runterdrehen: Default ist bufferSize/2 (= 2s bei 4s + // Buffer). AudioTrack startet sonst nicht bevor 2s im Puffer sind — + // bei kurzen TTS-Antworten (3 Worte ~ 1.4s) bleibt pos auf 0 stehen. + // 0.1s reicht damit AudioTrack sofort mit dem ersten Chunk anlaeuft. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + try { + val startFrames = (sampleRate / 10).coerceAtLeast(1) // 100ms + newTrack.setStartThresholdInFrames(startFrames) + Log.i(TAG, "Start-Threshold gesetzt: ${startFrames} frames (~100ms)") + } catch (e: Exception) { + Log.w(TAG, "setStartThresholdInFrames failed: ${e.message}") + } + } + track = newTrack queue.clear() writerShouldStop = false