android获取和展示音乐的频谱
来源:互联网 发布:linux禁止外传文件 编辑:程序博客网 时间:2024/05/16 17:30
做了个音乐播放器 就一直想做个加一个音乐频谱的展示界面
觉的这是一个好玩的东西,可以将耳边动听的声音形象化,仿佛眼前可以看到声音一样。
但是我在文档的开发者指南里没有讲任何有关音乐频谱的东西,最后还是在google的源码示例中找到了。
你可以直接去参看源代码更原滋原味
所有以下所讲的功能,均需要在2.3以上的sdk中才能实现。
音频频谱的获取
首先音频的频谱相关的类叫做 android.media.audiofx.Visualizer;
需要权限
所以要做的第一件事 是初始化一个visualizer出来
以上波形的数据采集就完成了,需要注意的一个点是mVisualizer.setEnabled(true);
这个方法的主要作用是为了控制何时去采集频谱数据,你应该只是愿意采集你所关心的音乐数据,而不关心声音输出器中任何的声音。而且对mVisualizer的许多设置必须在setEnable之前完成。并且结束功能后,要记得setEnable(false)
如果你见到了以下这个错误,那基本上就是因为没有及时setEnable(false),导致setCaptureSize()这个方法出错。
音频频谱的展示
你在上一节已经通过监听器获得了波形数据,那么如何展示?这仅仅是一个自定义view的问题,简单废话一下:重点提一下view中的onDraw()方法
@Override
//mBytes就是采集来的数据 这里是个大小为1024的数组,里面的数据都是byts类型,所以大小为-127到128
//mPoints主要用来存储要画直线的4个坐标(每个点两个坐标,所以一条直线需要两个点,也就是4个坐标)
//xOrdinate是x轴的总刻度,因为一次会传输过来1024个数据,每两个数据要画成一条直线,所以x轴我们分成1023段。你要是觉的太多了,也可以像我一样除以2,看自己需求了。
//以下的for循环将利用mBytes[i] mBytes[i+1] 这两个数据去生成4个坐标值,从而在刻画成两个坐标,来画线条
//第i个点的在总纵轴上的坐标。他在画线上以总纵轴的1/2为基准线(mRect.height() / 2),所有的点或正或负以此线为基础标记。
//((byte) (mBytes[i] + 128))这个一直没有理解,如果+128是为了将数据全部换算为正整数,那么强转为byte后不又变回-127到128了么??要是谁知道原因可以留言告诉我.....
//(mRect.height() / 2) / 128就是将二分之一的总长度换算成128个刻度,因为我们的数据是byte类型,所以刻画成128个刻度正好
//以下就是刻画第i+1个数据了,原理和刻画第i个一样
//循环结束后,就得到了这一次波形的所有刻画坐标,直接画在画布上就好了
文章转自:http://blog.sina.com.cn/s/blog_67d95f40010113ec.html
- android获取和展示音乐的频谱
- android获取和展示音乐的频谱
- android获取和展示音乐的频谱
- android获取和展示音乐的频谱
- Android 音乐频谱实现
- android 音乐频谱
- android 音乐频谱
- Android 音乐频谱实现
- Android 音乐频谱实现
- android音乐频谱解析
- Android 音乐频谱实现
- android音乐频谱解析
- android音乐柱状频谱实现
- android音乐柱状频谱实现
- android音乐柱状频谱实现
- android音乐柱状频谱实现
- Android 音乐柱状频谱控件
- Android开发简单易用的音乐频谱效果
- Cocos2d-x 程序是如何开始运行与结束的
- linux:dropwatch 网络协议栈丢包检查利器
- 发布后,分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
- 腾讯大佬:微信支付不是机关枪
- 超管CA企业版
- android获取和展示音乐的频谱
- UVA1203Argus(优先队列)
- 数据结构算法
- Android中的Selector的用法
- 发布时报错: 找不到 obj\Debug\Package\PackageTmp\xxx.aspx 文件,无法将XX复制到XX
- QT中文显示问题
- mysql配置文件读取顺序
- rvtptcontrol failed rvtth-&ERP_NUMBER
- 命令行执行导入dmp(oracle)