From e4e6213f17414ba47769808d188a9064a0169db3 Mon Sep 17 00:00:00 2001 From: Yugesh-Kumar-S Date: Thu, 19 Jun 2025 20:47:37 +0530 Subject: [PATCH 1/2] Used existing AudioJack --- lib/providers/soundmeter_state_provider.dart | 41 ++++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/lib/providers/soundmeter_state_provider.dart b/lib/providers/soundmeter_state_provider.dart index 5bc5eb50f..1f6ff158b 100644 --- a/lib/providers/soundmeter_state_provider.dart +++ b/lib/providers/soundmeter_state_provider.dart @@ -2,17 +2,18 @@ import 'dart:async'; import 'dart:math'; import 'package:fl_chart/fl_chart.dart'; import 'package:pslab/others/logger_service.dart'; -import 'package:flutter_audio_capture/flutter_audio_capture.dart'; import 'package:flutter/foundation.dart'; import 'package:pslab/constants.dart'; +import 'package:pslab/others/audio_jack.dart'; class SoundMeterStateProvider extends ChangeNotifier { double _currentDb = 0.0; Timer? _timeTimer; + Timer? _audioTimer; final List _dbData = []; final List _timeData = []; final List dbChartData = []; - FlutterAudioCapture? _audioCapture; + AudioJack? _audioJack; double _startTime = 0; double _currentTime = 0; final int _maxLength = 50; @@ -23,11 +24,12 @@ class SoundMeterStateProvider extends ChangeNotifier { void initializeSensors() async { try { - _audioCapture = FlutterAudioCapture(); - - await _audioCapture!.init(); + _audioJack = AudioJack(); + await _audioJack!.initialize(); + await _audioJack!.start(); _startTime = DateTime.now().millisecondsSinceEpoch / 1000.0; + _timeTimer = Timer.periodic(const Duration(seconds: 1), (timer) { _currentTime = (DateTime.now().millisecondsSinceEpoch / 1000.0) - _startTime; @@ -35,25 +37,21 @@ class SoundMeterStateProvider extends ChangeNotifier { notifyListeners(); }); - await _audioCapture!.start( - (Float32List audioData) { - _currentDb = _calculateDecibels(audioData); - notifyListeners(); - }, - (error) { - logger.e( - "$soundMeterError $error", - ); - }, - sampleRate: 44100, - bufferSize: 4096, - ); + _audioTimer = Timer.periodic(const Duration(milliseconds: 100), (timer) { + if (_audioJack!.isListening()) { + final audioData = _audioJack!.read(); + if (audioData.isNotEmpty) { + _currentDb = _calculateDecibels(audioData); + notifyListeners(); + } + } + }); } catch (e) { logger.e("$soundMeterInitialError $e"); } } - double _calculateDecibels(Float32List audioData) { + double _calculateDecibels(List audioData) { if (audioData.isEmpty) return 0.0; double sum = 0; @@ -71,9 +69,10 @@ class SoundMeterStateProvider extends ChangeNotifier { return dbSPL.clamp(20.0, 120.0); } - void disposeSensors() { - _audioCapture?.stop(); + void disposeSensors() async { + await _audioJack?.close(); _timeTimer?.cancel(); + _audioTimer?.cancel(); } @override From a8e7aa31a79d9a62edcb7b6d1bd1d7426d542e48 Mon Sep 17 00:00:00 2001 From: Yugesh-Kumar-S Date: Thu, 19 Jun 2025 21:23:07 +0530 Subject: [PATCH 2/2] fix: add null check for _audioJack --- lib/providers/soundmeter_state_provider.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/providers/soundmeter_state_provider.dart b/lib/providers/soundmeter_state_provider.dart index 1f6ff158b..2edee2531 100644 --- a/lib/providers/soundmeter_state_provider.dart +++ b/lib/providers/soundmeter_state_provider.dart @@ -38,7 +38,7 @@ class SoundMeterStateProvider extends ChangeNotifier { }); _audioTimer = Timer.periodic(const Duration(milliseconds: 100), (timer) { - if (_audioJack!.isListening()) { + if (_audioJack != null && _audioJack!.isListening()) { final audioData = _audioJack!.read(); if (audioData.isNotEmpty) { _currentDb = _calculateDecibels(audioData); @@ -70,9 +70,10 @@ class SoundMeterStateProvider extends ChangeNotifier { } void disposeSensors() async { - await _audioJack?.close(); _timeTimer?.cancel(); _audioTimer?.cancel(); + await _audioJack?.close(); + _audioJack = null; } @override