Flutter音乐播放插件audioplayers使用步骤详解
作者:江山清风山间明月 发布时间:2021-10-12 14:46:05
简介
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,
),
);
资源文件的存放
assets/audio 目录下 - 这是指定给音频资源的目录,audioplayers 会自动搜索这个目录下的音频文件。
所以如果我们有一个 click.mp3 音频,可以放在:
assets/audio/click.mp3
然后在代码中直接引用文件名播放:
audioCache.play('click.mp3');
2. 任意目录,然后指定完整资源路径 - 我们也可以放在其他目录下,然后在播放时传入完整资源路径:
audio/click.mp3
在代码中播放:
audioCache.play('audio/click.mp3');
放在网络 - 我们也可以直接传入一个网络资源的链接,audioplayers 会直接播放该资源:
audioCache.play('https://example.com/click.mp3');
所以总结来说,在 Flutter 中我们可以:
将音频资源放在 assets/audio 目录下
放在任意目录,指定完整路径使
用网络资源来播放音频。一般来说,将资源放在 assets 下或同工程内是比较好的方式。而使用网络资源需要考虑到网络状态及缓存等问题。
来源:https://blog.csdn.net/yikezhuixun/article/details/130660544


猜你喜欢
- jrebelJRebel是一套JavaEE开发工具。JRebel允许开发团队在有限的时间内完成更多的任务修正更多的问题,发布更高质量的软件产
- 作为一个WPF控件开发者,我在工作中经常遇到如本文标题所示的问题。其实,这个问题并不是很难,只是在操作上有些繁琐。本文将尝试对这个问题进行解
- 一.使用MSScriptControl 到微软的网站上下载Windows Script Control,它是一个ActiveX(R) 控件,
- 微服务编排框架起始原因 是 我们公司 分布式事务 使用的是 seate 分布式事务框架,现在只在一些小部分使用,因为考虑到seate 对性能
- 一、引言使用原生的zookeeper时候会遇到watcher一次注册生效一次等情况,因此使用curatorcurator是Netflix公司
- 在做android 开发时,在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新
- 多线程run方法中直接调用service业务类应注意Java多线程run方法里边使用service业务类会产生java.lang.NullP
- 首先我将贴出几种实现圆角边框的dmeo程序效果图:方式一:使用shape元素填充背景,设置圆角/带弧度的角1、首先在 \res\drawab
- 这个进度条可以反映真实进度,并且完成百分比的文字时随着进度增加而移动的,所在位置也恰好是真实完成的百分比位置,效果如下:思路如下:第一部分是
- WebFlux服务编排WebFlux 服务编排是指使用 WebFlux 框架来编排多个异步服务的执行顺序和数据流动,从而构建出一个完整的、基
- 我在5月份的时候就申请了洞态IAST企业版内测,算是比较早的一批用户了。聊聊几个我比较在意的问题,比如API接口覆盖率、第三方开源组件检测以
- 传值就是将实参的值传到所调用的函数里面,实参的值并没有发生变化,默认传值的有int型,浮点型,bo
- mybatis-plus框架功能很强大,把很多功能都集成了,比如自动生成代码结构,mybatis crud封装,分页,动态数据源等等,附上官
- 引言在Google I/O 2014上,Google公布了Android L Preview版本,此版本的UI有了非常大的改变,很炫很给力!
- Java java.lang.ExceptionInInitializerError 错误如何解决引起 Java.lang.Ex
- 目录操作创建目录File类中有两个方法可以用来创建文件夹:mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败
- 本文实例讲述了Android Appwidget用法。分享给大家供大家参考,具体如下:App Widgets 是一个小型应用程序的View&
- 在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息:Error on line 60 of document
- 前言:在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程
- 本文实例讲述了Android编程之SharedPreferences文件存储操作的方法。分享给大家供大家参考。具体分析如下:SharedPr