Equalizer (nativ), Dolby-Atmos-Zugang und Auto-Wiedergabe bei Kopfhoerern

- Native Bruecke AudioEffectsBridge.kt: Equalizer + BassBoost + Virtualizer
  auf der Audio-Session des Players, inkl. System-Klangeffekt-Panel
- Dart-Seite AudioEffects: Presets, Baender, Bass/Immersiv, persistiert
- EqualizerScreen nach Vorlage inkl. Drehregler (CustomPainter)
- Auto-Wiedergabe bei verbundenen Kopfhoerern (Klinke + Bluetooth)
- MODIFY_AUDIO_SETTINGS im Manifest
- Einstellungen: neuer Bereich "Ton"

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011snPXPafPC5i87o68H14W7
This commit is contained in:
2026-08-20 18:35:06 +02:00
co-authored by Claude Opus 5
parent 7aa98864aa
commit 1325badf90
13 changed files with 1020 additions and 1 deletions
+15
View File
@@ -10,6 +10,7 @@ import 'library/library_service.dart';
import 'library/my_music_screen.dart';
import 'library/playlist_service.dart';
import 'library/search_screen.dart';
import 'player/audio_effects.dart';
import 'player/audio_handler.dart';
import 'player/mini_player.dart';
import 'services/logger_service.dart';
@@ -24,6 +25,7 @@ late final PlaylistService _playlists;
late final OfflineMode _offlineMode;
late final CategoryService _categories;
late final AppSettings _settings;
late final AudioEffects _effects;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
@@ -45,6 +47,18 @@ Future<void> main() async {
androidShowNotificationBadge: true,
),
);
_effects = AudioEffects();
await _effects.init();
// Die Audio-Session steht erst beim Abspielen fest und kann wechseln —
// die Klangeffekte müssen dann neu daran gehängt werden.
_handler.androidAudioSessionIdStream.listen((id) {
if (id != null) _effects.attach(id);
});
_handler.autoPlayOnHeadphones = _settings.autoPlayOnHeadphones;
_settings.addListener(
() => _handler.autoPlayOnHeadphones = _settings.autoPlayOnHeadphones,
);
runApp(const MeloApp());
}
@@ -62,6 +76,7 @@ class MeloApp extends StatelessWidget {
ChangeNotifierProvider<OfflineMode>.value(value: _offlineMode),
ChangeNotifierProvider<CategoryService>.value(value: _categories),
ChangeNotifierProvider<AppSettings>.value(value: _settings),
ChangeNotifierProvider<AudioEffects>.value(value: _effects),
],
child: MaterialApp(
title: 'Melo',