Browse Source

fix: audio volume

pull/46/head
AmirrezaChegini 6 days ago
parent
commit
c528e2f5d4
  1. 11
      lib/core/services/audio_service.dart
  2. 6
      lib/features/home/presentation/bloc/home_bloc.dart
  3. 5
      lib/features/level/presentation/bloc/level_bloc.dart
  4. 21
      lib/features/question/presentation/bloc/question_bloc.dart
  5. 4
      lib/init_bindings.dart

11
lib/core/services/audio_service.dart

@ -6,8 +6,11 @@ import 'package:just_audio/just_audio.dart';
class AudioService { class AudioService {
final AudioPlayer _player = AudioPlayer(); final AudioPlayer _player = AudioPlayer();
final StreamController<bool> _streamController = StreamController.broadcast(); final StreamController<bool> _streamController = StreamController.broadcast();
final double volume;
AudioService();
AudioService({required this.volume}){
setVolume(volume: volume);
}
Future<Duration?> setAudio({String? filePath, String? assetPath}) async { Future<Duration?> setAudio({String? filePath, String? assetPath}) async {
try { try {
@ -69,10 +72,10 @@ class AudioService {
} }
} }
Future<void> changeMute({required double volume}) async {
Future<void> changeMute({double? newVolume}) async {
try { try {
if (_player.volume == 0) { if (_player.volume == 0) {
await _player.setVolume(volume);
await _player.setVolume(newVolume ?? volume);
} else { } else {
await _player.setVolume(0); await _player.setVolume(0);
} }
@ -95,6 +98,8 @@ class AudioService {
Stream<double> volumeStream() => _player.volumeStream; Stream<double> volumeStream() => _player.volumeStream;
double get audioVolume => _player.volume;
Stream<bool> playingStream() async* { Stream<bool> playingStream() async* {
_player.processingStateStream.listen((event) { _player.processingStateStream.listen((event) {
if (event == ProcessingState.ready) { if (event == ProcessingState.ready) {

6
lib/features/home/presentation/bloc/home_bloc.dart

@ -59,17 +59,15 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
Future<void> changeMute() async { Future<void> changeMute() async {
await Future.wait([ await Future.wait([
_mainAudioService.changeMute(volume: MyConstants.musicAudioVolume),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
]); ]);
} }
Future<void> playMusic() async { Future<void> playMusic() async {
await Future.wait([ await Future.wait([
_mainAudioService.setAudio(assetPath: MyAudios.home), _mainAudioService.setAudio(assetPath: MyAudios.home),
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume),
_mainAudioService.setLoopMode(isLoop: true), _mainAudioService.setLoopMode(isLoop: true),
_effectAudioService.setVolume(volume: MyConstants.effectAudioVolume),
]); ]);
await _mainAudioService.play(); await _mainAudioService.play();
} }

5
lib/features/level/presentation/bloc/level_bloc.dart

@ -189,7 +189,6 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
Future<void> playMusic() async { Future<void> playMusic() async {
await Future.wait([ await Future.wait([
_mainAudioService.setAudio(assetPath: MyAudios.question), _mainAudioService.setAudio(assetPath: MyAudios.question),
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume),
_mainAudioService.setLoopMode(isLoop: true), _mainAudioService.setLoopMode(isLoop: true),
]); ]);
await _mainAudioService.play(); await _mainAudioService.play();
@ -224,8 +223,8 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
Future<void> changeMute() async { Future<void> changeMute() async {
await Future.wait([ await Future.wait([
_mainAudioService.changeMute(volume: MyConstants.musicAudioVolume),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
]); ]);
} }

21
lib/features/question/presentation/bloc/question_bloc.dart

@ -33,7 +33,6 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
) : super(QuestionState()) { ) : super(QuestionState()) {
volumeStream = _mainAudioService.volumeStream(); volumeStream = _mainAudioService.volumeStream();
playingStream = _mainAudioService.playingStream(); playingStream = _mainAudioService.playingStream();
// LocalStorage.saveData(key: MyConstants.firstShowcase, value: 'false');
initAudios(); initAudios();
registerShowCase(); registerShowCase();
on<GetLevelEvent>(_getLevelEvent); on<GetLevelEvent>(_getLevelEvent);
@ -43,7 +42,9 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
@override @override
Future<void> close() { Future<void> close() {
unRegisterShowCase(); unRegisterShowCase();
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume);
if (_mainAudioService.audioVolume != 0) {
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume);
}
_backgroundAudioService.dispose(); _backgroundAudioService.dispose();
animationController.dispose(); animationController.dispose();
return super.close(); return super.close();
@ -72,7 +73,7 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
/// ------------Controllers------------ /// ------------Controllers------------
final AudioService _mainAudioService; final AudioService _mainAudioService;
final AudioService _backgroundAudioService = AudioService();
final AudioService _backgroundAudioService = AudioService(volume: 0);
final AudioService _effectAudioService; final AudioService _effectAudioService;
late final AnimationController animationController; late final AnimationController animationController;
@ -137,12 +138,16 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
Future<void> initAudios() async { Future<void> initAudios() async {
await Future.wait([ await Future.wait([
_mainAudioService.stop(), _mainAudioService.stop(),
_mainAudioService.setVolume(volume: MyConstants.questionAudioVolume),
_mainAudioService.setLoopMode(isLoop: false), _mainAudioService.setLoopMode(isLoop: false),
_backgroundAudioService.setAudio(assetPath: MyAudios.question), _backgroundAudioService.setAudio(assetPath: MyAudios.question),
_backgroundAudioService.setVolume(volume: 0.1),
_backgroundAudioService.setLoopMode(isLoop: true), _backgroundAudioService.setLoopMode(isLoop: true),
]); ]);
if (_mainAudioService.audioVolume != 0) {
await Future.wait([
_mainAudioService.setVolume(volume: MyConstants.questionAudioVolume),
_backgroundAudioService.setVolume(volume: 0.1),
]);
}
await _backgroundAudioService.play(); await _backgroundAudioService.play();
} }
@ -163,9 +168,9 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
Future<void> changeMute() async { Future<void> changeMute() async {
await Future.wait([ await Future.wait([
_mainAudioService.changeMute(volume: MyConstants.questionAudioVolume),
_backgroundAudioService.changeMute(volume: 0.1),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
_mainAudioService.changeMute(newVolume: MyConstants.questionAudioVolume),
_backgroundAudioService.changeMute(newVolume: 0.1),
_effectAudioService.changeMute(),
]); ]);
} }

4
lib/init_bindings.dart

@ -41,11 +41,11 @@ void initBindings() {
/// Classes /// Classes
locator.registerSingleton<IHttpRequest>(HttpRequestImpl()); locator.registerSingleton<IHttpRequest>(HttpRequestImpl());
locator.registerSingleton<AudioService>( locator.registerSingleton<AudioService>(
AudioService(),
AudioService(volume: MyConstants.musicAudioVolume),
instanceName: MyConstants.mainAudioService, instanceName: MyConstants.mainAudioService,
); );
locator.registerSingleton<AudioService>( locator.registerSingleton<AudioService>(
AudioService(),
AudioService(volume: MyConstants.effectAudioVolume),
instanceName: MyConstants.effectAudioService, instanceName: MyConstants.effectAudioService,
); );
locator.registerSingleton<AppBloc>(AppBloc()); locator.registerSingleton<AppBloc>(AppBloc());

Loading…
Cancel
Save