相关链接:

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

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

先看一下效果图:

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(安卓)3.0 r1 API中文文档(107) —— AsyncPlayer
  2. Android(安卓)10ms问题:关于Android音频路径延迟的解释
  3. Android音频简介
  4. Android构建音频播放器教程(四)
  5. Android音频简介
  6. Android音频简介
  7. Android录音实现——使用AtudioRecord
  8. Android音频开发(6):Mp3的录制 - 使用Lame实时录制MP3格式音频
  9. Android音频开发(7):音乐可视化-FFT频谱图

随机推荐

  1. android 返回到首页
  2. Android(安卓)View滑动
  3. 升级到Android(安卓)10和gradle升级
  4. Android数据缓存
  5. Android(Gingerbread) Sensor Framework
  6. Android(安卓)UI设计模式
  7. android - Content-Type大全
  8. Android:JNI
  9. Android(安卓)记录一个智障错误
  10. php android json