Flutter音乐播放audioplayers

news2025/1/23 9:28:00

简介

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.coloradmin.cn/o/521905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《编程思维与实践》1069.第一位数字

《编程思维与实践》1069.第一位数字 题目 思路 由于正整数N的N次方最大可以为 1 0 8 ⋅ 1 0 8 10^{8\cdot 10^8} 108⋅108,加上数据可能有很多组,所以直接采用大整数计算次方这方法很可能超时, 这里给出一种数学算法: 幂指函数通常的处理方式是取对数将乘方转化为乘法: N N 1…

Linux驱动编程(驱动程序基石)(上)

一、休眠与唤醒 要休眠的线程,放在 wq 队列里,中断处理函数从 wq 队列里把它取出来唤醒。所以,我们要做这几件事: ① 初始化 wq 队列 ② 在驱动的 read 函数中,调用 wait_event_interruptible: 它本身会判断…

English Learning - L3 作业打卡 Lesson1 Day7 2023.5.11 周四

English Learning - L3 作业打卡 Lesson1 Day7 2023.5.11 周四 引言🍉句1: Blues is slow, sad and soulful.成分划分弱读连读爆破语调 🍉句2: Duke Ellington and his orchestra recorded a famous song – Mood Indigo – about the deep blue color, …

【嵌入式环境下linux内核及驱动学习笔记-(11-设备树)】

目录 1、设备树体系1.1 DTS /DTSI / DTC / DTB 2、基础语法2.1 节点语法2.1.1 通用名称建议 2.2 属性语法2.2.1 属性值 2.3 关于label2.4 节点的[unit-address] 与reg属性2.5 根节点 /2.6 标准属性compatible2.6.1 of_machine_is_compatible函数 2.7 地址编码2.7.1 标准属性#ad…

Linux常用命令(4)

文章目录 Linux常用命令(4)查找文件或目录 find在当前文件下找一个hello.txt的文件在/user/include目录下找stdio.h文件 查找内容 grep在当前目录的hello.txt 文件中搜索1234在当前目录下所有文件中搜索1234在当前目录下所有以.txt结尾的文件中搜索1234 制作压缩包和解压缩命令…

Java 函数式编程 详细介绍

在兼顾面向对象特性的基础上,Java语言通过Lambda表达式与方法引用等,为开发者打开了函数式编程的大门。 下面我们做一个初探。 Lambda的延迟执行 有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延…

PID现场参数调试解密

看图 反馈与给定曲线 1.超调过大,减小比例,增大积分时间 2.迅速变化,存在小超调 3.实际值缓慢接近设定值,并且无超调的达到设定值 4.增益系数太小和/或微分时间太长 5.益系数太小和/或积分时间太长 公式(西门子FB41) 举例 现象…

20230513查找瑞芯微RK3588开发板以及对DP接口的支持

20230513查找瑞芯微RK3588开发板以及对DP接口的支持 2023/5/13 17:43 01、t-firefly https://www.t-firefly.com/ https://www.t-firefly.com/product/industry/aio1684xjd4 https://www.t-firefly.com/product/industry/aio3588q https://item.taobao.com/item.htm?spma1z10.…

三轴和直剪

目录 常规三轴 成样 预压 围压加载 二维直剪 成样 预压 围压加载 常规三轴 成样 cylinder keyword ...(3D ONLY) Generate a cylinder in 3D. If the name keyword has not been specified, then s cylinderWall. By default, the cylinder is closed and each side o…

HTTP协议(二)/HTTPS

HTTPS是啥 https是在http协议的基础上,加上了数据的加密解密层,即TLS/SSL。在进行http请求的时候,通过TLS/SSL进行加密,在响应的时候,也会通过TLS/SSL进行解密。加密解密层TLS/SSL不会对下三层加密解密,而…

【27】核心易中期刊推荐——计算机工程与技术

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

[ 云计算 华为云 ] 华为云开天 aPaaS:构建高效的企业数字化平台(下)

文章目录 前言四、华为云开天aPaaS 核心功能4.1 业务模型管理4.2 连接器4.2.1 连接器的种类4.2.1.1 公共连接器4.2.1.2 私有连接器 4.2.2连接器的开发步骤 4.3 自动化流4.3.1 自动化流介绍4.3.2 自动化流日志监控 4.4 自定义逻辑处理4.5 分享连接器和流模板 五、aPaaS 的应用实…

关于C/C++语言重复包含头文件,编译时报错已定义的宏未定义的原因及解决方法

在编写一个文件较多的单片机程序时,为了在一个文件中定义的变量或宏能被另一个文件使用,经常会写成在多个头文件相互包含,由此将可能会导致明明已经定义的宏,且已经将宏所在的文件使用 #include 包含,编译时仍会报错未…

自学大语言模型的应用程序框架Langchain(初入门)

现阶段chatGPT非常火热。带动了第三方开源库:LangChain火热。它是一个在大语言模型基础上实现联网搜索并给出回答、总结 PDF 文档、基于某个 Youtube 视频进行问答等等的功能的应用程序。 什么是Langchain LangChain 是一个用于开发由语言模型驱动的应用程序的框架…

Vue 3.3 浪客剑心

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 特征弃用一、 < s c r i p t s e t u p > <script setup…

【啃书C++Primer5】-编写一个简单C++程序

每个C程序都包含一个或多个函数(function)&#xff0c;其中一个必须命名为main。操作系统通过调用main来运行C程序。下面是一个非常简单的main函数&#xff0c;它什么也不干&#xff0c;只是返回给操作系统一个值: int main() {return 0; }一个函数的定义包含四部分:返回类型(r…

【讨论话题】 工作中应不应该出于好心,帮助同事完成不属于你职责范围内的问题?

前言 职场如战场&#xff0c;职场中经常有一种好心帮忙反而成了义务的乱相存在。我们要做一个好人&#xff0c;同事要防备一些坏人。 勿以善小而不为&#xff0c;勿以恶小而为之 文章目录 前言社群内部讨论社群内部讨论总结师父的回答如何优雅的说不总结 社群内部讨论 先来看…

声音合成——Foley Sound——DECASE项目——多模态智能感知与应用——代码实现(6)

文章目录 概述encoder的编写过程代码编写运行结果问题总结 decoder的编写过程知识补充关于逆卷积 代码编写运行结果总结 Autoencoder模型编写 compile方法 train方法 保存和加载模型模块编写实现代码——autoencoder代码实现代码——train代码实现代码——保存和加载模型的代…

GPT-4最强竞品迎来重磅升级:一次10万token,百页资料一分钟总结完毕

夕小瑶科技说 分享 来源 | 量子位 作者 | 丰色 萧箫 号称ChatGPT“最强竞争对手”的Claude&#xff0c;今天迎来史诗级更新—— 模型记忆力原地起飞&#xff0c;现在1分钟看完一本数万字的小说&#xff0c;已经不在话下。 消息一出&#xff0c;评论区直接炸了&#xff0c;网友…

HTTP第九讲——你能写出正确的网址吗?

应该用什么来标记服务器上的资源呢&#xff1f;怎么区分“这个”资源和“那个”资源呢&#xff1f; 用的是 URI&#xff0c;也就是统一资源标识符&#xff08;Uniform Resource Identifier&#xff09;。因为它经常出现在浏览器的地址栏里&#xff0c;所以俗称为“网络地址”&a…