基于FFmpeg + OpenSL ES的音频播放SDK。可循环不间断播放短音频;播放raw和assets音频文件;可独立设置音量大小;可实时现在音量分贝大小(用于绘制波形图);可改变音频播放速度和音调(变速不变调、变调不变速、变速又变调);可设置播放声道(左声道、右声道和立体声);可边播边录留住美好音乐;可裁剪指定时间段的音频,制作自己的彩铃;还可以从中获取音频原始PCM数据(可指定采样率),方便二次开发等。
百度网盘链接: https://pan.baidu.com/s/1mvIflaxujEoufLrnyNNxRQ 提取码: mkki
implementation 'ywl.ywl5320:libmusic:1.2.6'
<dependency>
<groupId>ywl.ywl5320</groupId>
<artifactId>libmusic</artifactId>
<version>1.2.6</version>
<type>pom</type>
</dependency>
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" />
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已经完成,然后才回调时间,避免自己控制时间逻辑和时间显示不稳定问题。
}
});
wlMusic.setPlayCircle(true);
url = RawAssetsUtil.getAssetsFilePath(this, "goready.wav");
url = RawAssetsUtil.getRawFilePath(this, R.raw.readygo, "readygo.wav");
wlMusic.setSource(url);
wlMusic.setPlaySpeed(1.5f);
wlMusic.setPlayPitch(1.5f);
wlMusic.setMute(MuteEnum.MUTE_LEFT);
wlMusic.startRecordPlaying(Environment.getExternalStorageDirectory().getAbsolutePath() + "/ywl5320/record", "myrecord");//生成的录音文件为:myrecord.aac
wlMusic.pauseRecordPlaying();
wlMusic.resumeRecordPlaying();
wlMusic.stopRecordPlaying();
看CutAudioActivity中演示代码
wlMusic.setConvertSampleRate(SampleRateEnum.RATE_44100);
......
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采样率