2020-12-09

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
				}
			});





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值