Flutter音乐播放audioplayers

news/2024/10/23 7:15:14/

简介

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

  • 可以从本地文件、网络资源或内存中加载音频
  • 可以控制音量、进度、速度和循环
  • 可以播放多个音频同时,或者使用单例模式
  • 可以监听播放状态和位置变化
  • 可以设置通知栏和锁屏控制

使用步骤

  1. 要使用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');

image.png
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 下或同工程内是比较好的方式。而使用网络资源需要考虑到网络状态及缓存等问题。

http://www.ppmy.cn/news/66435.html

相关文章

idea新建springboot项目并提交码云仓库

新建springboot项目 平常我们在使用联网方式新建springboot项目时总是会遇到连接失败等这种情况 IDEA创建项目,本质是从官网创建并下载项目,然后导入本地。 创建项目连接失败,一般是外国网站的原因导致连接超时,解决方式很简单&a…

Vue响应式工具

Vue数据检测:isRef()、isReactive()、isReadonly() isRef:检测是否为ref数据,返回布尔值 isReactive:检测是否为reactive数据,返回布尔值 isReadonly: 检测是否为readonly只读数据, 返回布尔值 **当rea…

class其实是function的语法糖,底层继承实现还是基于原型链

定义在原型上的方法与定义在构造函数内部的方法不同 function Person(name, age) {this.name name;this.age age;}Person.prototype.greet function() {console.log("Hello, my name is " this.name);};const person new Person("Alice", 25);functio…

Ubuntu执行定时命令的方法

简单使用如下 输入下面的命令安装at: sudo apt-get install at输入下面的命令: # e.g. at 22:04 2021-7-7 at [time] [date]接着输入自己想要执行的命令,按CtrlD结束输入。 接着自己的命令即可定时执行。 详细使用 生活中,我…

React 的源码与原理解读(十二):Hooks解读之一 useCallbackuseMemo

写在专栏开头(叠甲) 作者并不是前端技术专家,也只是一名喜欢学习新东西的前端技术小白,想要学习源码只是为了应付急转直下的前端行情和找工作的需要,这篇专栏是作者学习的过程中自己的思考和体会,也有很多参…

Educational Codeforces Round #148 (Rated for Div.2) A~C

A. New Palindrome 题意: 给定一个回文字符串,问是否可以调换其中两个字符,得到另一个不同的回文字符串。 思路: 题目的条件给的宽松,只是询问是否可以调换,并没有要求调换的位置。 方法一:…

LeetCode5. 最长回文子串

写在前面: 题目链接:LeetCode5. 最长回文子串 编程语言:C 题目难度:中等 一、题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例…

数据库系统工程师——第三章 数据结构与算法

文章目录 📂 第三章、数据结构与算法 📁 3.1 线性结构 📖 3.1.1 线性表 📖 3.1.2 栈和队列 📖 3.1.3 串 📁 3.2 数组和矩阵 📁 3.3 树和图 📖 3.3.1 树 📖 3.3.2 图 &…