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 {
final AudioPlayer _player = AudioPlayer();
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 {
try {
@ -69,10 +72,10 @@ class AudioService {
}
}
Future<void> changeMute({required double volume}) async {
Future<void> 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<double> volumeStream() => _player.volumeStream;
double get audioVolume => _player.volume;
Stream<bool> playingStream() async* {
_player.processingStateStream.listen((event) {
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 {
await Future.wait([
_mainAudioService.changeMute(volume: MyConstants.musicAudioVolume),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
]);
}
Future<void> 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();
}

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

@ -189,7 +189,6 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
Future<void> 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<LevelEvent, LevelState> {
Future<void> changeMute() async {
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()) {
volumeStream = _mainAudioService.volumeStream();
playingStream = _mainAudioService.playingStream();
// LocalStorage.saveData(key: MyConstants.firstShowcase, value: 'false');
initAudios();
registerShowCase();
on<GetLevelEvent>(_getLevelEvent);
@ -43,7 +42,9 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
@override
Future<void> 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<QuestionEvent, QuestionState> {
/// ------------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<QuestionEvent, QuestionState> {
Future<void> 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<QuestionEvent, QuestionState> {
Future<void> 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(),
]);
}

4
lib/init_bindings.dart

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

Loading…
Cancel
Save