Playing audio

Patterns
View as Markdown
On this page3 sections

Silence.

Volume.

Headphones.

Best practices

Adjust levels automatically when necessary — don’t adjust the overall volume.

Permit rerouting of audio when possible.

Use the system-provided volume view to let people make audio adjustments.

Choose an audio category that fits the way your app or game uses sound.

Respond to audio controls only when it makes sense.

Avoid repurposing audio controls.

Consider creating custom audio player controls only if you need to offer commands that the system doesn’t support.

Let other apps know when your app finishes playing temporary audio.

Handling interruptions

Determine how to respond to audio-session interruptions.

When an interruption ends, determine whether to resume audio playback automatically.

Platform considerations

iOS, iPadOS

Use the system’s sound services to play short sounds and vibrations.

visionOS

Prefer playing sound.

Design custom sounds for custom UI elements.

Use Spatial Audio to create an intuitive, engaging experience.

Consider defining a range of places from which your app sounds can originate.

Consider varying sounds that people could perceive as repetitive over time.

Decide whether you need to play sound that’s fixed to the wearer or tracked by the wearer.

watchOS

Use the recommended encoding values for media assets.


For the complete guidance, including worked examples and illustrations, see the canonical page: https://developer.apple.com/design/human-interface-guidelines/playing-audio

Apple HIG text and imagery are © Apple Inc. This page is a structured index of Apple’s canonical documentation (snapshot 2025-02-02), provided for quick reference and AI-agent consumption — it isn’t affiliated with or endorsed by Apple. Read the original at developer.apple.com (opens in new tab).

Get HIG guidance in your AI

Install HIG Doctor and get expert Apple design guidance directly in Claude Code.

npx skills add raintree-technology/hig-doctor
Email updates aren't configured on this deployment yet. Follow the GitHub repo (opens in new tab) for updates.