android实时声音信号波形 | 您所在的位置:网站首页 › 录音实时监听app › android实时声音信号波形 |
之前做过android的录音,编辑(裁剪和合成(WAV格式)),思路大概是从麦克风获取音频的详细数据填充到list集合中,再将这些数据经过计算画到屏幕上,算是实时录制的波形图!之后有一段时间没碰过那个项目了,虽然功能是做出来了,但是还不算是完整的,那要是播放的时候呢?播放的时候怎么实时动态的获取音频数据来绘制呢?思考良久,在逛github的时候,发现了这个功能!在这里做个记录,也给没有这方面知识的朋友们做个补充,分享一下! OK,先看效果图吧! 这里写图片描述 这个效果图是线性和圆形的音频傅里叶数据图形,当然还有柱状的效果图,这里并没有展示,整完这篇博客后,大家可以自己下载demo自己运行看看效果。 获取音频播放的实时数据并绘制,涉及到android提供的一个类,Visualizer,这个类可以捕获使用MediaPlayer的时候音频数据,主要返回两种类型的数据,一种是音频的波形数据,一种是傅里叶数据(未考究),android系统中关于这个类的描述几乎为0,并不像其它类会有大把英文注释!很烦。。 代码使用方法如下: 这里写图片描述 ` 很简单吧!只需要实现一个捕获监听即可! OK,我们再来看看柱状图。 效果图如下: 这里写图片描述 界面的效果有点糙?不急,我们理解了原理,之后慢慢改呗!哪有什么东西都是现成的? 先看自定义的界面展示的代码: /** * Copyright 2011, Felix Palmer * * Licensed under the MIT license: * http://creativecommons.org/licenses/MIT/ */ package com.tian.audio.wave.widget; import java.util.HashSet; import java.util.Set; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.media.MediaPlayer; import android.media.audiofx.Visualizer; import android.util.AttributeSet; import android.view.View; import com.tian.audio.wave.dao.AudioData; import com.tian.audio.wave.dao.FFTData; import com.tian.audio.wave.renderer.Renderer; /** * A class that draws visualizations of data received from a * {@link Visualizer.OnDataCaptureListener#onWaveFormDataCapture } and * {@link Visualizer.OnDataCaptureListener#onFftDataCapture } */ public class VisualizerView extends View { private static final String TAG = "VisualizerView"; private byte[] mBytes; private byte[] mFFTBytes; private Rect mRect = new Rect(); private Visualizer mVisualizer; private Set mRenderers; private Paint mFlashPaint = new Paint(); private Paint mFadePaint = new Paint(); public VisualizerView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs); init(); } public VisualizerView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public VisualizerView(Context context) { this(context, null, 0); } private void init() { mBytes = null; mFFTBytes = null; mFlashPaint.setColor(Color.argb(122, 255, 255, 255)); mFadePaint.setColor(Color.argb(238, 255, 255, 255)); // A |
CopyRight 2018-2019 实验室设备网 版权所有 |