关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Flutter音乐播放audioplayers

发布时间:2023-06-26 19:00:26

简介

Flutter的audioplayers是一个Flutter插件,可以播放多个同时的音频文件,支持Android、iOS、Linux、macOS、Windows和web平台。它有以下特点:


可以从本地文件、网络资源或内存中加载音频

可以控制音量、进度、速度和循环

可以播放多个音频同时,或者使用单例模式

可以监听播放状态和位置变化

可以设置通知栏和锁屏控制

使用步骤

要使用audioplayers,您需要在pubspec.yaml中添加依赖:

dependencies:  audioplayers: ^4.0.1

   

然后在您的代码中导入包:

import 'package:audioplayers/audioplayers.dart';

   

接下来,您可以创建一个AudioPlayer对象,并调用相应的方法来播放音频。例如,要从网络资源播放音频,您可以这样做:

AudioPlayer audioPlayer = AudioPlayer(); audioPlayer.play('https://example.com/sound.mp3');

   

要从本地文件播放音频,您需要先将音频文件放在assets文件夹下,并在pubspec.yaml中声明:

flutter:  assets:  - assets/sounds/

   

然后,您可以使用AudioCache对象来加载和播放本地音频:

AudioCache audioCache = AudioCache(); audioCache.play('assets/sounds/sound.wav');

   

要控制音频的播放,您可以使用AudioPlayer对象的一些方法,例如:

audioPlayer.pause(); // 暂停播放 audioPlayer.resume(); // 恢复播放 audioPlayer.stop(); // 停止播放 audioPlayer.seek(Duration(seconds: 10)); // 跳转到指定位置 audioPlayer.setVolume(0.5); // 设置音量 audioPlayer.setPlaybackRate(playbackRate: 1.5); // 设置速度 audioPlayer.setReleaseMode(ReleaseMode.LOOP); // 设置循环模式

   

要监听音频的状态和位置变化,您可以使用AudioPlayer对象的一些属性,例如:

audioPlayer.onPlayerStateChanged.listen((state) {  // 处理不同的状态 });  audioPlayer.onDurationChanged.listen((duration) {  // 获取音频的总时长 });  audioPlayer.onAudioPositionChanged.listen((position) {  // 获取音频的当前位置 });  audioPlayer.onPlayerError.listen((msg) {  // 处理错误信息 });

   

要设置通知栏和锁屏控制,您需要使用AudioPlayer对象的setNotification方法,并传入一个NotificationService对象。NotificationService对象包含了一些属性,例如标题、作者、封面图片等。例如:

await audioPlayer.setNotification(  NotificationService(  title: 'Title',  author: 'Author',  imageUrl: 'https://example.com/image.jpg',  forwardSkipInterval: const Duration(seconds: 30),  backwardSkipInterval: const Duration(seconds: 30),  duration: duration,  enableNextTrackButton: true,  enablePreviousTrackButton: true,  ), );

   

资源文件的存放

  1. assets/audio 目录下 - 这是指定给音频资源的目录,audioplayers 会自动搜索这个目录下的音频文件。
    所以如果我们有一个 click.mp3 音频,可以放在:
assets/audio/click.mp3

   

然后在代码中直接引用文件名播放:

audioCache.play('click.mp3');

   


2. 任意目录,然后指定完整资源路径 - 我们也可以放在其他目录下,然后在播放时传入完整资源路径:

audio/click.mp3

在代码中播放:

audioCache.play('audio/click.mp3');

   

  1. 放在网络 - 我们也可以直接传入一个网络资源的链接,audioplayers 会直接播放该资源:
audioCache.play('https://example.com/click.mp3');

   

所以总结来说,在 Flutter 中我们可以:

  1. 将音频资源放在 assets/audio 目录下
  2. 放在任意目录,指定完整路径
  3. 使用网络资源来播放音频。一般来说,将资源放在 assets 下或同工程内是比较好的方式。而使用网络资源需要考虑到网络状态及缓存等问题。




/template/Home/leiyu/PC/Static