From c528e2f5d4d0b3f9b573e8e67f13f67343bed13b Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Tue, 2 Dec 2025 19:37:04 +0330 Subject: [PATCH] fix: audio volume --- lib/core/services/audio_service.dart | 11 +++++++--- .../home/presentation/bloc/home_bloc.dart | 6 ++---- .../level/presentation/bloc/level_bloc.dart | 5 ++--- .../presentation/bloc/question_bloc.dart | 21 ++++++++++++------- lib/init_bindings.dart | 4 ++-- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/lib/core/services/audio_service.dart b/lib/core/services/audio_service.dart index f8d6610..2feb262 100644 --- a/lib/core/services/audio_service.dart +++ b/lib/core/services/audio_service.dart @@ -6,8 +6,11 @@ import 'package:just_audio/just_audio.dart'; class AudioService { final AudioPlayer _player = AudioPlayer(); final StreamController _streamController = StreamController.broadcast(); + final double volume; - AudioService(); + AudioService({required this.volume}){ + setVolume(volume: volume); + } Future setAudio({String? filePath, String? assetPath}) async { try { @@ -69,10 +72,10 @@ class AudioService { } } - Future changeMute({required double volume}) async { + Future changeMute({double? newVolume}) async { try { if (_player.volume == 0) { - await _player.setVolume(volume); + await _player.setVolume(newVolume ?? volume); } else { await _player.setVolume(0); } @@ -95,6 +98,8 @@ class AudioService { Stream volumeStream() => _player.volumeStream; + double get audioVolume => _player.volume; + Stream playingStream() async* { _player.processingStateStream.listen((event) { if (event == ProcessingState.ready) { diff --git a/lib/features/home/presentation/bloc/home_bloc.dart b/lib/features/home/presentation/bloc/home_bloc.dart index 98a52fc..706dfa9 100644 --- a/lib/features/home/presentation/bloc/home_bloc.dart +++ b/lib/features/home/presentation/bloc/home_bloc.dart @@ -59,17 +59,15 @@ class HomeBloc extends Bloc { Future changeMute() async { await Future.wait([ - _mainAudioService.changeMute(volume: MyConstants.musicAudioVolume), - _effectAudioService.changeMute(volume: MyConstants.effectAudioVolume), + _mainAudioService.changeMute(), + _effectAudioService.changeMute(), ]); } Future playMusic() async { await Future.wait([ _mainAudioService.setAudio(assetPath: MyAudios.home), - _mainAudioService.setVolume(volume: MyConstants.musicAudioVolume), _mainAudioService.setLoopMode(isLoop: true), - _effectAudioService.setVolume(volume: MyConstants.effectAudioVolume), ]); await _mainAudioService.play(); } diff --git a/lib/features/level/presentation/bloc/level_bloc.dart b/lib/features/level/presentation/bloc/level_bloc.dart index 272a65a..981cc3e 100644 --- a/lib/features/level/presentation/bloc/level_bloc.dart +++ b/lib/features/level/presentation/bloc/level_bloc.dart @@ -189,7 +189,6 @@ class LevelBloc extends Bloc { Future playMusic() async { await Future.wait([ _mainAudioService.setAudio(assetPath: MyAudios.question), - _mainAudioService.setVolume(volume: MyConstants.musicAudioVolume), _mainAudioService.setLoopMode(isLoop: true), ]); await _mainAudioService.play(); @@ -224,8 +223,8 @@ class LevelBloc extends Bloc { Future changeMute() async { await Future.wait([ - _mainAudioService.changeMute(volume: MyConstants.musicAudioVolume), - _effectAudioService.changeMute(volume: MyConstants.effectAudioVolume), + _mainAudioService.changeMute(), + _effectAudioService.changeMute(), ]); } diff --git a/lib/features/question/presentation/bloc/question_bloc.dart b/lib/features/question/presentation/bloc/question_bloc.dart index 764bc91..74d14c1 100644 --- a/lib/features/question/presentation/bloc/question_bloc.dart +++ b/lib/features/question/presentation/bloc/question_bloc.dart @@ -33,7 +33,6 @@ class QuestionBloc extends Bloc { ) : super(QuestionState()) { volumeStream = _mainAudioService.volumeStream(); playingStream = _mainAudioService.playingStream(); - // LocalStorage.saveData(key: MyConstants.firstShowcase, value: 'false'); initAudios(); registerShowCase(); on(_getLevelEvent); @@ -43,7 +42,9 @@ class QuestionBloc extends Bloc { @override Future close() { unRegisterShowCase(); - _mainAudioService.setVolume(volume: MyConstants.musicAudioVolume); + if (_mainAudioService.audioVolume != 0) { + _mainAudioService.setVolume(volume: MyConstants.musicAudioVolume); + } _backgroundAudioService.dispose(); animationController.dispose(); return super.close(); @@ -72,7 +73,7 @@ class QuestionBloc extends Bloc { /// ------------Controllers------------ final AudioService _mainAudioService; - final AudioService _backgroundAudioService = AudioService(); + final AudioService _backgroundAudioService = AudioService(volume: 0); final AudioService _effectAudioService; late final AnimationController animationController; @@ -137,12 +138,16 @@ class QuestionBloc extends Bloc { Future initAudios() async { await Future.wait([ _mainAudioService.stop(), - _mainAudioService.setVolume(volume: MyConstants.questionAudioVolume), _mainAudioService.setLoopMode(isLoop: false), _backgroundAudioService.setAudio(assetPath: MyAudios.question), - _backgroundAudioService.setVolume(volume: 0.1), _backgroundAudioService.setLoopMode(isLoop: true), ]); + if (_mainAudioService.audioVolume != 0) { + await Future.wait([ + _mainAudioService.setVolume(volume: MyConstants.questionAudioVolume), + _backgroundAudioService.setVolume(volume: 0.1), + ]); + } await _backgroundAudioService.play(); } @@ -163,9 +168,9 @@ class QuestionBloc extends Bloc { Future changeMute() async { 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(), ]); } diff --git a/lib/init_bindings.dart b/lib/init_bindings.dart index 4c09d5a..234c512 100644 --- a/lib/init_bindings.dart +++ b/lib/init_bindings.dart @@ -41,11 +41,11 @@ void initBindings() { /// Classes locator.registerSingleton(HttpRequestImpl()); locator.registerSingleton( - AudioService(), + AudioService(volume: MyConstants.musicAudioVolume), instanceName: MyConstants.mainAudioService, ); locator.registerSingleton( - AudioService(), + AudioService(volume: MyConstants.effectAudioVolume), instanceName: MyConstants.effectAudioService, ); locator.registerSingleton(AppBloc());