android 音频文件 速率,Android 音频播放速率调整实现

packagecom.weex.app.media;importandroid.content.Context;importandroid.net.Uri;importcom.google.android.exoplayer2.ExoPlayer;importcom.google.android.exoplayer2.ExoPlayerFactory;importcom.google.android.exoplayer2.PlaybackParameters;importcom.google.android.exoplayer2.Player;importcom.google.android.exoplayer2.SimpleExoPlayer;importcom.google.android.exoplayer2.source.ExtractorMediaSource;importcom.google.android.exoplayer2.source.MediaSource;importcom.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;importcom.google.android.exoplayer2.trackselection.DefaultTrackSelector;importcom.google.android.exoplayer2.trackselection.TrackSelection;importcom.google.android.exoplayer2.trackselection.TrackSelector;importcom.google.android.exoplayer2.upstream.BandwidthMeter;importcom.google.android.exoplayer2.upstream.DataSource;importcom.google.android.exoplayer2.upstream.DefaultBandwidthMeter;importcom.google.android.exoplayer2.upstream.DefaultDataSourceFactory;importcom.google.android.exoplayer2.util.Util;importjava.io.File;public classAudioPlayerManager {private static final String TAG = "AudioPlayerManager";public static Float[] speedArray = new Float[]{1.0f, 1.25f, 1.75f, 0.5f, 0.75f};private staticAudioPlayerManager instance;privateContext context;privateSimpleExoPlayer mediaPlayer;privateDataSource.Factory dataSourceFactory;privateAudioPlayerManager(Context context) {this.context =context;

createPlayer();

}public staticAudioPlayerManager getInstance(Context context) {synchronized (AudioPlayerManager.class) {if (instance == null) {

instance= newAudioPlayerManager(context);

}

}returninstance;

}publicExoPlayer getMediaPlayer() {returnmediaPlayer;

}

//设置播放urlpublic voidsetAudioUrl(String audioUrl) {try{//这是一个代表将要被播放的媒体的MediaSource

MediaSource mediaSource = newExtractorMediaSource.Factory(dataSourceFactory)

.createMediaSource(Uri.parse(audioUrl));

mediaPlayer.prepare(mediaSource);

mediaPlayer.setPlayWhenReady(false);

}catch(Exception e) {

e.printStackTrace();

}

}

//设置播放filepublic voidsetAudioFile(File file) {try{//这是一个代表将要被播放的媒体的MediaSource

MediaSource mediaSource = newExtractorMediaSource.Factory(dataSourceFactory)

.createMediaSource(Uri.fromFile(file));

mediaPlayer.prepare(mediaSource);

mediaPlayer.setPlayWhenReady(false);

}catch(Exception e) {

e.printStackTrace();

}

}

//开始播放public voidstart() {

mediaPlayer.setPlayWhenReady(true);

}

//判断是否是播放状态public booleanisPlaying() {int playbackState =mediaPlayer.getPlaybackState();if (playbackState == SimpleExoPlayer.STATE_READY &&mediaPlayer.getPlayWhenReady()) {return true;

}return false;

}

//播放,带回调事件public voidplayWithCompletionListener(String url, Player.EventListener listener) {if (listener != null) {

mediaPlayer.addListener(listener);

}if (url.startsWith("http")) {

setAudioUrl(url);

}else{

setAudioFile(newFile(url));

}

mediaPlayer.setPlayWhenReady(true);

}

//播放or暂停public voidplayOrPause() {if(isPlaying()) {

mediaPlayer.setPlayWhenReady(false);

}else{

mediaPlayer.setPlayWhenReady(true);

}

}

//切换播放速率public void switchSpeed(intspeedIndex) {//API 23 (6.0)以上 ,通过设置Speed改变音乐的播放速率

if(isPlaying()) {//判断是否正在播放,未播放时,要在设置Speed后,暂停音乐播放

getMediaPlayer().setPlaybackParameters(newPlaybackParameters(speedArray[speedIndex]));

}else{

getMediaPlayer().setPlaybackParameters(newPlaybackParameters(speedArray[speedIndex]));

getMediaPlayer().setPlayWhenReady(false);

}

}

//停止播放public void stop(booleanreset) {if (mediaPlayer != null) {

mediaPlayer.stop(reset);

}

}

//释放资源public voidrelease() {if (mediaPlayer != null) {

mediaPlayer.release();

}

}//创建一个新的player

private voidcreatePlayer() {//创建带宽

BandwidthMeter bandwidthMeter = newDefaultBandwidthMeter();//创建轨道选择工厂

TrackSelection.Factory videoTrackSelectionFactory = newAdaptiveTrackSelection.Factory(bandwidthMeter);//创建轨道选择器实例

TrackSelector trackSelector = newDefaultTrackSelector(videoTrackSelectionFactory);//step2.创建播放器

mediaPlayer =ExoPlayerFactory.newSimpleInstance(context, trackSelector);//创建一个DataSource对象,通过它来下载多媒体数据

dataSourceFactory = newDefaultDataSourceFactory(context,

Util.getUserAgent(context,"loader"));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值