Which AudioAttributes usage a workout coaching cue should declare
Last verified October 3, 2026 · 6 min read
Sources checked (4) · October 3, 2026
- developer.android.com/reference/android/media/AudioAttributes — usage and content type definitions; capture policy
- developer.android.com/media/optimize/audio-focus — Android 12 fade-out and call mute scoped by usage; automatic ducking conditions
- developer.android.com/reference/android/media/AudioFocusRequest — default USAGE_MEDIA; speech not ducked
- developer.android.com/media/platform/output — general guidance to play audio with USAGE_MEDIA
Every Android player and every focus request carries an AudioAttributes, and most cue code fills it in by copying the first snippet it finds. The usage you pick is not a label. It changes whether Android 12's forced fade-out applies to you, whether you are muted during a call, whether other apps can capture your audio, and how the system treats the user's music while you speak.
Google publishes no usage constant that names exercise coaching. So this is the one page in the cluster where the recommendation is mostly ours, and it shows the documented facts it rests on.
What usage and content type mean#
Google's AudioAttributes reference: usage is ""why" you are playing a sound, what is this sound used for," and "Usage is the most important information to supply in AudioAttributes and it is recommended to build any instance with this information supplied." Content type is ""what" you are playing," which "is optional," and which "might be used by the audio framework to selectively configure some audio post-processing blocks." Attributes "supersede the notion of stream types."
The candidates, in Google's words#
| Constant | Google's description | Documented consequence that matters here |
|---|---|---|
USAGE_MEDIA | "the usage is media, such as music, or movie soundtracks" | Subject to Android 12's forced fade-out and incoming-call mute; the default when a focus request sets no attributes; may be captured by other apps |
USAGE_ASSISTANCE_NAVIGATION_GUIDANCE | "the usage is driving or navigation directions" | Excluded from capture for privacy |
USAGE_ASSISTANT | "audio responses to user queries, audio instructions or help utterances" (added in API level 26) | Excluded from capture for privacy |
USAGE_ASSISTANCE_SONIFICATION | "sonification, such as with user interface sounds" | Excluded from capture for privacy |
USAGE_NOTIFICATION | "the usage is notification" | Excluded from capture for privacy |
USAGE_ASSISTANCE_ACCESSIBILITY | "for accessibility, such as with a screen reader" | Not for coaching: it describes a screen reader |
Content types that matter: CONTENT_TYPE_SPEECH, "the content type is speech"; CONTENT_TYPE_SONIFICATION, "a sound used to accompany a user action, such as a beep or sound effect"; and CONTENT_TYPE_MUSIC.
Documented consequence 1: the Android 12 rules key on USAGE_MEDIA#
Google's Manage audio focus guide describes two system behaviours on Android 12 and higher, and both are scoped by usage. The forced fade-out applies when the playing app "has either the AudioAttributes.USAGE_MEDIA or AudioAttributes.USAGE_GAME usage attribute," and another app requests AUDIOFOCUS_GAIN. The incoming-call mute applies to an app that "has either the AudioAttributes.USAGE_MEDIA or AudioAttributes.USAGE_GAME usage attribute," has focus, and is playing: "its playback is muted until the call ends."
For a cue played with USAGE_MEDIA, the call mute is arguably what you want. For a long guided session it is exactly what you want. Either way, it is a behaviour you get or lose by choosing the usage.
Documented consequence 2: CONTENT_TYPE_SPEECH changes how you are ducked#
The same guide: automatic ducking only happens when the playing app "is not playing audio with content type AudioAttributes.CONTENT_TYPE_SPEECH." The AudioFocusRequest reference says this "behavior is independent of the use of AudioFocusRequest, but tied to the use of AudioAttributes," and that speech players get AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK through their listener "so they can pause instead."
This matters if your app plays long spoken content of its own: a guided run, an audio class. Mark it CONTENT_TYPE_SPEECH and a navigation prompt or a notification will not talk over your coach; your listener gets the chance to pause. The flip side is that you must implement that listener, because the system will no longer duck you.
For a three-second cue, the content type of your own player barely matters to ducking; what matters is the content type of the app you are interrupting.
Documented consequence 3: capture#
The reference's capture policy note: "For privacy, the following usages cannot be recorded: VOICE_COMMUNICATION*, USAGE_NOTIFICATION*, USAGE_ASSISTANCE* and USAGE_ASSISTANT." And on Android 10: "only USAGE_UNKNOWN, USAGE_MEDIA and USAGE_GAME may be captured." If your users record their workouts with a screen-recording or streaming app and expect the coaching voice in the recording, an assistance usage will leave it out. That is a product consideration, not a reason to pick one usage over another.
Google's general guidance points the other way#
Google's Handling changes in audio output guide gives broader advice: "Unless your app is an alarm clock, you should play audio with usage AudioAttributes.USAGE_MEDIA," so that the volume keys adjust the right stream, using setVolumeControlStream() with the stream from AudioAttributes.getVolumeControlStream. That sentence is written for apps whose audio is media. It is also the strongest general instruction Google gives, and we are not going to pretend it does not exist.
What we could not verify is which volume stream each assistance usage maps to on current devices. That decides which volume the user's buttons change while a cue plays, and it is the part to test on hardware before you commit.
Our recommendation#
What follows is judgement, built on the facts above.
| What you are playing | Usage | Content type | Why |
|---|---|---|---|
| Short spoken cue over the user's music | USAGE_ASSISTANCE_NAVIGATION_GUIDANCE | CONTENT_TYPE_SPEECH | The same shape as Google's own example for transient ducking focus: brief spoken directions over music |
| Beep, countdown tick, interval chime | USAGE_ASSISTANCE_SONIFICATION | CONTENT_TYPE_SONIFICATION | Google's description of both constants fits a short sound accompanying an event |
| Long guided session or audio class | USAGE_MEDIA | CONTENT_TYPE_SPEECH | It is media; the call mute applies; speech content type means others pause rather than talk over it |
| The app's own music bed | USAGE_MEDIA | CONTENT_TYPE_MUSIC | It is music, and should be ducked by other apps' prompts like any other |
USAGE_ASSISTANT is a defensible alternative for spoken cues: "audio instructions" is close to what a coach says. We lean to navigation guidance because Google's transient-ducking examples are written around it. Whatever you choose, use the same attributes in the focus request and the player; Google's focus guide says to, and a mismatch means the focus request describes a different sound from the one you play.
val spokenCue = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
val tone = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build()
Monday morning#
List every AudioAttributes.Builder in the app and write down what each one plays. Make cue, tone, guided-session and music-bed attributes four named constants instead of inline builders. Pass the same constant to the player and the focus request. Then, on a real device, press the volume keys while a cue is speaking and confirm the user is changing the volume they expect; that is the part no reference we read could tell us.
Frequently asked questions
- Which AudioAttributes usage should a spoken workout cue use?
- There is no documented answer, so this is our judgement: USAGE_ASSISTANCE_NAVIGATION_GUIDANCE with CONTENT_TYPE_SPEECH. Google describes that usage as driving or navigation directions, and Google's own examples for transient ducking focus are spoken directions over music, which is the shape of a coaching cue. USAGE_ASSISTANT, described as audio instructions or help utterances, is a defensible alternative. Whichever you choose, use the same attributes in the focus request and the player, and check on a device which volume the hardware keys change while a cue plays.
- Does CONTENT_TYPE_SPEECH stop my guided run audio from being ducked by other apps?
- Yes, by design. Google's audio focus guide says automatic ducking only applies when the playing app is not playing CONTENT_TYPE_SPEECH content, and the AudioFocusRequest reference says speech players are instead notified with AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK so they can pause. Google adds that this is tied to the AudioAttributes, not to whether you use AudioFocusRequest. So a guided session marked as speech will not be talked over by a navigation prompt, but you must implement the listener and pause, because the system will not duck you.
- What usage does an Android AudioFocusRequest use if I do not set attributes?
- USAGE_MEDIA. Google's audio focus guide and the AudioFocusRequest reference both say that if no attributes are set, the request uses AudioAttributes.USAGE_MEDIA. That matters because Android 12's forced fade-out and the incoming-call mute both apply to USAGE_MEDIA and USAGE_GAME players. Google also recommends using the same attributes in the focus request as in your player, so leaving them unset on one side and set on the other means the request describes a different sound from the one you play.
Keep reading
Elsewhere on the site
Pages that share this one’s concepts and sources, from other sections.
Next steps
Was this page useful?
Independent comparison, last reviewed October 3, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.
← All audio coaching · by AIFitnessAPI