Skip to main content
New Participant
July 3, 2026
Question

capture the individual microphones (raw multi‑mic / tri‑mic array) as separate channels on Quest 3?

  • July 3, 2026
  • 0 replies
  • 27 views

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:**

 

  1. 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?
  2. 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?
  3. Is a **multichannel / raw mic‑array capture API** planned for Horizon OS?
  4. 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).