fix(player): stabilize equalizer and visualizer
This commit is contained in:
@@ -77,8 +77,11 @@ class ServicioAudio {
|
||||
Future<void> setVolumen(double vol) => _handler.setVolumen(vol);
|
||||
double get volumen => _handler.volumen;
|
||||
bool get estaSonando => _handler.playbackState.value.playing;
|
||||
Stream<int?> get androidAudioSessionIdStream =>
|
||||
_handler.androidAudioSessionIdStream;
|
||||
Stream<int?> get androidAudioSessionIdStream async* {
|
||||
yield _handler.androidAudioSessionId;
|
||||
yield* _handler.androidAudioSessionIdStream;
|
||||
}
|
||||
|
||||
Future<void> dispose() async {}
|
||||
|
||||
// ── Ecualizador ───────────────────────────────────────────────────────────
|
||||
@@ -88,6 +91,8 @@ class ServicioAudio {
|
||||
|
||||
Future<void> aplicarPreset(PresetEcualizador preset) =>
|
||||
_handler.aplicarPreset(preset);
|
||||
Future<void> setEcualizadorActivo(bool activo) =>
|
||||
_handler.setEcualizadorActivo(activo);
|
||||
|
||||
Future<void> setBanda(int index, double db) => _handler.setBanda(index, db);
|
||||
}
|
||||
@@ -106,6 +111,7 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
StreamSubscription<PlaybackEvent>? _eventosSub;
|
||||
StreamSubscription<int?>? _androidAudioSessionIdSub;
|
||||
final _androidAudioSessionIdController = StreamController<int?>.broadcast();
|
||||
int? _androidAudioSessionId;
|
||||
Future<void> _colaCambioFuente = Future<void>.value();
|
||||
int _revisionFuente = 0;
|
||||
|
||||
@@ -116,9 +122,12 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
AndroidEqualizer? get ecualizador => _eq;
|
||||
bool _eqDisponible = false;
|
||||
bool get ecualizadorDisponible => _eqDisponible;
|
||||
bool _ecualizadorActivo = true;
|
||||
bool get ecualizadorActivo => _ecualizadorActivo;
|
||||
|
||||
PresetEcualizador _presetActual = PresetEcualizador.flat;
|
||||
PresetEcualizador get presetActual => _presetActual;
|
||||
int? get androidAudioSessionId => _androidAudioSessionId;
|
||||
Stream<int?> get androidAudioSessionIdStream =>
|
||||
_androidAudioSessionIdController.stream;
|
||||
|
||||
@@ -166,6 +175,7 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
_androidAudioSessionIdSub = _player.androidAudioSessionIdStream.listen((
|
||||
sessionId,
|
||||
) {
|
||||
_androidAudioSessionId = sessionId;
|
||||
if (!_androidAudioSessionIdController.isClosed) {
|
||||
_androidAudioSessionIdController.add(sessionId);
|
||||
}
|
||||
@@ -316,6 +326,7 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
|
||||
_eq = AndroidEqualizer();
|
||||
_eqDisponible = false;
|
||||
_androidAudioSessionId = null;
|
||||
_player = _crearPlayer();
|
||||
await _player.setVolume(_volumen);
|
||||
_conectarStreamsPlayer();
|
||||
@@ -342,7 +353,7 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
final params = await _eq.parameters;
|
||||
_eqDisponible = params.bands.isNotEmpty;
|
||||
if (_eqDisponible) {
|
||||
await _eq.setEnabled(true);
|
||||
await _eq.setEnabled(_ecualizadorActivo);
|
||||
await aplicarPreset(_presetActual);
|
||||
}
|
||||
} catch (_) {
|
||||
@@ -355,6 +366,8 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
_presetActual = preset;
|
||||
if (!_eqDisponible) return;
|
||||
try {
|
||||
await _eq.setEnabled(_ecualizadorActivo);
|
||||
if (!_ecualizadorActivo) return;
|
||||
final params = await _eq.parameters;
|
||||
for (
|
||||
int i = 0;
|
||||
@@ -368,12 +381,12 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
|
||||
/// Ajusta una banda individual.
|
||||
Future<void> setBanda(int index, double db) async {
|
||||
if (!_eqDisponible) return;
|
||||
final bandas = List<double>.from(_presetActual.bandas);
|
||||
if (index >= 0 && index < bandas.length) {
|
||||
bandas[index] = db;
|
||||
_presetActual = _presetActual.copyWithBandas(bandas);
|
||||
}
|
||||
if (!_eqDisponible || !_ecualizadorActivo) return;
|
||||
try {
|
||||
final params = await _eq.parameters;
|
||||
if (index < params.bands.length) {
|
||||
@@ -382,6 +395,17 @@ class PluriWaveAudioHandler extends BaseAudioHandler with SeekHandler {
|
||||
} catch (_) {}
|
||||
}
|
||||
|
||||
Future<void> setEcualizadorActivo(bool activo) async {
|
||||
_ecualizadorActivo = activo;
|
||||
if (!_eqDisponible) return;
|
||||
try {
|
||||
await _eq.setEnabled(activo);
|
||||
if (activo) {
|
||||
await aplicarPreset(_presetActual);
|
||||
}
|
||||
} catch (_) {}
|
||||
}
|
||||
|
||||
Future<void> setVolumen(double vol) async {
|
||||
_volumen = vol.clamp(0.0, 1.0);
|
||||
await _player.setVolume(_volumen);
|
||||
|
||||
Reference in New Issue
Block a user