相关链接:

Android 调用自带的录制音频程序
http://www.eoeandroid.com/thread-78949-1-1.html

MediaRecoder实现音频录制并播放
http://www.eoeandroid.com/thread-237311-1-1.html

Android 音频的介绍
http://www.eoeandroid.com/thread-68377-1-1.html

--------------帖子正文----------------

先看一下效果图:

Android音频可视化

public class FFTActivity extends Activity implements OnClickListener{        private Button button;        private ImageView imageView;        private int frequency = 8000;        private int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;        private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;        private RealDoubleFFT transformer;        private int blockSize = 256;        private boolean started = false;        private Canvas canvas;        private Paint paint;        private Bitmap bitmap;         @Override        protected void onCreate(Bundle savedInstanceState) {                 super.onCreate(savedInstanceState);                setContentView(R.layout.fft);                button = (Button) findViewById(R.id.fft_button);                button.setOnClickListener(this);                imageView = (ImageView) findViewById(R.id.fft_imageView);                transformer = new RealDoubleFFT(blockSize);                bitmap = Bitmap.createBitmap(256, 100, Bitmap.Config.ARGB_8888);                canvas = new Canvas(bitmap);                paint = new Paint();                paint.setColor(Color.GREEN);                imageView.setImageBitmap(bitmap);         }         private class RecordAudio extends AsyncTask<Void, double[], Void> {                 @Override                protected Void doInBackground(Void... params) {                        int bufferSize = AudioRecord.getMinBufferSize(frequency,                                        channelConfiguration, audioEncoding);                        AudioRecord audioRecord = new AudioRecord(                                        MediaRecorder.AudioSource.MIC, frequency,                                        channelConfiguration, audioEncoding, bufferSize);                        short[] buffer = new short[blockSize];                        double[] toTransform = new double[blockSize];                        audioRecord.startRecording();                        while (started) {                                //将record的数据 读到buffer中,但是我认为叫做write可能会比较合适些。                                int bufferResult = audioRecord.read(buffer, 0, blockSize);                                 for (int i = 0; i < bufferResult; i++) {                                        toTransform<i> = (double) buffer<i> / Short.MAX_VALUE;                                }                                transformer.ft(toTransform);                                publishProgress(toTransform);                        }                        audioRecord.stop();                        return null;                }                 @Override                protected void onProgressUpdate(double[]... values) {                         super.onProgressUpdate(values);                        canvas.drawColor(Color.BLACK);                        for (int i = 0; i < values[0].length; i++) {                                 int x=i;                                 int downy=(int)(100-(values[0]<i>)*10);                                 int upy=100;                                 canvas.drawLine(x, downy, x, upy, paint);                         }                        imageView.invalidate();                }        }         @Override        public void onClick(View v) {                started=true;         new  RecordAudio().execute();        } }

android音频可视化的原理是使用离散傅里叶变换,但是数学不好的同学不要担心,有开源的java离散傅里叶变换的代码!!直接到www.netlib.org/fftpack/jfftpack.tgz,直接将里面javasource目录拖动到(ca目录)src即可!!

更多相关文章

  1. Android实现文件夹目录选择器
  2. [置顶] 【Android】 基于XMPP Smack框架 开发QQ教程:目录
  3. Android 10ms问题:关于Android音频路径延迟的解释
  4. android studio模拟器本地安装目录
  5. Android构建音频播放器教程(四)
  6. 《疯狂Android讲义》第二版目录
  7. 《Android/OPhone 开发完全讲义》目录
  8. Android第二十六课 调试模式 file.exits判断目录异常

随机推荐

  1. android 正则表达式
  2. 【Android】创建Popwindow弹出菜单的两种
  3. 最新最全的js判断移动设备及操作系统
  4. android eclipse 创建虚拟机时界面的OK键
  5. 安卓课程十 表格布局介绍
  6. Android(安卓)图片动画,点击缩放回弹
  7. 【Android】OpenCV4Android开发技巧
  8. android实现蓝牙app代码
  9. android中压缩图片的几种方法比较
  10. android 随手记 videoview循环播放网络视