MusicLibrary:一个丰富的音乐播放封装库
code小生,一个专注 Android 领域的技术分享平台
作者:lizixian18
链接:https://github.com/lizixian18/MusicLibrary
声明:本文是 lizixian18 投稿,转载等请联系作者获得授权。
MusicLibrary
一个丰富的音乐播放封装库,针对快速集成音频播放功能,你值得拥有。
前序
在日常开发中,如果项目中需要添加音频播放功能,是一件很麻烦的事情。一般需要处理的事情大概有音频服务的封装,播放器的封装,通知栏管理,联动系统媒体中心,音频焦点的管理,播放列表维护,各种API方法的编写等等…如果完善一点,还需要用到IPC去实现。
可见需要处理的事情非常多。
所以 MusicLibrary 就这样编写出来了,它的目标是帮你全部实现好所有音频功能相关的事情,让你可以专注于其他事情。
特点
MusicLibrary 具有下面特点:
轻松播放本地和网络音频
基于IPC实现音频服务,减少应用内存峰值,避免OOM。
集成和调用API非常简单,音频功能几乎可以集成到一个语句中。
提供丰富的API方法来轻松实现各种功能。
用一句话,您可以自定义通知栏和系统通知栏来自定义通知栏的控件。
集成MediaPlayer和ExoPlayer播放器,可自由切换
支持多种音频格式并支持音频直播流(DASH, SmoothStreaming, HLS,rtmp.)。
支持保存播放进度。
支持边播边存功能,没网也能播。
支持改变播放速度和改变播放音调。
项目状态
经过几个版本的迭代,MusicLibrary 已经基本稳定,并已经在多个项目中实践使用。
使用例子
为了更好地展示 MusicLibrary 的功能,所以写了一个简单的音乐播放器,在里面可以看到具体的使用方法, 具体请参考 NiceMusic
使用方式
1.导入library
allprojects { repositories { maven{url 'https://dl.bintray.com/lizixian/MusicLibrary'} }}
dependencies { implementation 'com.lzx:MusicLibrary:1.3.6'}
如果你的 appcompat-v7 包使用的是 27+,那么需要额外引用 support-media-compat 例如:
implementation 'com.android.support:support-media-compat:27.1.1'
添加 MusicLibrary 到你的 Application 中
public class NiceMusicApplication extends Application {
@Override public void onCreate() { if (!BaseUtil.getCurProcessName(this).contains(":musicLibrary")) { MusicLibrary musicLibrary = new MusicLibrary.Builder(this) .build(); musicLibrary.init(); } }}
初始化说明
因为音乐服务是运行在 musicLibrary 进程里面的,多进程的情况下,Application 会创建多次,所以需要加上以上判断,在非 musicLibrary 进程里面初始化。
当然,如果你的项目中包含两个以上的进程,则判断方式需要改改,改成在你的主进程下初始化即可。初始化的时候通过 Bulider 模式还有一些参数可以配置:
setAutoPlayNext(boolean autoPlayNext) 是否在播放完当前歌曲后自动播放下一首
setUseMediaPlayer(boolean isUseMediaPlayer) 是否使用 MediaPlayer
setNotificationCreater(NotificationCreater creater) 通知栏配置
setCacheConfig(cacheConfig) 边播边存配置
giveUpAudioFocusManager() 放弃音频焦点管理,放弃后,多个音频一起会混播
简单应用 (播放一首音乐):
SongInfo songInfo = new SongInfo();songInfo.setSongId("your song Id");songInfo.setSongUrl("your song url");
MusicManager.get().playMusicByInfo(songInfo);
最少要设置 songId 和 songUrl 才能播放。若要播放本地音频或者 assets 文件夹下的音频,或者 m3u8 等流式音频,用法一样,只要设置对 songUrl 和 songId 就行。
使用文档
Model字典
详细见 Model字典说明(https://github.com/lizixian18/MusicLibrary/blob/master/readme/model.md)
播放器API
详细见 API说明(https://github.com/lizixian18/MusicLibrary/blob/master/readme/api.md)
通知栏集成
详细见 通知栏集成(https://github.com/lizixian18/MusicLibrary/blob/master/readme/notification.md)
边播边存配置说明
详细见 配置边播边存功能(https://github.com/lizixian18/MusicLibrary/blob/master/readme/playcache.md)
代码实现以及原理
详细见 代码实现以及原理(https://github.com/lizixian18/MusicLibrary/blob/master/readme/principle.md)
PS:
如果你有想法或者意见和建议,欢迎提issue,喜欢点个star。欢迎各位大佬指点指点。
开源库
推荐几个开源库
MusicLibrary:一个丰富的音乐播放封装库相关推荐
- 一个丰富的音乐播放封装库,支持多种音频格式,完美解决你的问题。
StarrySky 项目地址:EspoirX/StarrySky 简介:
- Swift - 制作一个在线流媒体音乐播放器(使用StreamingKit库)
在之前的文章中,我介绍了如何使用 AVPlayer 制作一个简单的音乐播放器( 点击查看1. 点击查看2).虽然这个播放器也可以播放网络音频,但其实际上是将音频文件下载到本地后再播放的. 本文演示如 ...
- 完整打造一个多功能音乐播放器项目(初步设想跟酷狗类似)
本人目前准备利用闲暇时间打造一个完整的音乐播放器项目,主要用于学习及分享!原创不易,转载请注明出处. 这是一个什么样的音乐播放器呢?整体的架构跟酷狗差不多吧,我的方式呢,是一个个组件一个个模块先做好, ...
- Python:通过网络爬虫实现一个简易控制台音乐播放器
hello,大家好,我是wangzirui32,今天我们来学习如何通过网络爬虫实现一个简易控制台音乐播放器,开始学习吧! 1. 项目结构及库准备 app.py为项目入口程序,download.py为音 ...
- 用html制作一个音乐排行榜,使用原生JavaScript制作一个漂亮的音乐播放器
简单介绍 起初在简书上发现了这篇博客--[html.css.jq]制作一个简洁的音乐播放器.这是一个用jQuery库实现的音乐播放器,界面简约大气. 我在这个基础上,反其道而行,使用原生JavaScr ...
- javascript实现一个自制网页音乐播放器
序 接触简书也有一段日子了,这中间的时光还是比较轻松加愉快的,那种可以和他人分享知识的欣喜和愉悦的确是非常棒.我一向都是觉得专心写自己的文就可以了,不会总是纠结有多少人在看,有多少点击等等.用心写好自 ...
- Python制作一个多功能音乐播放器
文章目录 一.制作播放器的思路 二.制作播放器知识点和所需模块 三.播放器的代码展示 一.制作播放器的思路 制作一个多功能音乐播放器的思路 确定播放器的需求和功能,例如支持哪些音频格式.播放列表管理. ...
- 自制一个简单的音乐播放器
这两天刚学完了contentprovider和service组件,就综合下所学的,自制了一个简单的音乐播放器. 代码如下: 主activity代码 public class MainActivity ...
- HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)
用HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌) 效果如下:(鼠标点击按钮可以实现播放或暂停,按钮会旋转,实现了歌词同步,功能还需改进) 代码如下: <!DOCTYPE htm ...
最新文章
- AngularJS中的指令全面解析(必看)
- 10个经典而简单的jQuery特效设计在线演示
- java生成电子证书_关于Java:使用Bouncycastle生成数字证书
- Linux Crontab 任务管理工具命令以及示例
- android软件百分比怎么实现,android 百分比布局
- linux段错误吐核怎么办,CentOS命令
- 蓝桥杯2017年第八届C/C++省赛A组第一题-迷宫
- PS2 键盘 变 USB 键盘 设计图
- 在利用计算机高级语言进行,2016计算机一级考试多选题专项训练及答案
- 如何申请:悟空问答,达人,金V认证!
- Latex 表格单元格内换行
- 用Python制作可视化GUI界面,一键实现证件照背景颜色的替换
- 如果今天是生命里的最后一天你想做点啥?
- linux 造字程序下载,truetype造字程序
- FDM 3D打印机常见故障列总 挨个排除
- 未明学院:Tableau安装详细教程,带你攻克第一个学习难关!
- mysql 1067 abouting_GitHub - chenxiao07150808/MySQL
- 55.跳跃游戏(Jump Game)
- 强调实体融合的当下,元宇宙当仁不让地成为各色玩家关注的焦点
- C语言中求π(pi)的方法