capture the individual microphones (raw multi‑mic / tri‑mic array) as separate channels on Quest 3?
Hi all,
I'm trying to capture the Quest's built‑in **microphones as separate raw channels** (not the single processed/beamformed stream apps normally receive) for [**custom beamforming / direction‑of‑arrival / spatial‑audio capture research — adjust to your use case**]. I've done a fair amount of digging and want to confirm whether this is possible through any supported path before I go further.
**TL;DR question:** Is there any supported way — a permission, entitlement, system/privileged API, or enterprise/MDM config — for an app to capture the built‑in mic array as **≥3 independent channels** on Quest 3 / Quest 3S? And is a multichannel/raw‑mic‑array capture API on the Horizon OS roadmap?
**What I've verified (Quest 3, Horizon OS on Android 14 / API 34, Snapdragon XR2 Gen 2 / SXR2230P):**
- **AudioRecord** with `AudioFormat.Builder().setChannelIndexMask(...)`: `0x3` (2ch) initializes, but `0x7` (3ch) and higher **fail to initialize**. `AudioDeviceInfo` for `TYPE_BUILTIN_MIC` reports no channel index masks above 2 channels.
- **MediaRecorder** with `setAudioChannels(n)`: 1ch and 2ch succeed; **4ch/6ch/8ch fail** with `RuntimeException: setParameter failed` for every `AudioSource` (MIC, UNPROCESSED, VOICE_RECOGNITION, CAMCORDER, …).
- **Oboe / AAudio** (`setChannelCount(3)` with `InputPreset::Unprocessed`, Shared and Exclusive/MMAP): never yields 3 separable mics — AAudio exposes only positional channel masks, with no `setChannelIndexMask` equivalent.
- **Audio policy** (`/vendor/etc/audio_policy_configuration.xml`): the built‑in mic device port only advertises `AUDIO_CHANNEL_IN_MONO | AUDIO_CHANNEL_IN_STEREO | AUDIO_CHANNEL_IN_FRONT_BACK` — i.e. a hard 2‑channel ceiling to apps.
**The part that makes me think it's possible at the platform level:** the codec/mixer configuration (`mixer_paths_*.xml`) defines an explicit tri‑mic capture route:
```
<path name="three-mic"> <!-- Tri MIC devices -->
DEC0 ← DMIC0
DEC1 ← DMIC2
DEC2 ← DMIC3 → TX_AIF1_CAP (3-channel capture)
</path>
<path name="unprocessed-three-mic"> <path name="three-mic"/> </path>
```
So the hardware and lower audio stack clearly support **3 raw digital‑mic channels** (there's even an `unprocessed-three-mic` path), but that route isn't surfaced to apps through the audio HAL / policy.
**My questions:**
- Is there **any supported way** for a third‑party (or entitled/enterprise/research) app to access the individual mics as separate channels on Quest 3 / 3S?
- Could the built‑in‑mic input profile be extended — or an alternate input device/profile provided — to expose the `unprocessed-three-mic` / `TX_AIF1_CAP` path (channel index masks > 2ch) to apps that hold an appropriate permission?
- Is a **multichannel / raw mic‑array capture API** planned for Horizon OS?
- For research or enterprise use, is there a program (engineering build, entitlement, partner access) that enables raw multi‑mic capture?
Any official guidance or pointers would be hugely appreciated — happy to share my full diagnostic logs and the exact configs I'm referencing. Thanks!
*Environment:* Quest 3 (`eureka`), Horizon OS / Android 14 (API 34), `RECORD_AUDIO` granted, tested via AudioRecord, MediaRecorder, and Oboe 1.9.3 (AAudio).
