Browse Source

fix: audios in app

pull/46/head
AmirrezaChegini 7 days ago
parent
commit
d85c7e3b64
  1. 4
      lib/core/constants/my_constants.dart
  2. 9
      lib/core/services/audio_service.dart
  3. 6
      lib/features/home/presentation/bloc/home_bloc.dart
  4. 5
      lib/features/level/presentation/bloc/level_bloc.dart
  5. 17
      lib/features/question/presentation/bloc/question_bloc.dart
  6. 2
      lib/init_bindings.dart

4
lib/core/constants/my_constants.dart

@ -24,7 +24,9 @@ class MyConstants {
static const String firstShowcase = 'FIRST_SHOWCASE'; static const String firstShowcase = 'FIRST_SHOWCASE';
/// Other /// Other
static const double mainAudioVolume = 0.3;
static const double questionAudioVolume = 1.0;
static const double musicAudioVolume = 0.3;
static const double effectAudioVolume = 0.2;
static const String defaultLanguage = 'en'; static const String defaultLanguage = 'en';
static const List<LanguageEntity> languages = [ static const List<LanguageEntity> languages = [
LanguageEntity(title: 'English (English)', code: 'en', locale: Locale('en','US')), LanguageEntity(title: 'English (English)', code: 'en', locale: Locale('en','US')),

9
lib/core/services/audio_service.dart

@ -6,11 +6,8 @@ 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({this.volume}) {
_player.setVolume(volume ?? 1);
}
AudioService();
Future<Duration?> setAudio({String? filePath, String? assetPath}) async { Future<Duration?> setAudio({String? filePath, String? assetPath}) async {
try { try {
@ -72,10 +69,10 @@ class AudioService {
} }
} }
Future<void> changeMute() async {
Future<void> changeMute({required double volume}) async {
try { try {
if (_player.volume == 0) { if (_player.volume == 0) {
await _player.setVolume(volume ?? 1);
await _player.setVolume(volume);
} else { } else {
await _player.setVolume(0); await _player.setVolume(0);
} }

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

@ -59,15 +59,17 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
Future<void> changeMute() async { Future<void> changeMute() async {
await Future.wait([ await Future.wait([
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
_mainAudioService.changeMute(volume: MyConstants.musicAudioVolume),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
]); ]);
} }
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,6 +189,7 @@ 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();
@ -223,8 +224,8 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
Future<void> changeMute() async { Future<void> changeMute() async {
await Future.wait([ await Future.wait([
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
_mainAudioService.changeMute(volume: MyConstants.musicAudioVolume),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
]); ]);
} }

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

@ -33,7 +33,7 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
) : super(QuestionState()) { ) : super(QuestionState()) {
volumeStream = _mainAudioService.volumeStream(); volumeStream = _mainAudioService.volumeStream();
playingStream = _mainAudioService.playingStream(); playingStream = _mainAudioService.playingStream();
stopMusic();
initAudios();
registerShowCase(); registerShowCase();
on<GetLevelEvent>(_getLevelEvent); on<GetLevelEvent>(_getLevelEvent);
on<ChooseAnswerEvent>(_chooseAnswerEvent); on<ChooseAnswerEvent>(_chooseAnswerEvent);
@ -42,6 +42,8 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
@override @override
Future<void> close() { Future<void> close() {
unRegisterShowCase(); unRegisterShowCase();
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume);
_backgroundAudioService.dispose();
animationController.dispose(); animationController.dispose();
return super.close(); return super.close();
} }
@ -69,6 +71,7 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
/// ------------Controllers------------ /// ------------Controllers------------
final AudioService _mainAudioService; final AudioService _mainAudioService;
final AudioService _backgroundAudioService = AudioService();
final AudioService _effectAudioService; final AudioService _effectAudioService;
late final AnimationController animationController; late final AnimationController animationController;
@ -124,11 +127,16 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
await _effectAudioService.play(); await _effectAudioService.play();
} }
Future<void> stopMusic() 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.setVolume(volume: 0.1),
_backgroundAudioService.setLoopMode(isLoop: true),
]); ]);
await _backgroundAudioService.play();
} }
Future<void> playWrongAudio() async { Future<void> playWrongAudio() async {
@ -148,8 +156,9 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
Future<void> changeMute() async { Future<void> changeMute() async {
await Future.wait([ await Future.wait([
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
_mainAudioService.changeMute(volume: MyConstants.questionAudioVolume),
_backgroundAudioService.changeMute(volume: 0.1),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
]); ]);
} }

2
lib/init_bindings.dart

@ -41,7 +41,7 @@ void initBindings() {
/// Classes /// Classes
locator.registerSingleton<IHttpRequest>(HttpRequestImpl()); locator.registerSingleton<IHttpRequest>(HttpRequestImpl());
locator.registerSingleton<AudioService>( locator.registerSingleton<AudioService>(
AudioService(volume: MyConstants.mainAudioVolume),
AudioService(),
instanceName: MyConstants.mainAudioService, instanceName: MyConstants.mainAudioService,
); );
locator.registerSingleton<AudioService>( locator.registerSingleton<AudioService>(

Loading…
Cancel
Save