Discriptor Configuration for emulationg a headset for iOS

WildCat1990
Posts: 1
Joined: Thu Jul 03, 2025 4:24 pm

Discriptor Configuration for emulationg a headset for iOS

Postby WildCat1990 » Thu Jul 03, 2025 4:32 pm

Hey everyone! I’m trying to build a device that can call Siri on an iPhone and “speak” a command to it automatically.

I’m using a bare ESP32S3 with nothing except the buttons connected, running a TinyUSB-based microphone project (repo i use: https://github.com/Alexaznavour/micemul). No real microphone used.

Right now:
✅ The device streams a voice message (PCM audio) through the ESP32S3’s USB microphone interface.
✅ When I open the Voice Memos app, it correctly records and plays back the message, proving the mic stream works on iOS.
✅ I’ve also added HID button support, and the device successfully emulates a long press on the “play/pause” headset button — this triggers Siri on the iPhone!

The problem:
❌ Once Siri starts listening, it ignores the audio coming from my ESP32S3 microphone. (On macOS, the same setup works — Siri hears and executes the command — but on iPhone, Siri seems to only use the built-in mic.)

What I’ve tried:
Using TUD_AUDIO_HEADSET_STEREO_DESCRIPTOR, but it’s unsupported and causes build errors.
Adding a hand-crafted USB Audio Output (speaker) interface descriptor (UAC1) alongside the working mic/HID setup — but the device fails to enumerate (confirmed on macOS as well). None of the interfaces (input, output, or HID) work when I do this.
I know that on iPhone, Siri only accepts audio from the iPhone’s built-in mic — except when Siri is invoked through a headset, in which case it should use the headset mic. That’s exactly what I want to emulate.

Any advice on how to correctly emulate a USB audio headset so that Siri will accept my ESP32S3’s microphone audio on iPhone?

Who is online

Users browsing this forum: Semrush [Bot] and 5 guests