Android / AAudio stream repeatedly closes and reopens during System::update(), causing frame spikes on Samsung Device

Hi, I’m currently using the arm64 build of FMOD on Android and I’ve tested on multiple devices, where it seems to work fine. However, on the Samsung Galaxy Z Fold 6, I’m seeing an issue where the audio stream appears to repeatedly close and reopen, which then causes a noticeable hitch.

From my profiling, the spike happens during SoundSystem->update(), and on this device I keep seeing logs showing AAudioStream_close, AAudioStreamBuilder_openStream, and then AAudioStream_requestStart failing with messages like “stream was probably stolen”.

This only seems to happen specifically on the Z Fold 6. On the other Android devices I tested, I did not run into this problem.

I’m mainly wondering:

has anyone else seen this specifically on the Samsung Z Fold 6,

is this a known device-specific AAudio / FMOD issue,

or is there anything I should check on my side for why the stream would keep reopening on this device only

I’ve included the relevant log below.

026-03-10 01:29:12.812 18558-18851 AAudio com.example.jnicpp D AAudioStream_requestStop(s#108) called
2026-03-10 01:29:12.812 18558-18851 AAudioStream com.example.jnicpp D setState(s#108) from 2 to 10
2026-03-10 01:29:12.823 18558-18851 AAudio com.example.jnicpp D AAudioStream_close(s#108) called ---------------
2026-03-10 01:29:12.823 18558-18851 AudioStrea…nal_Client com.example.jnicpp D release_l(): mServiceStreamHandle = 0x00007CB0
2026-03-10 01:29:12.823 18558-18851 AAudioStream com.example.jnicpp D joinThread() - but has no thread or already join()ed
2026-03-10 01:29:12.823 18558-18851 AudioStrea…nal_Client com.example.jnicpp W requestStop_l() stop callback returned -895, returning early
2026-03-10 01:29:12.823 18558-18851 AAudioStream com.example.jnicpp D setState(s#108) from 10 to 11
2026-03-10 01:29:12.823 18558-18851 AAudioStream com.example.jnicpp D setState(s#108) from 11 to 11
2026-03-10 01:29:12.823 18558-18851 AAudioStream com.example.jnicpp D setState(s#108) from 11 to 12
2026-03-10 01:29:12.823 18558-18851 AudioStrea…nal_Client com.example.jnicpp D ~AudioStreamInternal() 0xb4000077eaf50980 called
2026-03-10 01:29:12.823 18558-18851 AAudioStream com.example.jnicpp D ~AudioStream(s#108) mPlayerBase strongCount = 2
2026-03-10 01:29:12.823 18558-18851 AAudio com.example.jnicpp D AAudioStream_close(s#108) returned 0 ---------
2026-03-10 01:29:12.834 18558-18851 AAudio com.example.jnicpp I AAudioStreamBuilder_openStream() called ----------------------------------------
2026-03-10 01:29:12.834 18558-18851 AudioStreamBuilder com.example.jnicpp I rate = 0, channels = 0, channelMask = 0, format = 0, sharing = SH, dir = OUTPUT
2026-03-10 01:29:12.834 18558-18851 AudioStreamBuilder com.example.jnicpp I device = 0, sessionId = -1, perfMode = 12, callback: OFF with frames = 0
2026-03-10 01:29:12.834 18558-18851 AudioStreamBuilder com.example.jnicpp I usage = 14, contentType = 0, inputPreset = 0, allowedCapturePolicy = 0
2026-03-10 01:29:12.834 18558-18851 AudioStreamBuilder com.example.jnicpp I privacy sensitive = false, opPackageName = (null), attributionTag = (null)
2026-03-10 01:29:12.834 18558-18851 .example.jnicpp com.example.jnicpp D PlayerBase::PlayerBase()
2026-03-10 01:29:12.835 18558-18851 AudioStrea…nal_Client com.example.jnicpp D configureDataInformation() original HW burst = 96, minMicros = 2000 => SW burst = 96
2026-03-10 01:29:12.835 18558-18851 IsochronousClockModel com.example.jnicpp D setFramesPerBurst() - mFramesPerBurst = 96 - mBurstPeriodNanos = 2000000
2026-03-10 01:29:12.835 18558-18851 AAudioStream com.example.jnicpp D setState(s#109) from 0 to 2
2026-03-10 01:29:12.835 18558-18851 AAudioFlowGraph com.example.jnicpp I configure() source format = 0x00000005, channels = 2, sink format = 0x00000005, channels = 2, useMonoBlend = 0, audioBalance = 0.000000, isExclusive 0
2026-03-10 01:29:12.836 18558-18851 AAudio com.example.jnicpp I AAudioStreamBuilder_openStream() returns 0 = AAUDIO_OK for s#109 ----------------
2026-03-10 01:29:12.847 18558-18851 AAudio com.example.jnicpp D AAudioStream_close(s#109) called ---------------
2026-03-10 01:29:12.847 18558-18851 AudioStrea…nal_Client com.example.jnicpp D release_l(): mServiceStreamHandle = 0x00007CB1
2026-03-10 01:29:12.847 18558-18851 AAudioStream com.example.jnicpp D setState(s#109) from 2 to 11
2026-03-10 01:29:12.847 18558-18851 AAudioStream com.example.jnicpp D setState(s#109) from 11 to 11
2026-03-10 01:29:12.847 18558-18851 AAudioStream com.example.jnicpp D setState(s#109) from 11 to 12
2026-03-10 01:29:12.847 18558-18851 AudioStrea…nal_Client com.example.jnicpp D ~AudioStreamInternal() 0xb4000077eaf50980 called
2026-03-10 01:29:12.847 18558-18851 AAudioStream com.example.jnicpp D ~AudioStream(s#109) mPlayerBase strongCount = 2
2026-03-10 01:29:12.847 18558-18851 AAudio com.example.jnicpp D AAudioStream_close(s#109) returned 0 ---------
2026-03-10 01:29:12.857 18558-18851 fmod com.example.jnicpp I FMOD::supportsLowLatency : Low latency = false, Pro Audio = false, Bluetooth On = false, Acceptable Block Size = false (0)
2026-03-10 01:29:12.858 18558-18851 AAudio com.example.jnicpp I AAudioStreamBuilder_openStream() called ----------------------------------------
2026-03-10 01:29:12.858 18558-18851 AudioStreamBuilder com.example.jnicpp I rate = 0, channels = 0, channelMask = 0, format = 0, sharing = SH, dir = OUTPUT
2026-03-10 01:29:12.858 18558-18851 AudioStreamBuilder com.example.jnicpp I device = 0, sessionId = -1, perfMode = 12, callback: ON with frames = 0
2026-03-10 01:29:12.858 18558-18851 AudioStreamBuilder com.example.jnicpp I usage = 14, contentType = 0, inputPreset = 0, allowedCapturePolicy = 0
2026-03-10 01:29:12.858 18558-18851 AudioStreamBuilder com.example.jnicpp I privacy sensitive = false, opPackageName = (null), attributionTag = (null)
2026-03-10 01:29:12.858 18558-18851 .example.jnicpp com.example.jnicpp D PlayerBase::PlayerBase()
2026-03-10 01:29:12.859 18558-18851 AudioStrea…nal_Client com.example.jnicpp D configureDataInformation() original HW burst = 96, minMicros = 2000 => SW burst = 96
2026-03-10 01:29:12.859 18558-18851 IsochronousClockModel com.example.jnicpp D setFramesPerBurst() - mFramesPerBurst = 96 - mBurstPeriodNanos = 2000000
2026-03-10 01:29:12.859 18558-18851 AAudioStream com.example.jnicpp D setState(s#110) from 0 to 2
2026-03-10 01:29:12.859 18558-18851 AAudioFlowGraph com.example.jnicpp I configure() source format = 0x00000005, channels = 2, sink format = 0x00000005, channels = 2, useMonoBlend = 0, audioBalance = 0.000000, isExclusive 0
2026-03-10 01:29:12.860 18558-18851 AAudio com.example.jnicpp I AAudioStreamBuilder_openStream() returns 0 = AAUDIO_OK for s#110 ----------------
2026-03-10 01:29:12.869 18558-18558 ViewRootIm…nActivity] com.example.jnicpp I ViewPostIme pointer 1
2026-03-10 01:29:12.871 18558-18851 AAudio com.example.jnicpp D AAudioStream_close(s#110) called ---------------
2026-03-10 01:29:12.871 18558-18851 AudioStrea…nal_Client com.example.jnicpp D release_l(): mServiceStreamHandle = 0x00007CB2
2026-03-10 01:29:12.871 18558-18851 AAudioStream com.example.jnicpp D setState(s#110) from 2 to 11
2026-03-10 01:29:12.871 18558-18851 AAudioStream com.example.jnicpp D setState(s#110) from 11 to 11
2026-03-10 01:29:12.871 18558-18851 AAudioStream com.example.jnicpp D setState(s#110) from 11 to 12
2026-03-10 01:29:12.871 18558-18851 AudioStrea…nal_Client com.example.jnicpp D ~AudioStreamInternal() 0xb4000077eaf50980 called
2026-03-10 01:29:12.871 18558-18851 AAudioStream com.example.jnicpp D ~AudioStream(s#110) mPlayerBase strongCount = 2
2026-03-10 01:29:12.871 18558-18851 AAudio com.example.jnicpp D AAudioStream_close(s#110) returned 0 ---------
2026-03-10 01:29:12.881 18558-18851 AAudio com.example.jnicpp I AAudioStreamBuilder_openStream() called ----------------------------------------
2026-03-10 01:29:12.881 18558-18851 AudioStreamBuilder com.example.jnicpp I rate = 0, channels = 0, channelMask = 0, format = 0, sharing = SH, dir = OUTPUT
2026-03-10 01:29:12.881 18558-18851 AudioStreamBuilder com.example.jnicpp I device = 0, sessionId = -1, perfMode = 12, callback: ON with frames = 0
2026-03-10 01:29:12.881 18558-18851 AudioStreamBuilder com.example.jnicpp I usage = 14, contentType = 0, inputPreset = 0, allowedCapturePolicy = 0
2026-03-10 01:29:12.881 18558-18851 AudioStreamBuilder com.example.jnicpp I privacy sensitive = false, opPackageName = (null), attributionTag = (null)
2026-03-10 01:29:12.882 18558-18851 .example.jnicpp com.example.jnicpp D PlayerBase::PlayerBase()
2026-03-10 01:29:12.883 18558-18851 AudioStrea…nal_Client com.example.jnicpp D configureDataInformation() original HW burst = 96, minMicros = 2000 => SW burst = 96
2026-03-10 01:29:12.883 18558-18851 IsochronousClockModel com.example.jnicpp D setFramesPerBurst() - mFramesPerBurst = 96 - mBurstPeriodNanos = 2000000
2026-03-10 01:29:12.883 18558-18851 AAudioStream com.example.jnicpp D setState(s#111) from 0 to 2
2026-03-10 01:29:12.883 18558-18851 AAudioFlowGraph com.example.jnicpp I configure() source format = 0x00000005, channels = 2, sink format = 0x00000005, channels = 2, useMonoBlend = 0, audioBalance = 0.000000, isExclusive 0
2026-03-10 01:29:12.885 18558-18851 AAudio com.example.jnicpp I AAudioStreamBuilder_openStream() returns 0 = AAUDIO_OK for s#111 ----------------
2026-03-10 01:29:12.885 18558-18851 AAudio com.example.jnicpp D AAudioStream_requestStart(s#111) called --------------
2026-03-10 01:29:12.885 18558-18851 AAudioStream com.example.jnicpp D setState(s#111) from 2 to 3
2026-03-10 01:29:12.885 18558-18851 AudioStrea…nal_Client com.example.jnicpp D requestStart_l() error = -895, stream was probably stolen
2026-03-10 01:29:12.885 18558-18851 AAudioStream com.example.jnicpp D setDisconnected setting disconnected, current disconnected: 0, current state: 3
2026-03-10 01:29:12.886 18558-18851 AAudioStream com.example.jnicpp D setState(s#111) from 3 to 2
2026-03-10 01:29:12.886 18558-18851 AAudio com.example.jnicpp D AAudioStream_requestStart(s#111) returned -899 ---------