Je suis très nouveau dans la programmation et surtout dans le flutter. Je veux écrire une table d'harmonie, essentiellement une liste de boutons et le travail de chaque bouton est de jouer un son que j'ai sur mon PC quand ils sont pressés. J'ai déjà fait la conception avec une vue de liste et quelques boutons matériels mais je ne sais pas comment leur faire jouer des sons lorsque j'appuie dessus. Est-ce que quelqu'un peut m'aider?
3 Réponses :
Code complet
import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart';
void main() => runApp(HomePage());
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
AudioCache _audioCache;
@override
void initState() {
super.initState();
// create this only once
_audioCache = AudioCache(prefix: "audio/", fixedPlayer: AudioPlayer()..setReleaseMode(ReleaseMode.STOP));
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Music play")),
body: RaisedButton(
onPressed: () => _audioCache.play('my_audio.mp3'),
child: Text("Play Audio"),
),
),
);
}
}
Ajouter la dépendance dans votre pubspec.yaml fichier, audioplayers: any .
Ajoutez un fichier audio dans votre fichier pubspec.yaml .
actifs: - assets / audio / my_audio.mp3
Exécuter les flutter packages get
erreur: la méthode «initState» n'est pas définie dans une superclasse de «MyApp».
erreur: la méthode 'AudioCache' n'est pas définie pour la classe '_HomePageState'.
import 'package:audioplayers/audio_cache.dart'; en haut de votre dossier.
Mon problème était que je n'avais pas travaillé avec des widgets avec état avant
import 'package:audioplayers/audio_cache.dart'; import 'package:audioplayers/audioplayers.dart';
J'avais besoin de changer cette ligne pour inclure 'assets' dans le chemin ... _audioCache = AudioCache (prefix: "assets / audio /", fixedPlayer: AudioPlayer () .. setReleaseMode (ReleaseMode.STOP));
Si vous souhaitez simplement lire la musique lorsque quelqu'un a appuyé sur le bouton, vous pouvez suivre ces étapes: -
1. Ajouter une dépendance
import 'package:audioplayers/audio_cache.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
final player = AudioCache();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: FlatButton(
child: Text("play "),
onPressed: () {
player.play('note1.wav');
},
),
),
),
);
}
}
puis exécutez la commande suivante dans votre terminal pour obtenir le package nouvellement ajouté -
player.play('note1.wav');
2. Importez-le dans main.dart ou dans le fichier dans lequel vous souhaitez l'utiliser.
final player = AudioCache();
Là, deux classes que vous pouvez importer AudioPlayer ou AudioCache et pour lire des fichiers locaux AudioCache seront utilisés.
3. Créez un objet d'AudioCache
import 'package:audioplayers/audio_cache.dart';
4. Utilisez la méthode play () pour lire votre audio
flutter packages get
Remarque - note1.wav est stocké dans le dossier assets de mon répertoire principal et vous n'avez pas à le mentionner lors de l'utilisation de la méthode play ().
Exemple de code -
dependencies:
audioplayers: ^0.10.0
Si quelqu'un a des problèmes avec cette implémentation, je devais arrêter l'application et la redémarrer. Le rechargement / redémarrage à chaud n'était pas suffisant.
Pour les sons répétés, je recommande le package soundpool .
D'après mon expérience, il offre une meilleure latence, c'est-à-dire un délai inférieur entre l'action de déclenchement et la lecture réelle du son.
Voici un exemple de code (copié à partir du fichier readme du package):
import 'package:soundpool/soundpool.dart';
Soundpool pool = Soundpool(streamType: StreamType.notification);
int soundId = await rootBundle.load("sounds/dices.m4a").then((ByteData soundData) {
return pool.load(soundData);
});
int streamId = await pool.play(soundId);
Essayez le plugin
audioplayersiciJ'ai vu ça mais je ne comprends rien de cette documentation ...