/** * Creates an {@link AudioAttributes} instance from this builder. */ public AudioAttributes build() { return new AudioAttributes(contentType, flags, usage); }
@Override public void setAudioAttributes(AudioAttributes audioAttributes) { if (this.audioAttributes.equals(audioAttributes)) { return; } this.audioAttributes = audioAttributes; if (tunneling) { // The audio attributes are ignored in tunneling mode, so no need to reset. return; } reset(); audioSessionId = C.AUDIO_SESSION_ID_UNSET; }
@RequiresApi(26) private int requestAudioFocusV26() { if (audioFocusRequest == null || rebuildAudioFocusRequest) { AudioFocusRequest.Builder builder = audioFocusRequest == null ? new AudioFocusRequest.Builder(focusGain) : new AudioFocusRequest.Builder(audioFocusRequest); boolean willPauseWhenDucked = willPauseWhenDucked(); audioFocusRequest = builder .setAudioAttributes(Assertions.checkNotNull(audioAttributes).getAudioAttributesV21()) .setWillPauseWhenDucked(willPauseWhenDucked) .setOnAudioFocusChangeListener(focusListener) .build(); rebuildAudioFocusRequest = false; } return Assertions.checkNotNull(audioManager).requestAudioFocus(audioFocusRequest); }
@TargetApi(21) private AudioTrack createAudioTrackV21() { android.media.AudioAttributes attributes; if (tunneling) { attributes = new android.media.AudioAttributes.Builder() .setContentType(android.media.AudioAttributes.CONTENT_TYPE_MOVIE) .setFlags(android.media.AudioAttributes.FLAG_HW_AV_SYNC) .setUsage(android.media.AudioAttributes.USAGE_MEDIA) .build(); } else { attributes = audioAttributes.getAudioAttributesV21(); } AudioFormat format = new AudioFormat.Builder() .setChannelMask(outputChannelConfig) .setEncoding(outputEncoding) .setSampleRate(outputSampleRate) .build(); int audioSessionId = this.audioSessionId != C.AUDIO_SESSION_ID_UNSET ? this.audioSessionId : AudioManager.AUDIO_SESSION_ID_GENERATE; return new AudioTrack(attributes, format, bufferSize, MODE_STREAM, audioSessionId); }