Pro Tools has partial VoiceOver support, but plugin parameters and startup status are inaccessible. I built a macOS accessibility layer to expose them.
What this project shows
I use Pro Tools every day. Some parts of it don't work with VoiceOver, so I fixed them.
Plugin parameters and startup status were inaccessible. I built solutions using macOS accessibility APIs and framework interposition to expose them to VoiceOver.
Skills demonstrated
- Objective-C runtime and macOS framework integration
- NSAccessibilityElement hierarchy construction
- Framework method interposition for status capture
- Reverse engineering inaccessible UI component structures
- Deep domain knowledge in professional audio workflows
What I built
Two distinct accessibility improvements for Pro Tools, each solving a different kind of gap.
Plugin parameter access
Third-party audio plugins in Pro Tools expose their visual controls to sighted users but provide no accessibility information to VoiceOver. I built a system that discovers hidden plugin parameters and presents them as VoiceOver-readable sliders with real-time value readback. This turns 39 previously invisible controls into accessible, navigable interface elements.
Startup status announcements
When Pro Tools launches, it displays a splash screen with loading status messages that are invisible to VoiceOver. I built an integration that captures these status messages by intercepting the framework method responsible for updating the splash screen text, then surfaces them to screen reader users during startup so they know what the application is doing.
Why this work matters
I use Pro Tools for mixing and mastering. Every inaccessible plugin parameter means stopping what I'm doing and finding a workaround. These fixes let me stay in the session.
Technical approach
Platform-level integration using macOS accessibility frameworks.
Accessibility element construction
Each discovered plugin parameter becomes a fully specified NSAccessibilityElement with the correct role (slider), label (parameter name), value (current setting), and position. VoiceOver treats these elements as native controls.
Framework interposition
Startup status messages are captured by interposing on the internal framework method that updates the splash screen. This approach reads the text as it changes without modifying the application's behavior or visual presentation.
Domain-informed design
Decisions about which parameters to surface, how to label them, and how to organize the accessibility hierarchy are informed by over a decade of daily Pro Tools use. The accessibility layer matches the mental model a working audio engineer already has.
Broader context
This kind of work lives in the space between accessibility evaluation and engineering implementation.
Many accessibility professionals can identify that a control is inaccessible. Fewer can build the fix at the platform level. This project shows both sides together: recognizing the gap from a real user’s perspective and engineering the solution with macOS frameworks, Objective-C runtime integration, and deep knowledge of how assistive technology behaves in native apps.
Built with
- Objective-C and macOS Accessibility APIs
- NSAccessibility protocol implementation
- Framework method interposition
- Runtime introspection for UI element discovery
Want to see more of my work?
The portfolio includes web and mobile accessibility audits alongside these engineering projects.