本文纯属蛋疼,实现一个可以拖动,选择需要播放的时间段,然后播放效果是只播放这一段选中的音乐。

  • 需求:自定义一个Android播放器
    • 可以随意选择需要播放音乐片段
    • 返回选中播放部分的音乐数据
  • 分析:
    • MediaPlayer 肯定是实现不了了,使用AudioTrack
    • 需要可以选择播放的音乐片段,需要界面的支持,至少需要一个可以双向选择的SeekBar,感谢前辈的支持
    • 需要返回选中部分的音乐数据,返回的数据是byte[],可以选择之间返回一堆byte数组,可以写入缓存文件,然后返回缓存文件,接收方再从文件里读取;推荐第二种方式,更灵活一点,还可以自定义文件头,方便传递诸如SampleRate,ChannelCount等等参数,直接传一堆数组,如果选择播放区域很大,很吃内存。
  • 实现:
    • 感谢感谢,双向选择的SeekBar的问题顺利解决,当然也可以自己实现,但这个不是现在的主要矛盾
    • 使用AudioTrack 播放音乐, AudioTrack需要自己循环写入数据,这种耗时操作最好在线程里操作。
    • 想要实现那种边边播放边解码,解码音乐需要开一个线程,播放时新开一个线程,但是这里有个问题,如果已经全部解码完,就没有问题了,用户可调整的SeekBar,min:0,max:解码出来的数据长度,然后用户拖到那里,就获取那部分数据播放,但是没有解码完成,max位置时一一直在变化的,此时用户如果拖动,就有问题了,开始解码音乐时,可以获取到音乐的总时长,如何把时长加进来,用户可见的时调整播放时间,处理时通过这个时间来找到对应的数据
    • 如何解决上面的问题,同时不能太占用内存,依旧使用RandomAccessFile存储获取到的文件,对文件进行一个处理,新增一个文件或者列表,标示某一秒内,对呀哪些音乐数据。
    • 最后实现的效果,基本可以做到拖动播放起点,播放该时间点的音乐
  • 附上 1.0源码 如果想直接下载源码成功运行,需要在手机根目录下放一个“test.mp3“的音乐文件
  • 测试界面很简洁,原谅我放荡不羁爱自由

更多相关文章

  1. Android蓝牙播放如何显示歌曲信息?
  2. Android如何判断当前手机是否正在播放音乐,并获取到正在播放的音
  3. Android简易音乐播放器之界面实现(第一篇)
  4. Android实现选择音乐,读取音乐信息及播放功能
  5. 浅谈Android中的基础动画(图文详解)
  6. Android创意——多功能智能播放器
  7. android文件选择、读取、浏览器的实现(音乐文件)
  8. android开发之Vitamio使用之如何直播RTMP流、m3u8流(HLS)、RTSP流
  9. Android(安卓)开发自己的网络收音机1——功能要求及设计方案

随机推荐

  1. Android(安卓)指纹识别
  2. Android监测手指上下左右滑动屏幕
  3. Android游戏引擎Rokon宣布停止更新
  4. Android之AlertDialog的基础使用
  5. 如何检查后台服务(Android的Service类)是否
  6. android thread handler timertask
  7. Android中如何获得一些系统设置和环境变
  8. Android强制使用WebView不调用系统或外部
  9. androidPN体系结构
  10. Android开发指南(36) —— Search