Build8c36fb5logs showed a new regression: Oboe playout cb#0 fires once at startup then the callback STOPS DRAINING the ring entirely. written_samples sticks at 7679 (= RING_CAPACITY - 1) across every recv heartbeat in a 40-second test. Meanwhile the recv task decodes 1800+ real audio frames (sample range up to [-27920..31907], rms 12065) which all get dropped on the floor by audio_write_playout returning 0 because the ring is full. Bisection:96be740(Usage::Media, no setAudioApi, no ContentType, no MainActivity audio mode change) DID drive the playout callback at the expected 50Hz (playout heartbeat: calls=1100 total_played_real=1055040 over 22 seconds). User still heard nothing there because of OS routing, but at least Oboe accepted the PCM.8c36fb5added three changes on top of96be740: 1. Oboe Usage::Media → Usage::VoiceCommunication 2. Oboe setAudioApi(oboe::AudioApi::AAudio) explicit 3. Oboe setContentType(ContentType::Speech) 4. MainActivity setMode(MODE_IN_COMMUNICATION) + setSpeakerphoneOn(true) Every one of those could have killed the callback; combined they did. Revert to 96be740's exact Oboe config: Usage::Media, no setAudioApi, no ContentType. Keep the PCM recorder, heartbeat logging, and stream-open logging. Separately, MainActivity now maxes STREAM_MUSIC (the stream Usage::Media routes to) but leaves audio mode in MODE_NORMAL — no more speakerphone/call-mode combo that makes Oboe unhappy. In NORMAL mode a STREAM_MUSIC stream plays through the loud speaker by default. Proof that the Rust pipeline is perfect: decoded.pcm recorded in8c36fb5was pulled via `adb shell run-as com.wzp.desktop cat .wzp/decoded.pcm`, converted with ffmpeg, and played back on the Mac — user confirmed audible speech. So 100% of the remaining bug surface is Android audio routing, not anything in the Rust/C++ decode path.
17 KiB
17 KiB