mpv_audio_kit 0.0.2+1
mpv_audio_kit: ^0.0.2+1 copied to clipboard
Flutter audio player built on top of libmpv. Supports audio filters, pitch control, equalizer, and all mpv audio features. Targets macOS, Windows, Linux, iOS and Android.
example/lib/main.dart
import 'dart:io';
import 'dart:ui';
import 'package:audio_service/audio_service.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:mpv_audio_kit/mpv_audio_kit.dart';
import 'package:window_manager/window_manager.dart';
import 'screens/player_page.dart';
import 'services/audio_handler.dart';
import 'services/settings_service.dart';
late final SettingsService settingsService;
late final Player player;
late final MpvAudioHandler audioHandler;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
await windowManager.ensureInitialized();
WindowOptions windowOptions = const WindowOptions(
size: Size(450, 850),
minimumSize: Size(400, 600),
center: true,
backgroundColor: Colors.transparent,
skipTaskbar: false,
titleBarStyle: TitleBarStyle.normal,
);
await windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
});
}
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
systemNavigationBarColor: Colors.transparent,
systemNavigationBarDividerColor: Colors.transparent,
));
MpvAudioKit.ensureInitialized();
settingsService = await SettingsService.init();
player = Player(
configuration: const PlayerConfiguration(
initialVolume: 50.0,
autoPlay: true,
logLevel: 'debug',
),
);
audioHandler = await AudioService.init(
builder: () => MpvAudioHandler(player),
config: const AudioServiceConfig(
androidNotificationChannelId: 'com.alesdrnz.mpvaudiokit.channel.audio',
androidNotificationChannelName: 'Audio playback',
androidNotificationOngoing: true,
androidShowNotificationBadge: false,
androidStopForegroundOnPause: true,
notificationColor: Color(0xFF6366f1),
),
);
await settingsService.restore(player);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'mpv_audio_kit',
debugShowCheckedModeBanner: false,
scrollBehavior: const CustomScrollBehavior(),
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF6366f1),
brightness: Brightness.light,
),
useMaterial3: true,
),
home: const ExcludeSemantics(child: PlayerPage()),
);
}
}
class CustomScrollBehavior extends MaterialScrollBehavior {
const CustomScrollBehavior();
@override
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
PointerDeviceKind.trackpad,
};
}