How to configure audio_session to duck others with Flutter

96 views Asked by At

I need to play notifications without interrupting an existing music playlist.

The playlist volume is currently being muted, but I require it to be turned up again or not muted

With just_audio: ^0.9.34 audio_session: ^0.1.16

My code:

audioInit() async {
    //Control sesion de audio
    sessionAudio = await AudioSession.instance;
    await sessionAudio.configure(AudioSessionConfiguration(
      avAudioSessionCategory: AVAudioSessionCategory.playback,
      avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.duckOthers,
      avAudioSessionMode: AVAudioSessionMode.defaultMode,
      avAudioSessionRouteSharingPolicy:
          AVAudioSessionRouteSharingPolicy.defaultPolicy,
      avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.none,
      androidAudioAttributes: const AndroidAudioAttributes(
        contentType: AndroidAudioContentType.music,
        flags: AndroidAudioFlags.none,
        usage: AndroidAudioUsage.media,
      ),
      androidAudioFocusGainType: AndroidAudioFocusGainType.gainTransientMayDuck,
      androidWillPauseWhenDucked: true,
    ));
  }

Play notification

Future<void> playNotification(String audioasset) async {
  if (prefsUsuario.volumeSelect > 0) {
    // Activate the audio session before playing audio.
    if (await sessionAudio.setActive(true)) {
      // Now play audio.
      AudioPlayer playerFinal = AudioPlayer();
      if (kIsWeb) {
        playerFinal.setAudioSource(
          AudioSource.uri(Uri.parse("assets/$audioasset")),
          initialPosition: Duration.zero,
          preload: true,
        );
      } else {
        playerFinal.setAudioSource(AudioSource.asset(audioasset));
      }

      playerFinal.setVolume(prefsUsuario.volumeSelect);
      playerFinal.play();
    } else {}
  }
}
0

There are 0 answers