Java android可视化工具getWaveForm(字节[]波形)始终返回-128

Java android可视化工具getWaveForm(字节[]波形)始终返回-128,java,android,visualizer,Java,Android,Visualizer,我正试图在我的android设备上捕捉播放的音乐的一小部分 (收音机,youtube…) 我尝试使用可视化工具getWaveForm(byte[]waveform)方法: 导入android.media.MediaPlayer; 导入android.media.audiofx.Visualizer; 导入android.os.Build; 导入android.os.SystemClock; 导入android.util.Log; 导入java.lang.reflect.Method; 导入jav

我正试图在我的android设备上捕捉播放的音乐的一小部分 (收音机,youtube…)

我尝试使用可视化工具
getWaveForm
byte[]waveform
)方法:

导入android.media.MediaPlayer;
导入android.media.audiofx.Visualizer;
导入android.os.Build;
导入android.os.SystemClock;
导入android.util.Log;
导入java.lang.reflect.Method;
导入java.util.array;
导入java.util.LinkedList;
导入java.util.Queue;
导入java.util.Random;
公共类音频{
私有最终字符串TAG=“test11”;
专用字节[]mRawData;
私有int[]格式数据;
私有int-mType;
专用可视化工具mVisualizer;
私有方法mSnoop;
私有布尔值mUseSnoop=false;
私人长期沉默期;
private Random randomGen=新随机数();
私有int[]计算数据;
private Queue Queue=new LinkedList();
私有int[]pcmData;
私有整数大小;
公共静态最终整数PCM_TYPE=0;
公共静态最终整数FFT_类型=1;
公共音频(整数类型、整数大小、整数音频会话){
Log.i(“test11”、“GrabAudio:(“+type+”、“+size+”、“+audioSession”);
这个。大小=大小;
if(Build.VERSION.SDK_INT<9)
mUseSnoop=true;
SummeePeriod=SystemClock.uptimeMillis();
pcmData=新整数[大小];
对于(int i=0;i范围[1]){
大小=范围[1];
}
mRawData=新字节[大小];
如果(类型==FFT\U类型)
尺寸/=2;
mVisualizer=null;
试一试{
mVisualizer=新的可视化工具(audioSession);
if(mVisualizer!=null){
if(mVisualizer.getEnabled()){
mVisualizer.setEnabled(false);
}
mVisualizer.setCaptureSize(mRawData.length);
}
}捕获(不支持操作异常e){
Log.v(标签“UnsupportedOperationException”);
}捕获(非法状态){
Log.v(标签“非法状态例外”);
}捕获(运行时异常e){
Log.v(标记“RuntimeException”);
}
}
Log.i(“test11”,“GrabAudio:arr len:+this.mRawData.length”);
}
公开作废开始(){
Log.i(“test11”,“start”);
如果(!mUseSnoop){
if(mVisualizer!=null){
试一试{
如果(!mVisualizer.getEnabled()){
mVisualizer.setEnabled(true);
}
}捕获(非法状态){
Log.e(标记“start()非法状态异常”);
}
}
}
}
公共停车场(){
Log.i(“test11”、“stop”);
如果(!mUseSnoop){
if(mVisualizer!=null){
试一试{
if(mVisualizer.getEnabled()){
mVisualizer.setEnabled(false);
}
}捕获(非法状态){
Log.v(标记“stop()非法状态异常”);
}
}
}
}
公开无效释放(){
Log.i(“test11”、“release”);
如果(!mUseSnoop){
if(mVisualizer!=null){
mVisualizer.release();
mVisualizer=null;
}
}
}
公共字节[]getRawData(){
Log.i(“test11”、“getRawData”);
captureData();
返回mRawData;
}
public int[]getFormattedData(int num,int den){
如果(num==0)
num+=1;
如果(!mUseSnoop){
captureData();
if(mType==PCM\U类型){
对于(int i=0;i=2000){
mFormattedData=getFakeData(num,den);
}else if(mFormattedData[0]!=0){
SummeePeriod=SystemClock.uptimeMillis();
}
返回mFormattedData;
}
public void captureData(){
Log.i(“test11”、“captureData”);
int status=Visualizer.ERROR;
试一试{
if(mType==PCM\U类型){
状态=mVisualizer.getWaveForm(mRawData);
Log.i(“test11”、“getWaveForm(mRawData)”);
}否则
状态=mVisualizer.getFft(mRawData);
}捕获(例外e){
}最后{
如果(状态)=Vis
if (mType == PCM_TYPE)
    Arrays.fill(mRawData, (byte) 0x80);
else
    Arrays.fill(mRawData, (byte) 0);