• Stars
    star
    589
  • Rank 75,909 (Top 2 %)
  • Language
    Java
  • Created over 6 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

基于FFmpeg + OpenSL ES的音频播放SDK。可循环不间断播放短音频;播放raw和assets音频文件;可独立设置音量大小;可实时现在音量分贝大小(用于绘制波形图);可改变音频播放速度和音调(变速不变调、变调不变速、变速又变调);可设置播放声道(左声道、右声道和立体声);可边播边录留住美好音乐;可裁剪指定时间段的音频,制作自己的彩铃;还可以从中获取音频原始PCM数据(可指定采样率),方便二次开发等。

wlmusic v1.2.6(讨论群:806397913)

基于FFmpeg + OpenSL ES的音频播放SDK。可循环不间断播放短音频;播放raw和assets音频文件;可独立设置音量大小;可实时现在音量分贝大小(用于绘制波形图);可改变音频播放速度和音调(变速不变调、变调不变速、变速又变调);可设置播放声道(左声道、右声道和立体声);可边播边录留住美好音乐;可裁剪指定时间段的音频,制作自己的彩铃;还可以从中获取音频原始PCM数据(可指定采样率),方便二次开发等。

我的视频课程(基础):《(NDK)FFmpeg打造Android万能音频播放器》

我的视频课程(进阶):《(NDK)FFmpeg打造Android视频播放器》

我的视频课程(编码直播推流):《Android视频编码和直播推流》

我的视频课程(C++ OpenGL):《Android C++ OpenGL》

百度网盘链接: https://pan.baidu.com/s/1mvIflaxujEoufLrnyNNxRQ 提取码: mkki

****** 体验视频(包含单独播放音频,已优化了变速变调效果)播放库 ******

请移步:https://github.com/wanliyang1990/wlmedia

8小时持续播放内存使用情况

image

CPU和内存使用情况:测试设备:红米2A手机

image image

Update v1.2.6 修复连续快速切换URL崩溃问题

Usage:(如果您的APP使用了本库,可以告诉我下哦^_^)

Gradle: Download

implementation 'ywl.ywl5320:libmusic:1.2.6'

Maven:

<dependency>
  <groupId>ywl.ywl5320</groupId>
  <artifactId>libmusic</artifactId>
  <version>1.2.6</version>
  <type>pom</type>
</dependency>

配置NDK编译平台:

defaultConfig {
	...
	ndk {
	    abiFilter("armeabi-v7a")
	    abiFilter("x86")
	}

    }

需要权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

接入代码:

1、播放一般音乐

WlMusic wlMusic = WlMusic.getInstance();
wlMusic.setSource("http://mpge.5nd.com/2015/2015-11-26/69708/1.mp3"); //设置音频源
wlMusic.setCallBackPcmData(true);//是否返回音频PCM数据
wlMusic.setShowPCMDB(true);//是否返回音频分贝大小
wlMusic.setPlayCircle(true); //设置不间断循环播放音频
wlMusic.setVolume(65); //设置音量 65%
wlMusic.setPlaySpeed(1.0f); //设置播放速度 (1.0正常) 范围:0.25---4.0f
wlMusic.setPlayPitch(1.0f); //设置播放速度 (1.0正常) 范围:0.25---4.0f
wlMusic.setMute(MuteEnum.MUTE_CENTER); //设置立体声(左声道、右声道和立体声)
wlMusic.setConvertSampleRate(SampleRateEnum.RATE_44100);//设定恒定采样率(null为取消)
wlMusic.parpared();准备开始

wlMusic.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared() {
	wlMusic.start(); //准备完成开始播放
    }
});

//seek时间
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        position = wlMusic.getDuration() * progress / 100;
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        wlMusic.seek(position, false, false);// 表示在seeking中,此时不回调时间
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        wlMusic.seek(position, true, true);//表示seek已经完成,然后才回调时间,避免自己控制时间逻辑和时间显示不稳定问题。
    }
});

2、循环不停顿播放短音频(音频不限时长)

wlMusic.setPlayCircle(true);

3、播放raw文件和assets文件

url = RawAssetsUtil.getAssetsFilePath(this, "goready.wav");
url = RawAssetsUtil.getRawFilePath(this, R.raw.readygo, "readygo.wav");
wlMusic.setSource(url);

4、设置速度1.5倍 (0.25~4.0f)

wlMusic.setPlaySpeed(1.5f);

5、设置音调1.5倍 (0.25~4.0f)

wlMusic.setPlayPitch(1.5f);

6、设置左声道

wlMusic.setMute(MuteEnum.MUTE_LEFT);

7、开始录制

wlMusic.startRecordPlaying(Environment.getExternalStorageDirectory().getAbsolutePath() + "/ywl5320/record", "myrecord");//生成的录音文件为:myrecord.aac

8、暂停录制

wlMusic.pauseRecordPlaying();

9、恢复录制

wlMusic.resumeRecordPlaying();

10、停止录制

wlMusic.stopRecordPlaying();

11、裁剪音频(对应可获取总长度的音频)

看CutAudioActivity中演示代码

12、设置输出采样率

wlMusic.setConvertSampleRate(SampleRateEnum.RATE_44100);

一、效果图(对应设置启动页:MainActivity(实例演示) 或者 SplashActivity(广播列表播放实例)或者 CutAudioActivity(音频裁剪演示))

image
image
image
image

二、功能特色:

1、播放本地音频或网络音频流媒体

2、播放状态(准备、开始、暂停、停止、切换)

3、FFmpeg解码,兼容几乎所有类型的音频文件

4、采用OpenSL ES直接底层播放

5、动态权限申请

6、迷你播放控制栏

7、Activity动画

8、Activity、Dialog沉浸状态栏

9、网络接口返回数据再封装

10、循环不间断播放短音频 ---> add v1.0.1

11、可设置音量大小 ---> add v1.0.2

12、播放raw和assets ---> add v1.0.2

13、声音分贝大小回调用于绘制波形图 ---> add v1.0.3

14、添加isPlaying()方法 ---> add v1.0.4

15、添加改变播放速率方法 ---> add v1.0.5

16、添加设置声道方法 ---> add v1.0.5

17、添加设置音频音调方法 ---> add v1.0.6

18、更新设置播放速度方法 ---> add v1.0.6

19、优化CPU使用率和内存使用率 ---> add v1.0.8

20、优化seek时平稳过度 ---> add v1.0.9

21、添加边播边录功能 ---> add v1.1.0

22、增加音频裁剪预览播放功能 --> add v1.1.1

23、增加指定时间段音频裁剪功能 --> add v1.1.1

24、增加原始音频数据(PCM)暴露接口 --> add v1.1.2

25、增加裁剪播放时回调PCM数据 --> add v1.1.3

26、增加 armeabi-v7a 库,并进行了none优化 -->add v1.1.4

27、修复.wav文件不能播放问题、增加快速切换变声变调功能的稳定性 -->add v1.1.5

28、重构音频裁剪和PCM数据回调逻辑, 使调用更简单 -->add v1.2.0

29、添加对https流媒体的支持 -->v1.2.2

30、添加恒定采样率设置 -->v1.2.4

31、修复打开URL失败崩溃问题 -->v1.2.5

32、修复连续快速切换URL崩溃问题 -->v1.2.6

......

三、API(v1.2.6)

public void setSource(String source) //设置音频源

public void parpared() //准备播放

public void setOnPreparedListener(OnPreparedListener onPreparedListener) //准备成功回调

public void start() //开始播放

public void pause() //暂停播放

public void resume() //恢复播放(对应于暂停)

public void stop() //停止播放,回收资源

public boolean isPlaying(); //是否正在播放中

public void setPlayCircle(boolean playCircle)//设置是否循环播放短音频

public void setPlayNext(boolean playNext) //设置播放下一个状态(true:调用stop后会重新播放音频源)

public void playNext(String source) //切换播放源

public void seek(final int secds, boolean seekingfinished, boolean showTime) //secds:时间(秒) seekingfinished:true表示在滑动中 false表示滑动停止并执行seek功能 showTime:是否回调时间

public void setVolume(int percent) //设置音量(0~100)

public int getDuration() //获取时长

public void setPlaySpeed(int speed) //设置播放速度(默认正常速度 1.0 范围:0.25x ~ 4.0x)

public void setPlayPitch(float pitch) //设置音频音调(默认正常音调 1.0 范围:0.25x ~ 4.0x)

public void setMute(MuteEnum mute) //设置播放声道 (MuteEnum.MUTE_LEFT,MuteEnum.MUTE_RIGHT,MuteEnum.MUTE_CENTER)

public void startRecordPlaying(String recordSavePath, String recordSaveName) // 边播边录 (recordSavePath:存储目录;recordSaveName:录制文件名称)

public void stopRecordPlaying() // 停止录制

public void pauseRecordPlaying() //暂停录制

public void resumeRecordPlaying() //恢复录制

public void setOnErrorListener(OnErrorListener onErrorListener) //出错回调

public void setOnLoadListener(OnLoadListener onLoadListener) //加载回调

public void setOnInfoListener(OnInfoListener onInfoListener) //进度信息回调

public void setOnCompleteListener(OnCompleteListener onCompleteListener) //播放完成回调

public void setOnPauseResumeListener(OnPauseResumeListener onPauseResumeListener) //暂停、恢复回调

public void setOnVolumeDBListener(OnVolumeDBListener onVolumeDBListener) //声音分贝大小回调

public void setCallBackPcmData(boolean callBackPcmData) //全局设置是否把播放的PCM原始数据回调到应用层

public void setShowPCMDB(boolean showPCMDB) //设置是否回调音频分贝数

public void cutAudio(int start_secs, int end_secs, String savepath, String filename) //开始裁剪 (参数:开始、结束时间(秒)、裁剪音频保存目录、裁剪音频保存名称)

public void cutAudio(int start_secs, int end_secs) //裁剪音频 快速回调PCM数据到应用层(setCallBackPcmData为true时才有效)

public void playCutAudio(int start_secs, int end_secs) //裁剪时预览播放

public void setConvertSampleRate(SampleRateEnum sampleRateEnum) //设置输出PCM采样率

四、环境

1、Android Studio 3.2.1

2、Android 4.1+

3、《中国网络广播》api数据

create By ywl5320

More Repositories

1

wlmedia

Android 音视频播放器SDK,几句代码即可实现音视频播放功能(支持:手机、车机系统、电视盒子等设备。支持:http、https、rtsp、rtp、rtmp、byte[]、加密视频和各种文件格式视频;包含视频截图、音轨选择、字幕选择、循环播放、设置软解或硬解、透明视频、变速变调、声道切换、无缝切换surface(surfaceview和textureview)、多Surface渲染、视频比例设置、多实例音视频播放等。)~
Java
743
star
2

wlplayer

NDK+FFmpeg+OpenSL+OpenGL+Mediacodec 的视频播放SDK源码和实例APP,很适合学习ffmpeg解码流程和Android中NDK实战开发
C
499
star
3

AppServiceRestFul

Spring MVC RESTFUL接口实例和android测试客户端,包含注册、登录、支付宝支付、微信支付、增量更新等。
Java
182
star
4

NavigationBar

标题导航栏,两三句代码即可实现
Java
130
star
5

PayPwdEditText

支付密码框,和微信支付宝类似
Java
109
star
6

FFmpeg-Android

FFmpeg(3.3.2)移植Android平台-例子
C
72
star
7

AdViewPager

ViewPager左右无限轮播实现,可用作Banner导航或广告
Java
56
star
8

Android_OpenSl_Audio

Android利用OpenSL ES通过assets、Uri和pcm文件的方式来播放音频。
C++
53
star
9

Android-JniThread

Android-Jni线程操作,包括:一般线程的创建、互斥锁、全局Listener调用java方法达到回调效果。
C++
44
star
10

SoundTouch_OpenSL_Android

Android中用OpenSL ES来播放SoundTouch转换后的PCM数据
C++
31
star
11

RxjavaRetrofit

Rxjava + Retrofit网络访问
Java
29
star
12

BsDiffYwl5320

增量更新-服务端(windows、Linux)、客户端(android)源码和动态库和jar包
C
29
star
13

CSDNDemos

CSDN博客demo
Java
28
star
14

AndroidPickPhotoDialog

Java
23
star
15

rxbusDemo

Android中的RxBus,可设置tag和制定运行的线程,消息传递,简单实用
Java
19
star
16

AndroidCircleMenu

Android圆形旋转菜单
Java
18
star
17

BottomNavTabs

Android底部功能导航和圆点提示封装
Java
13
star
18

Android-OpenGL-ES

介绍Android中OpenGL ES(v2.0)的使用方法和实例
Java
13
star
19

SDL2ForAndroid

Android平台编译SDL2
C
11
star
20

OpenSL-ES-Record

Android利用OpenSL ES录制PCM音频数据,并保存到本地。
C++
11
star
21

RecyclerViewHeaderAndFooter

RecyclerView添加头部和尾部,并添加上拉加载更多回调方法。
Java
10
star
22

FFmpeg-SDL2PlayerSDK

C
10
star
23

JniThread_mult

Android C++多线程按顺序退出并释放资源
C++
9
star
24

SDLforAndroidAS

SDL用Cmake编译到Android平台
C
8
star
25

AndroidMultiChannelPackaging-MFC

2
star