final ImageView img1=findViewById(R.id.mainImageView1);
final Complexmatrix complexmatrix=new Complexmatrix();
Button bt3=findViewById(R.id.mainButton3);
bt3.findViewById(R.id.mainButton3);
bt3.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View p1)
{
//audiorecord1.stop();
boolean mIsPlaying=true;
int bufferSize=AudioTrack.getMinBufferSize(44100,AudioFormat.CHANNEL_CONFIGURATION_STEREO,AudioFormat.ENCODING_PCM_16BIT);
short[] buffer=new short[bufferSize];
File pcm1=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.pcm");
try
{
//定义输入流,将音频写入到AudioTrack类中,实现播放
DataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(pcm1)));
//实例AudioTrack
AudioTrack track=new AudioTrack(AudioManager.STREAM_MUSIC,44100,AudioFormat.CHANNEL_CONFIGURATION_STEREO,AudioFormat.ENCODING_PCM_16BIT,bufferSize,AudioTrack.MODE_STREAM);
//开始播放
track.play();
//由于AudioTrack播放的是流,所以,我们需要一边播放,一边读取
try
{
while (mIsPlaying && dis.available() > 0)
{
int i=0;
while(dis.available()>0&&i<buffer.length){
buffer[i]=dis.readShort();
// buffer1[i]=buffer[i];//增加数据为原来2倍
buffer1[2*i]=buffer[i];
buffer1[2*i+1]=buffer[i];
i++;
}
//然后将数据写入到AudioTrack中
track.write(buffer,0,buffer.length);
}
//播放结束
track.stop();
dis.close();
}
catch (IOException e)
{}
}
catch (FileNotFoundException e)
{}
short[] s=buffer1;//这里将储存的数据附在s中
Bitmap bmp1=complexmatrix.FFT(s.length,44100,s,MainActivity.this);//该方法没有用到FFT中的类似F8与F4,F64与F32中的关系,处理数据较慢
//Bitmap bmp1=complexmatrix.getanglewithFFT(s.length,44100,s,MainActivity.this);//该方法为FFT的核心方法,像这种方法用汇编语言写出来是最好的,作者水平有限,用java根据其原理写出该方法,速度还是比较快
ByteArrayOutputStream baos1=new ByteArrayOutputStream();
bmp1.compress(Bitmap.CompressFormat.JPEG,100,baos1);
byte[] bytes1=baos1.toByteArray();
Glide.with(MainActivity.this).load(bytes1).placeholder(R.drawable.ic_launcher).error(R.drawable.ic_launcher).into(img1);//Glide加载Bitmap方法,这里的Bitmao即为相应的频谱图
// TODO: Implement this method
}
});
2020-12-09
最新推荐文章于 2021-06-16 10:04:16 发布