minisound 3.0.0
minisound: ^3.0.0 copied to clipboard
A high-level real-time audio library for playback, generation and recording, focusing on ease of use and performance. Based on miniaudio.
import "dart:io";
import "package:example/widgets/generation_example.dart";
import "package:example/widgets/playback_example.dart";
import "package:example/widgets/recording_example.dart";
import "package:flutter/foundation.dart";
import "package:flutter/material.dart";
import "package:minisound/player.dart";
import "package:minisound/recorder.dart";
import "package:permission_handler/permission_handler.dart";
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (kIsWasm) {
if (kDebugMode) print("Its the actual WASM build!");
}
runApp(const MaterialApp(title: "Minisound Example", home: ExamplePage()));
}
class ExamplePage extends StatefulWidget {
const ExamplePage({super.key});
@override
State<ExamplePage> createState() => _ExamplePageState();
}
class _ExamplePageState extends State<ExamplePage> {
final player = Player();
final recorder = Recorder();
late final initFuture = player.init().then((_) {
if (kIsWeb || !Platform.isLinux) return Permission.microphone.request();
return Future.value();
}).then((_) => recorder.init());
@override
Widget build(BuildContext context) {
const space = SizedBox.square(dimension: 20);
return Scaffold(
appBar: AppBar(title: const Text("Minisound Example")),
body: SingleChildScrollView(
child: Center(
child: FutureBuilder(
future: initFuture,
builder: (_, snapshot) => switch (snapshot) {
AsyncSnapshot(
connectionState: ConnectionState.done,
hasError: false
) =>
Column(children: [
PlaybackExample(player),
space,
GenerationExample(player),
space,
RecordingExample(recorder, player: player),
]),
AsyncSnapshot(connectionState: ConnectionState.waiting) =>
const Center(child: CircularProgressIndicator()),
AsyncSnapshot(:final error) =>
Center(child: Text("Error: $error")),
},
),
),
),
);
}
}