Microphone Input (using FMOD) Not Detected on Xbox One

Hi. I’m having a little trouble detecting an external microphone through FMOD for a Unity project when building for Xbox One. When playing, the game doesn’t register any mic input, nor does it seem to detect the mic’s presence. For all other platforms (PC, Android, IOS, Switch) my game seems to detect a mic perfectly well. In my RuntimeManager, I have

advancedSettings.maxXMACodecs = realChannels

(my FMOD library is also set to XMA) and my FMOD.OUTPUTTYPE is defaulted to AUTODETECT (it seems to default to WINAPI).

When calling the following line in code while the game is running on the Xbox One:

Debug.Log(string.Format(“Recording from {0} ({1}, {2}), sample rate = {3}, state={4}”, inputDriverName, m_InputDriverId, inputDriverGuid, m_SampleRate, inputDriverState));

I get this message:

Recording from Kinect (0, 001d0054-00e7-0013-4c00-4c000c00d400), sample rate = 16000, state=CONNECTED, DEFAULT

Which is odd, because the Kinect is unplugged from the console. I only have the headset plugged in.

An example of the above line working (on PC) is as follows:

Input driver 0: Microphone (Pro C920) (765b9694-d308-4b69-942b-978e654777e6), sampleRate=16000, STEREO (2 channels) – CONNECTED, DEFAULT (connected? True)

Calling this line:

FMODUnity.RuntimeManager.CoreSystem.getNumDrivers(out num);

returns just the number 1.

Also, “Microphone.devices” returns null.

I made sure to include this line in the “AppXManifest.xml”:

<DeviceCapability Name=“microphone” />

I’ve already gone ahead and imported the Xbox One plugin for FMOD. I’ve read through both FMOD, Unity, and Xbox One’s documentation and there doesn’t appear to be any info on this exact subject. Is there anything I’m missing here? An extra plugin to install or setting to configure?

Please let me know if you’d like code segments or any more information. I appreciate any assistance on this matter. Cheers!

There is a note in our platform specific docs for the API that might be relevant to you case:

If using the recording API support must be explicitly enabled in the application manifest (regardless of whether Kinect is used or not). See below for the necessary additions to the manifest or check the FMOD examples for reference:

<Capabilities>
    <mx:Capability Name="kinectAudio" />
    <mx:Capability Name="kinectGamechat" />
</Capabilities>

The Kinect device will always show regardless of whether it’s connected, this is a quirk of how the Xbox hardware is configured.

It turns out that, in addition to adding those Capability lines to the Manifest, I also needed to set the InputDriverId to be set to NumInputDrivers-1. Since Xbox always assigns Kinect to take the 0 index, this line ensures that only the last index (the headset mic) is selected instead.