Discriptor Configuration for emulationg a headset for iOS
Posted: 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?
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 problem:
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?