Files
PiliPlus/lib/services/audio_session.dart
bggRGjQaUbCoE 7f70ee5045 refa: dir
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-05-03 15:26:06 +08:00

72 lines
2.3 KiB
Dart

import 'package:PiliPlus/plugin/pl_player/controller.dart';
import 'package:PiliPlus/plugin/pl_player/models/play_status.dart';
import 'package:audio_session/audio_session.dart';
class AudioSessionHandler {
late AudioSession session;
bool _playInterrupted = false;
setActive(bool active) {
session.setActive(active);
}
AudioSessionHandler() {
initSession();
}
Future<void> initSession() async {
session = await AudioSession.instance;
session.configure(const AudioSessionConfiguration.music());
session.interruptionEventStream.listen((event) {
final playerStatus = PlPlayerController.getPlayerStatusIfExists();
// final player = PlPlayerController.getInstance();
if (event.begin) {
if (playerStatus != PlayerStatus.playing) return;
// if (!player.playerStatus.playing) return;
switch (event.type) {
case AudioInterruptionType.duck:
PlPlayerController.setVolumeIfExists(
(PlPlayerController.getVolumeIfExists() ?? 0) * 0.5);
// player.setVolume(player.volume.value * 0.5);
break;
case AudioInterruptionType.pause:
PlPlayerController.pauseIfExists(isInterrupt: true);
// player.pause(isInterrupt: true);
_playInterrupted = true;
break;
case AudioInterruptionType.unknown:
PlPlayerController.pauseIfExists(isInterrupt: true);
// player.pause(isInterrupt: true);
_playInterrupted = true;
break;
}
} else {
switch (event.type) {
case AudioInterruptionType.duck:
PlPlayerController.setVolumeIfExists(
(PlPlayerController.getVolumeIfExists() ?? 0) * 2);
// player.setVolume(player.volume.value * 2);
break;
case AudioInterruptionType.pause:
if (_playInterrupted) PlPlayerController.playIfExists();
//player.play();
break;
case AudioInterruptionType.unknown:
break;
}
_playInterrupted = false;
}
});
// 耳机拔出暂停
session.becomingNoisyEventStream.listen((_) {
PlPlayerController.pauseIfExists();
// final player = PlPlayerController.getInstance();
// if (player.playerStatus.playing) {
// player.pause();
// }
});
}
}