关于安卓visualizer的用法
看别人显示播放wav文件显示频谱写的代码都是断断续续的,在这里我贴了完整的代码,给有需要的人做参考,显示频谱还没有完成,不知道怎么弄,已经可以得到byte[] fft数据了,参考别人的写法也可以开方取模了,但是就是耗在了byte[]转doule[]上了,因为我用achartEngine画图的,所以现在还没有解决办法,有谁知道的,请在给我留言,谢谢。下面上代码,布局文件就不贴了,很简单的就是两个按钮
package com.example.visualizer; import android.app.Activity;
import android.media.MediaPlayer;
import android.media.audiofx.Visualizer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button; public class MainActivity extends Activity {
private MediaPlayer mediaPlayer;
private Visualizer visualizer;
Button playButton, stopButton;
Uri pathUri; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
playButton = (Button) findViewById(R.id.button1);
stopButton = (Button) findViewById(R.id.button2);
playButton.setOnClickListener(listener);
stopButton.setOnClickListener(listener);
pathUri = Uri.parse(Environment.getExternalStorageDirectory().getPath()
+ "/heartBit.wav");
System.out.println(pathUri);
mediaPlayer = MediaPlayer.create(this, pathUri);
visualizer = new Visualizer(mediaPlayer.getAudioSessionId());
visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
System.out.println(Visualizer.getCaptureSizeRange()[1]);
visualizer.setDataCaptureListener(
new Visualizer.OnDataCaptureListener() { @Override
public void onWaveFormDataCapture(Visualizer arg0,
byte[] arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onFftDataCapture(Visualizer arg0, byte[] fft,
int arg2) {//返回的经过FFT处理后的数据
// TODO Auto-generated method stub
try {
System.out.println(DataFix.getHexString(fft));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, Visualizer.getMaxCaptureRate() / 2, false, true);
visualizer.setEnabled(true);//这步不能忘记
mediaPlayer
.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//监听器 @Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
visualizer.setEnabled(false);
}
});
} View.OnClickListener listener = new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.button1:
mediaPlayer.start(); break;
case R.id.button2:
mediaPlayer.pause(); break;
default:
break;
}
}
}; @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
开方取模的处理方法,参考别人的代码:
byte[] model = new byte[fft.length / 2 + 1]; model[0] = (byte) Math.abs(fft[0]);
for (int i = 2, j = 1; j < mSpectrumNum;) {
model[j] = (byte) Math.hypot(fft[i], fft[i + 1]);
i += 2;
j++;
}
到这里返回的还是byte[]数组,话说java下的转型相当麻烦,还不知道怎么解决!
关于安卓visualizer的用法的更多相关文章
- 安卓TV开发(八) 移动智能终端多媒体爬虫技术 获取加载网页视频源
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...
- 【转】Appium_API(翻译+用法说明)
转自:https://testerhome.com/topics/3711 1.contextscontexts(self): Returns the contexts within the curr ...
- Appium python API 总结
Appium python api 根据testerhome的文章,再补充一些文章里面没有提及的API [TOC] [1]find element driver 的方法 注意:这几个方法只能通过sel ...
- Appium_Python_Api文档
1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...
- Appium之python API
webdriver contexts(self) 说明:返回多个会话内容 使用:driver.contexts current_context(self) 说明:返回单个会话的内容 使用:driver ...
- Android开发学习笔记--计时器的应用实例
为了了解安卓计时器的用法,写了一个秒表的应用,正是这个秒表,让我对Android应用的速度大跌眼镜,我设置了一个计时器,10ms更新一次显示的时间,然后更标准的时间一比较发现,跑10s就有一秒的时间误 ...
- 【转】appium_python_API文档
1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...
- appium python api收集
1.contexts contexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的 ...
- Appium Python API 中文版
Appium_Python_Api文档 1.contextscontexts(self): Returns the contexts within the current session. 返回当前会 ...
随机推荐
- Bluetooth Functions
The functions in this section are used for managing Bluetooth devices and services. Bluetooth is als ...
- python fabric的安装与使用
背景:fabric主要执行远程的shell命令,包括文件的上传.下载,以及提示用户输入等辅助其它功能. 测试系统:ubuntu16 要求:python //系统有自带,ubuntu16 通常自带pyt ...
- AngularJs(Part 7)--Build-in Directives
Directives In AngularJS, we can use a variety of naming conventions to reference directives . In the ...
- p4180 次小生成树
传送门 分析: 次小生成树的求法有两种,最大众的一种是通过倍增LCA找环中最大边求解,而这里我介绍一种神奇的O(nlogn) 做法: 我们先建立最小生成树,因为我们用kruskal求解是边的大小已经按 ...
- 通过命令查看jboss的错误日志文件
链接jboss: ssh ip -l jboss
- ps -ef | grep java 输出的具体含义是什么?
uid pid ppid # PID 这个程序的 ID 下面的 PPID 则是父程序的 ID: PS是LINUX下最常用的也是非常强大的进程查看命令 常见的使用方法是检查一个进 ...
- Win7常用但是被忽略的快捷键
General keyboard shortcuts 1.Ctrl + Right Arrow Move the cursor to the beginning of the next word 向 ...
- HTML代码中<%%>、<%=%>、<%:%>各是什么意思
运行.获取后台代码或值.<%%>之间可以写服务器端代码,比如<%for(var i=0;i<10;i++){//执行循环体}%> 又如<%for(var i=0;i ...
- Codeforces Round #527 (Div. 3)D2(栈,思维)
#include<bits/stdc++.h>using namespace std;int a[200007];stack<int>s;int main(){ int ...
- cogs 915. 隐藏口令
915. 隐藏口令 ★★☆ 输入文件:hidden.in 输出文件:hidden.out 简单对比时间限制:1 s 内存限制:128 MB USACO/hidden(译 by Feli ...