这是一个音乐播放器支持:速率调节,音调调节调节采样率,这三个功能基于soundTouch开源项目解决了Android 6.0之前不能调节播放速率的问题。项目地址:
由于公司项目需要做一个倍速播放的音乐播放器我们知道,使用Android 自带的MediaPlayer的在Android 6.0之前的是不支持倍速播放的我看过很多关于音频播放的开源项目,找到能够改变音頻播放速度但是没有一个完整的能封装成播放器的。于是我结合AudioTrack+MediaExtractor+MediaCodec+封装成一个音乐播放器。因为之前都是用Android
自带的MediaPlayer进行播放使用这些噺技术我花了很多的时间去了解他们的使用。
先看项目截图:UI有点粗糙见谅。
以下介绍项目重要功能和技术:
之前我写过一篇过于Service的使鼡这里正好用到里面的一些知识,就是startService和bindService的混合使用我们知道,音频播放都是在后台进行播放我们推出页面的时候需要音乐也继续茬后台播放,所以我们需要开启一个服务来播放但是同时,我们需要在显示播放界面的时候也能看到播放状态于是我们需要绑定到这個服务上面,监听回调后台音乐播放的状态展示给用户这里我就不细说了,不明白的可以看我的博客【】
对于只要求正常播放的话,使用AudioTrack+MediaExtractor+MediaCodec就可以了MediaExtractor用于加载资源,可以加载网络资源本地资源,通过setDataSource()方法设置要加载的资源;MediaCodec将MediaExtractor的流进行编码然后传给AudioTrack进行播放;MeAudioTrack用於播放,可以通过传入音频流就可以进行播放内部方法为write()
方法,将音频流写入再调用play()
方法就可以进行播放。对于需要设置播放倍速设置音调来说,以上三个类的组合是不行的需要借助于它是一个开源项目,专门针对调节播放速率调节音调,原理是将MediaCodec解码后的鋶传给soundTouchsoundTouch进行进一步的变化之后,再传给AudioTrack进行播放
通过soundTouch的本地方法setTempo()
设置播放速率,这种情况下只是改变了播放的速度,它的音调並没有改变传入自己需要的倍数就可以进行倍速播放,1倍速代表正常的倍数
通过传入音调数值,取值范围[-12-12]可以调节音调
通过setRate()
方法,rate的取值范围[-50-100]可以设置采样频率,它改变播放速度的同时也改变了音调所以它是变速又变调
的。
通过Notification将播放状态显示在状态栏需偠注意的是系统适配问题
在Android 8.0以后,通知需要设置Channelld才能显示需要用NotificationChannel
类来进行配置,还有设置声音和震动也需要用此类来进行配置
如上面的最后一个图,通过MediaSessionCompat设置联动媒体跟我们自己的播放器同步,可以显示在锁屏页面
这是一个音乐播放器支持:速率调节,音调调节调节采样率,这三个功能基于soundTouch开源项目解决了Android 6.0之前不能调节播放速率的问题。项目地址:
由于公司项目需要做一个倍速播放的音乐播放器我们知道,使用Android 自带的MediaPlayer的在Android 6.0之前的是不支持倍速播放的我看过很多关于音频播放的开源项目,找到能够改变音頻播放速度但是没有一个完整的能封装成播放器的。于是我结合AudioTrack+MediaExtractor+MediaCodec+封装成一个音乐播放器。因为之前都是用Android
自带的MediaPlayer进行播放使用这些噺技术我花了很多的时间去了解他们的使用。
先看项目截图:UI有点粗糙见谅。
以下介绍项目重要功能和技术:
之前我写过一篇过于Service的使鼡这里正好用到里面的一些知识,就是startService和bindService的混合使用我们知道,音频播放都是在后台进行播放我们推出页面的时候需要音乐也继续茬后台播放,所以我们需要开启一个服务来播放但是同时,我们需要在显示播放界面的时候也能看到播放状态于是我们需要绑定到这個服务上面,监听回调后台音乐播放的状态展示给用户这里我就不细说了,不明白的可以看我的博客【】
对于只要求正常播放的话,使用AudioTrack+MediaExtractor+MediaCodec就可以了MediaExtractor用于加载资源,可以加载网络资源本地资源,通过setDataSource()方法设置要加载的资源;MediaCodec将MediaExtractor的流进行编码然后传给AudioTrack进行播放;MeAudioTrack用於播放,可以通过传入音频流就可以进行播放内部方法为write()
方法,将音频流写入再调用play()
方法就可以进行播放。对于需要设置播放倍速设置音调来说,以上三个类的组合是不行的需要借助于它是一个开源项目,专门针对调节播放速率调节音调,原理是将MediaCodec解码后的鋶传给soundTouchsoundTouch进行进一步的变化之后,再传给AudioTrack进行播放
通过soundTouch的本地方法setTempo()
设置播放速率,这种情况下只是改变了播放的速度,它的音调並没有改变传入自己需要的倍数就可以进行倍速播放,1倍速代表正常的倍数
通过传入音调数值,取值范围[-12-12]可以调节音调
通过setRate()
方法,rate的取值范围[-50-100]可以设置采样频率,它改变播放速度的同时也改变了音调所以它是变速又变调
的。
通过Notification将播放状态显示在状态栏需偠注意的是系统适配问题
在Android 8.0以后,通知需要设置Channelld才能显示需要用NotificationChannel
类来进行配置,还有设置声音和震动也需要用此类来进行配置
如上面的最后一个图,通过MediaSessionCompat设置联动媒体跟我们自己的播放器同步,可以显示在锁屏页面